$ git pull
remote: fatal: object 21f3981dd35fccd28febabd96f27241eea856c50 is corrupted
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
Des idées pourquoi cela échoue?
Lorsque je lance git --bare fsck-objects --full
Je ne vois que des liens pendants mais pas de liens cassés. Aussi git gc
n'a aidé en aucune façon. Lorsque je reclone ou tire à partir d'un autre clone, je ne vois pas cette erreur.
Comme Julian l'a dit, voir https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header
Cela peut vraiment être un problème de mémoire, et pour être sûr de ne pas perdre la solution, c'est:
git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m"
git config --global pack.threads "1"
Ajouter git config --global pack.window "0"
a fonctionné pour moi ... avec suivi
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
Raison:
Git clone compresse les données lors du clonage du référentiel
Il compresse les données sur la mémoire du serveur avant de recevoir les données/fichiers.
Si le serveur n'a plus de mémoire, vous obtiendrez l'erreur ci-dessus lors de l'emballage des objets
Vous pouvez résoudre le problème en faisant git cloner le référentiel sans compresser les objets sur le serveur avec ce qui suit.
git config --global pack.window "0"
Il semble que la réponse se trouve dans les commentaires: git fsck
Je viens de recevoir cette erreur et j'ai passé une demi-journée à faire toutes les choses décrites dans le message: fsck, reconditionner, gc, configurer les options de mémoire.
A également suivi ce post: http://git.kernel.org/cgit/git/git.git/tree/Documentation/howto/recover-corrupted-blob-object.txt?id=HEAD
Mais à la fin, c'était aussi simple que de trouver l'objet endommagé (21f3981dd35fccd28febabd96f27241eea856c50 dans ce cas) dans le référentiel nu et de le remplacer par la version non endommagée (qui se trouve dans le dossier .git de l'un des référentiels locaux qui ont tiré/cloné à partir du référentiel nu.)
dans le client, essayez de le faire comme ceci:
git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m"
git config --global pack.threads "1"
git config --global pack.window "0"
ou sur le serveur git, essayez ceci: modifier: /home/git/repositories/***.git/config
, Ajouter ci-dessous:
[pack]
window = 0
Cela résout le problème pour moi et j'espère aider quelqu'un d'autre. :) https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header
Pour moi, c'était parce que mon serveur distant hébergeant le dépôt git avait un objet/fichier endommagé. Lorsque j'ai essayé de reconditionner, la mémoire était épuisée. J'ai mis à niveau ma mémoire d'instance, puis j'ai rétabli la mémoire et exécuté
git gc
Voici le lien vers la documentation: