web-dev-qa-db-fra.com

Comment résoudre "Erreur: index incorrect - Fatal: fichier d'index corrompu" lors de l'utilisation de Git

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?

552
Number8

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.

1136
Jakub Narębski

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")
75
hobs

Cela ressemble à un mauvais clone. Vous pouvez essayer ce qui suit pour obtenir (éventuellement?) Plus d'informations:

git fsck --full
13
Gav

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é.

11
Cleiton Almeida

Puisque les solutions ci-dessus m'ont laissé avec des problèmes persistants, j'ai utilisé cette solution ennuyeuse:

  1. cloner une nouvelle copie du repo ailleurs
  2. copier le nouveau répertoire .git dans le dépôt (brisé) contenant les modifications que je voulais valider

A fait le tour. Btw, j'ai fait un sed sur la racine du projet comme @hobs l'a deviné. Appris ma leçon.

6
eskimwier

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
6
Eighty

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

4
jenming

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.

3
Nick Kuijpers

Je faisais face au même problème. Renommer le fichier index dans .git/index, puis git reset fonctionne pour moi.

0
Omar Hayat