Que puis-je faire avec la corruption Git due à un objet manquant?
je viens de cloner un dépôt sur un autre serveur distant et j'ai rencontré un problème en essayant de le faire:
git clone git@codebasehq.com:blah/blah/docs.git
Cloning into docs...
remote: Counting objects: 343, done.
remote: error: unable to find 14f87a739828e4d489b0310a51e057b30333926e
remote: Compressing objects: 100% (325/325), done.
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: fatal: unable to read 14f87a739828e4d489b0310a51e057b30333926e
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
j'ai fait un peu de recherches et découvert git fsck
, voici le résultat:
$ git fsck --full
error: sha1 mismatch 14f87a739828e4d489b0310a51e057b30333926e
error: 14f87a739828e4d489b0310a51e057b30333926e: object corrupt or missing
missing blob 14f87a739828e4d489b0310a51e057b30333926e
toutes les autres personnes avec des problèmes similaires ont un problème de lien cassé ou quelque chose. Je suis encore assez nouveau avec Git, quelqu'un sait comment réparer ça?
je peux toujours accéder à mon dépôt central distant, mais je ne peux pas le cloner.
14f87a739828e4d489b0310a51e057b30333926e
est un blob qui est un fichier markdown dans la racine du dépôt. J'ai essayé de supprimer ce fichier et pousser ces changements en vain.
Edit: est-il possible d'importer l'historique git à partir d'un autre repo? Je pense que je pourrais commencer un nouveau repo et copier mes fichiers dedans et ensuite importer l'historique de commit.
3 réponses
si ce n'est qu'un seul fichier et qu'il n'est pas encore emballé, vous devriez pouvoir le trouver dans .git/objects/14/f87a739828e4d489b0310a51e057b30333926e
dans votre dépôt local. Vous pouvez copier ces fichiers dans le répertoire correspondant du dépôt de votre serveur.
si elle est emballée, vous devriez pouvoir la déballer en utilisant git unpack-objects
sur l'un des fichiers du pack dans .git/objects/pack/
. Après cela, copier sur le serveur fonctionne comme décrit ci-dessus.
voici presque la même question avec une solution très détaillée:Dépôt Github De La Corruption - Sha1 Collision
simple push ne corrigera pas ce problème, parce que git voit qu'il a la propagation qui se réfère au fichier corrompu et supposera qu'il a tous les objets dont il a besoin.
avez-vous un autre dépôt avec le projet qui ne signale aucun problème avec fsck (et a le fichier en question)? Par exemple: sur votre machine locale? Que vous devriez essayer:
- mettez le dépôt corrompu de côté.
- cloner le bon dépôt à sa place.
- appuyez sur n'importe quel branches l'ancien dépôt provenait d'autres dépôts ou de l'ancien dépôt.
puisque ce genre d'erreur signifie que le fichier sur le disque était corrompu, je vous suggère de faire un vérification approfondie du système de fichiers, du disque et de la mémoire (les données pouvaient être corrompues en mémoire quand git les sauvegardait).
Note: alors que tous les disques ont au moins quelques checksums, la plupart des puces Mémoire n'en ont pas du tout, donc un défaut de mémoire est plus susceptible de passer inaperçu qu'un disque faute. memtest86+ est un bon moyen de vérifier la mémoire.