Après git init
, j'ai ajouté et validé quelques fichiers, apporté des modifications, ajouté et validé. Configurez le démon git (exécuté sous Cygwin sous WinXP) et cloné le référentiel une fois. Maintenant, je reçois cette erreur avec le référentiel cloné:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
Existe-t-il un moyen de résoudre ce problème, mis à part l'obtention d'une nouvelle copie du référentiel?
Si le problème concerne l’index la zone de stockage intermédiaire pour les commits (c.-à-d. .git/index
), vous pouvez simplement supprimer l’index (effectuer une sauvegarde). copie si vous le souhaitez), puis restaurez la version de l'index dans la dernière validation:
Sous OSX/Linux:
rm -f .git/index
git reset
Sous Windows:
del .git\index
git reset
(La commande reset
ci-dessus est identique à git reset --mixed HEAD
)
Vous pouvez également utiliser le niveau inférieur plomberiegit read-tree
au lieu de git reset
.
Si le problème concerne index pour fichier_pack, vous pouvez le récupérer à l'aide de git index-pack
.
Vous avez peut-être accidentellement corrompu le fichier .git/index avec un fichier sed à la racine de votre projet (refactoring peut-être?) Avec quelque chose comme:
sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT")
pour éviter cela à l'avenir, ignorez simplement les fichiers binaires avec votre grep/sed:
sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT")
Cela ressemble à un mauvais clone. Vous pouvez essayer ce qui suit pour obtenir (éventuellement?) Plus d'informations:
git fsck --full
J'ai eu ce problème, et j'essaie de résoudre ce problème avec ceci:
rm -f .git/index
git reset
Mais cela n'a pas fonctionné. La solution? Pour une raison quelconque, j'avais d'autres dossiers .git dans des sous-répertoires. Je supprime ces dossiers .git (pas le principal) et git reset
à nouveau. Une fois qu'ils ont été supprimés, tout a encore fonctionné.
Puisque les solutions ci-dessus m'ont laissé avec des problèmes persistants, j'ai utilisé cette solution ennuyeuse:
A fait le tour. Btw, j'ai fait un sed
sur la racine du projet comme @hobs l'a deviné. Appris ma leçon.
Cela a fonctionné pour moi. Bien que je sois curieux de la raison pour laquelle j'ai commencé à avoir les erreurs en premier lieu. Quand je me suis déconnecté hier, c'était bien. Connectez-vous ce matin, ça ne l'était pas.
rm .git/index
git reset
Remarque pour les utilisateurs de sous-modules git: les solutions présentées ici ne fonctionneront pas telles quelles.
Supposons par exemple que vous avez un référentiel parent appelé dev
et que votre référentiel de sous-modules s'appelle api
.
si vous êtes à l'intérieur de api
et que vous obtenez l'erreur mentionnée dans cette question:
error: bad index file sha1 signature fatal: index file corrupt
Le fichier index
ne sera PAS dans un dossier .git
. En fait, le .git
ne sera même pas un dossier - ce sera un document texte avec l'emplacement des données .git réelles pour ce référentiel. Probablement quelque chose comme ça:
~/dev/api $ cat .git gitdir: ../.git/modules/api
Donc, au lieu de rm -f .git/index
, vous devrez faire ceci:
rm -f ../.git/modules/api/index git reset
ou plus généralement
rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index git reset
Ce problème peut se produire lorsqu'un répertoire .git
se trouve sous l'un des sous-répertoires. Pour résoudre ce problème, vérifiez s’il existe d’autres répertoires .git, supprimez-les et réessayez.
Je faisais face au même problème. Renommer le fichier index dans .git/index, puis git reset fonctionne pour moi.