88 votes

fichier d'index plus petit que prévu

Ce matin, j'ai commencé à recevoir cette erreur de git :

fatal : fichier d'index plus petit que prévu

fatal : git status --porcelain failed

Une idée de ce qui se passe et de la façon de résoudre le problème ?

0 votes

Avez-vous essayé ceci ? vertis.github.com/2012/01/24/

0 votes

Oui, j'ai essayé avant de poster. Le problème venait de mes sous-modules qui continuaient à corrompre mon fichier index (je ne sais pas pourquoi).

0 votes

@karellm Avez-vous découvert pourquoi ce qui se passait ?

117voto

meagar Points 85475

Le fichier d'index a été corrompu, mais il est facilement recréable. Il suffit de le supprimer...

rm .git/index

Vous pouvez ensuite réintroduire les fichiers que vous essayez de mettre en scène.

0 votes

Comme dit plus haut, cela ne fonctionnait pas à cause d'un conflit avec un sous-module qui corrompait mon index encore et encore... J'ai supprimé le sous-module, supprimé l'index et j'ai tout ajouté. Cela a finalement fonctionné. Merci de votre compréhension.

3 votes

Pourquoi cela se produit-il ? Cela s'est produit deux fois au cours des quinze derniers jours et je n'en vois pas la raison.

7 votes

Cela n'a pas fonctionné pour moi. Avant cette erreur, j'avais une copie de travail pratiquement propre. Après avoir supprimé le fichier d'index et exécuté git add . il s'est comporté comme si chaque fichier était nouveau et nécessitait un commit.

98voto

Scott Paradis Points 219

Si vous souhaitez conserver les modifications locales, procédez comme suit :

$ rm .git/index
$ git reset HEAD .

> Unstaged changes after reset:
  modified foo.txt
  modified bar.txt

1 votes

Une idée de la raison pour laquelle cela se produit ? Cela m'est arrivé environ 4 à 5 fois au cours des quinze derniers jours.

1 votes

Cette réponse est la meilleure. De plus, si vous utilisez les submodules de git, il faut faire attention : Supprimez également ces fichiers d'index (ils sont situés dans .git/modules/src ). Je me suis donc demandé pourquoi l'erreur se produisait encore après la suppression du fichier d'index (principal).

0 votes

Je suppose que cela peut se produire pour des raisons classiques, le processus est mort à mi-chemin, il n'y a plus d'espace disque, etc. Dans mon cas, il se peut que j'utilise un lien symbolique vers le dossier git pour créer des répertoires à utiliser pour la construction à la place des externes svn, bien que ce soit étrange car la seule opération sur ces dépôts est en lecture seule pour réinitialiser les dossiers de construction.

5voto

Misho Janev Points 143

Pour ceux qui ont des problèmes même après avoir enlevé l'index et qui ne peuvent pas faire une réinitialisation. Si vous souhaitez conserver vos modifications, procédez comme suit (ce n'est pas une solution, mais plutôt une solution de contournement peu glorieuse !)

  1. Faites une sauvegarde de vos fichiers, ce que je m'apprête à dire devrait mais faites-le au cas où.
  2. Supprimer le dossier .git
  3. Clonez votre dépôt (peu importe où), je l'ai fait dans le répertoire courant.
  4. Copiez le fichier créé à partir du répertoire .git cloné dans votre répertoire courant.
  5. Supprimer le répertoire cloné 6. Facultatif, si vous avez utilisé une branche pour la vérifier à nouveau
  6. Le statut Git devrait maintenant suivre les modifications comme il est censé le faire et toutes vos commandes git devraient fonctionner.

Mon cas était tel que décrit ci-dessus, git avait mal géré ses références... Git log affichait "votre branche semble être cassée" et git fsck me mettait en garde contre de mauvaises références. Je me suis dit que je pouvais probablement résoudre le problème, mais que je passerais beaucoup de temps à le faire, et j'ai donc opté pour une solution de contournement moche.

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