web-dev-qa-db-fra.com

Erreur d'extraction GIT - l'objet distant est corrompu

$ 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.

46
Senthil A Kumar

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"
28
cazcade_neil

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"

15
logan

Il semble que la réponse se trouve dans les commentaires: git fsck

12
robrich

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.)

5
Shiva

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 
2
litian.zhuang

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

1
Julian

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:

https://git-scm.com/book/uz/v2/Git-Internals-Packfiles

0
zeros-and-ones