8
votes

Arbre de git corrompu?

Je suis de gros problèmes avec un référentiel git sur ma machine locale.

J'ai modifié un fichier, Ran Statut GIT et le fichier est apparu comme modifié. J'ai ajouté le fichier en utilisant git ajouter. et fonctionnait comme d'habitude. Mais quand j'étais sur le point de commettre les modifications, j'ai eu l'erreur suivante: xxx

en exécutant git cat-fichier -t -t e91ce852822d32e380ed7ddd04c93066e3c600ea , je peux voir que l'objet est un arbre.

J'ai vu plusieurs solutions sur la façon de réparer une blob corrompue ou de commettre, mais c'est un arbre, et je ne trouve pas de réponse sur ce qui aurait pu aller mal, ou comment le réparer.

Toute aide appréciée :)

git

3 commentaires

Avez-vous exécuté git fsck ?


Oui, même erreur. Cependant, c'est un autre objet, c'est aussi un arbre.


@Markrushakoff: Il suffit de recevoir la même erreur que OLOF, et git fsck sortit simplement le même message d'erreur.


3 Réponses :


2
votes

Qu'est-ce qui aurait pu mal tourner est difficile à dire, et dépend de votre version GIT et de votre environnement.
Par exemple, dans les vieux jours, il y avait un DISCIER ZLIB AVEC GIT1. 5.1 Déclencher ce type de message en raison d'un Legacyheaders = FAUX paramètres.

comme pour restaurer un arbre de Objets en vrac , cette réponse" Comment récupérer des objets GIT endommagés par une défaillance du disque dur? " illustre un moyen de le faire, après cela un git fsck --ful (comme Mark Rushakoff mentionne dans le commentaire) a été effectué. xxx

et vérifier le type de l'objet.

Si le type est l'arborescence: vous pouvez utiliser "git ls-arbores" pour récupérer l'arborescence des sauvegardes précédentes; Puis ' git mktree ' pour l'écrire à nouveau dans votre référentiel actuel.

mais que supposons trouver ces objets dans des packs plus anciens ou dans des sauvegardes de référentiel.


11 commentaires

Trébuché sur cette question aussi, mais .git / objets / paquet / est vide. Comment effectuer une recherche à travers des packs plus anciens?


@OLOF: packs plus anciens? Je crois que c'est là que la dernière phrase "mais suppose de trouver ces objets dans des packs plus anciens ou dans des sauvegardes sur le référentiel". Avez-vous des sauvegardes?


J'ai une sauvegarde, mais malheureusement, il est environ un mois. Comment puis-je les trouver dans des packs plus anciens? Je ne peux pas céder une commission plus ancienne non plus, la seule chose qui semble fonctionner est un journal git.


@Olof fait que le reflète fonctionne? Est Stackoverflow. com / questions / 4176784 / ... une possibilité ici?


Oui, le reflogue fonctionne, mais je ne suis pas sûr de la façon dont Stackoverflow.com/questions/4176784/... aide-moi? Je suis capable de créer une nouvelle succursale à partir du dernier commit, mais je ne peux pas vérifier la nouvelle succursale. Merci pour l'aide jusqu'à présent BTW =)


Exactement. Je reçois la même erreur que celle décrite dans la question. Cette erreur s'est produite sur d'autres référentiels sur le même disque dur. Peut-être que le disque est corrompu d'une manière ou d'une autre?


@OLOF: une corruption de disque est possible. Pouvez-vous reproduire le problème sur un autre disque?


Eh bien, il est difficile de se reproduire car il semble arriver au hasard. Mais c'est toujours le même scénario: a ajouté certains fichiers modifiés et essayé de commettre. Mais l'erreur se produit pendant la validation. La partie étrange est que le disque n'a que trois mois et tout le reste fonctionne bien.


Essayé d'avant en arrière avec des sauvegardes différentes, mais cela n'a toujours pas fonctionné. J'ai supprimé le repo et j'ai commencé partout. Sucks, oui, mais il ne semblait pas y avoir une autre façon d'aller .. Merci pour toute l'aide!


@OLOF: Désolé de lire ça. Je suppose que le nouveau repo n'a pas montré le même problème jusqu'à présent?


Non, pas si loin. Mais je pense que le problème est survenu car il est situé sur un dossier réseau partagé. Je ne sais pas grand chose de git et de dossiers partagés, mais c'est la seule chose à laquelle je puisse penser. Nous allons bientôt changer notre flux de travail pour inclure des serveurs de développement locaux. Nous nous débarrasserons donc si le problème du dossier partagé.



-2
votes

Bonjour, pour ma part, je viens de supprimer le répertoire Git et Re-Init Git.


1 commentaires

Voulez-vous dire supprimer le répertoire .git ? Alors ... pas git init je suppose?



5
votes

Si votre repo git est synchronisé avec une ressource externe (GitHub) et si une solution ne fonctionnait pas , vous pouvez réinitier votre repo

ce que j'ai fait: xxx

Ça a fonctionné. Évidemment, ce n'est pas une excellente solution, mais cela peut aider


1 commentaires

Parfois, tout ce que vous pouvez faire. Pas une bonne solution cependant, et vraiment seulement acceptable sur des projets solo :)