103 votes

Git commit a cessé de fonctionner - Erreur lors de la construction des arbres

Je ne peux pas commettre un changement:

$ git commit
erreur: objet invalide 100644 13da9eeff5a9150cf2135aaed4d2e337f97b8114 pour 'spec/routing/splits_routing_spec.rb'
erreur: Erreur de construction des arbres

Jusqu'à présent, j'ai essayé :

$ git fsck | grep 13da
blob manquant 13da9eeff5a9150cf2135aaed4d2e337f97b8114

et aussi :

$ git prune
error: Impossible de lire 1394dce6fd1ad15a70b2f2623509082007dc5b6c
fatal: objet d'arbre invalide 1394dce6fd1ad15a70b2f2623509082007dc5b6c

et aussi :

$ git fsck | grep 13da
blob manquant 13da9eeff5a9150cf2135aaed4d2e337f97b8114

mais rien n'a aidé. Devrais-je supprimer le fichier, committer et le réintroduire ensuite? Je suis prêt à perdre un peu d'historique si cela ramène le git commit.

170voto

Alex Nikulin Points 624

Cette erreur signifie que vous avez un fichier avec le hachage 13da9eeff5a9150cf2135aaed4d2e337f97b8114, et ce hachage n'est pas présent dans .git/objects/../, ou il est vide. Lorsque cette erreur s'est produite, j'avais seulement ce hachage dans l'erreur, sans le chemin du fichier. Ensuite j'ai essayé de faire git gc --auto et git reset --hard. Après une de ces commandes (ces commandes n'ont pas résolu mon problème), j'ai obtenu le chemin du fichier qui déclenche l'erreur.

Il vous suffit de générer le hachage de l'objet :

git hash-object -w spec/routing/splits_routing_spec.rb

Pour plus d'informations, consultez la documentation. Dans la documentation, il y a une autre façon de réparer cette erreur.

P.S. C'était la seule façon qui m'a été utile.

2 votes

J'ai fait cela et cela fonctionne, mais l'erreur réapparaît la prochaine fois que j'essaie de valider, y a-t-il une solution permanente?

0 votes

@NotSoShabby peut-être que le problème vient de votre disque dur. Votre fichier meta est corrompu par un processus ou un problème matériel.

1 votes

Il y avait plusieurs fichiers corrompus pour moi et après avoir exécuté la commande ci-dessus sur tous les fichiers, git a quand même généré une erreur fatale sans pointer vers un fichier particulier. J'ai exécuté "git hash-object -t ." pour régénérer le hachage de tous les fichiers, et ensuite tout était bon.

23voto

LopSae Points 2189

Vous pourriez avoir un objet corrompu dans votre dépôt git.

Si vous avez un dépôt distant, ou d'autres clones de ce dépôt, vous pourriez récupérer à partir de là le fichier problématique et le remplacer simplement dans votre dépôt local.

Le fichier que vous voulez serait dans:

/repo/.git/objects/13/da9eeff5a9150cf2135aaed4d2e337f97b8114

3 votes

Dans mon cas, le fichier référencé n'est plus dans le dossier des objets .git! >.<

0 votes

Exactement: vous voulez le chercher dans d'autres clones du dépôt, où il pourrait exister

0 votes

J'ai eu le même problème en raison d'une erreur d'E/S. Je n'ai pas pu remplacer le fichier mais j'ai supprimé le dossier entier (dans l'exemple donné ce serait /local/.git/objects/13/) et j'ai copié une copie depuis mon dépôt distant. Ça a fonctionné et tout est de nouveau opérationnel ! Merci

17voto

Tom Macdonald Points 1368

git reset --hard devrait ramener votre dépôt à la normale, mais vous perdrez les modifications non validées.

11 votes

$ git reset --hard donne fatal : impossible de lire l'arborescence 2287adf1b2a974541ce5806abc23dbd79814d666

2 votes

git.wiki.kernel.org/index.php/… pourrait alors être utile.

3 votes

+1 reset --hard a fonctionné pour moi. Mon problème est que Google Drive synchronise mon code local sur plusieurs machines - vous devez penser à l'arrêter et le redémarrer pour qu'il se synchronise. Je pense que Google Drive doit délibérément ignorer la surveillance des répertoires .git en raison des changements massifs.

10voto

Archias Points 101

Si le fichier problématique est ajouté par votre modification, vous pouvez simplement le supprimer de l'index et le rajouter à nouveau :

git reset 
git add

3 votes

Cela ne fonctionne pas si le fichier est désormais manquant sur votre disque dur; car il n'y a aucun fichier physique à réinitialiser, vous obtenez un message de fatal: argument ambigu 'chemin/vers/fichier.ext': révision inconnue ou chemin non présent dans l'arborescence de travail.

10voto

Pranav Points 133

Un simple astuce mentionnée dans cet article Medium a résolu mon cas où j'ai rencontré des problèmes similaires d''objet invalide' et d''erreur de construction d''arbre'. La solution est assez simple:

git hash-object -w 

Après cela, git va créer un Sha1 pour le fichier dont les hachages ne correspondaient pas et son dépôt sera corrigé.

Maintenant je peux utiliser git add * et git commit -m sans aucun problème. C'est tout.

Note: Créez une copie (alias sauvegarde) au cas où vous n'êtes pas sûr de ce que vous faites.

0 votes

C'est ce qui a résolu le problème pour moi, aucune des réponses ci-dessus n'a fonctionné du tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X