Comment est-ce que je traite des fichiers d’object git corrompus?

J’ai fait un gros effort quand j’étais près de mon quota et, en conséquence (donc je pense), j’ai un fichier corrompu:

$ git pull walk dffbfa18916a9db95ef8fafc6d7d769c29a445aa fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted $ git fsck --full bad sha1 file: .git/objects/66/b55c76947b1d38983e0944f1e6388c86f07a1b.temp fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted $ git cat-file -t d4a0e7599494bfee2b5351113895b43c351496b3 error: unable to find d4a0e7599494bfee2b5351113895b43c351496b3 fatal: git cat-file d4a0e7599494bfee2b5351113895b43c351496b3: bad file 

Comment puis-je résoudre cette corruption?

.git / objects / 66 / b55c76947b1d38983e0944f1e6388c86f07a1b.temp était de zéro octet; sa suppression n’a rien fait pour résoudre mon problème (mêmes erreurs).

En général, réparer des objects corrompus peut être assez difficile. Cependant, dans ce cas, nous sums convaincus que le problème est un transfert abandonné, ce qui signifie que l’object se trouve dans un référentiel distant, nous devrions donc pouvoir supprimer notre copie en toute sécurité et laisser git l’obtenir de la télécommande, cette fois-ci correctement. .

Le fichier object temporaire, de taille nulle, peut évidemment être supprimé. Cela ne va pas nous faire du bien. L’object corrompu qui s’y réfère, d4a0e75... , est notre véritable problème. On peut le trouver dans .git/objects/d4/a0e75... Comme je l’ai dit ci-dessus, il sera prudent de l’enlever, mais juste au cas où, sauvegardez-le d’abord.

À ce stade, une nouvelle git pull devrait réussir.

… en supposant que cela allait réussir en premier lieu. Dans ce cas, il semble que certaines modifications locales ont empêché la fusion tentée, donc un stash pop stash , pull , stash pop était en ordre. Cela peut arriver avec n’importe quelle fusion, et n’a rien à voir avec l’object corrompu. (Sauf si un nettoyage de l’index était nécessaire, et que la réserve le faisait pendant le processus … mais je ne le crois pas.)

vous pouvez utiliser “find” pour supprimer tous les fichiers du dossier / objects de taille 0 avec la commande find .git/objects/ -size 0 -delete . La sauvegarde est recommandée.

Récupérer à partir du repository La corruption est la réponse officielle.

La réponse vraiment courte est la suivante: trouver des objects non corrompus et les copier.