Indexdatei kleiner als erwartet

81

Heute Morgen habe ich angefangen, diesen Fehler von git zu bekommen:

fatal: Indexdatei kleiner als erwartet

tödlich: Git-Status - Porzellan fehlgeschlagen

Irgendeine Idee, was passiert und wie man es löst?

Karellm
quelle
Haben Sie versucht, diese vertis.github.com/2012/01/24/…
Gal Bracha
Ja, ich habe es vor dem Posten versucht. Das Problem war mit meinen Submodulen, die meine Indexdatei immer wieder beschädigten (ich weiß nicht warum).
Karellm
@karellm Hast du herausgefunden, warum das passiert ist?
Crmpicco
Nein, um ehrlich zu sein, ich habe nicht untersucht, was es verursacht hat, und es hat auch aufgehört zu passieren.
Karellm
Tipp: Nach meiner Erfahrung kann dies daran liegen, dass ein NFS-Ordner nicht aktualisiert wird. Wenn Ihr Repo auf NFS läuft, warten Sie einige Minuten, bevor Sie versuchen, das Problem zu beheben. Ich hatte dies, nachdem ich von einer Maschine gezogen und dann den Status auf einer anderen überprüft hatte, wobei beide Maschinen das gleiche NFS montierten.
ggll

Antworten:

107

Die Indexdatei ist beschädigt, kann jedoch leicht neu erstellt werden. Entfernen Sie es einfach ...

rm .git/index

Anschließend können Sie die Dateien, die Sie bereitstellen möchten, erneut hinzufügen.

meagar
quelle
Wie oben erwähnt, funktionierte es nicht aufgrund eines Konflikts mit einem Submodul, das meinen Index immer wieder beschädigte ... Ich entfernte das Submodul, entfernte den Index und fügte alle hinzu. Es hat endlich funktioniert. Vielen Dank!
Karellm
3
Warum passiert das? Ich habe dies in den letzten 14 Tagen zweimal erlebt und kann keinen Grund dafür erkennen.
Crmpicco
7
Das hat bei mir nicht funktioniert. Vor diesem Fehler hatte ich eine größtenteils saubere Arbeitskopie. Nach dem Entfernen und Ausführen der Indexdatei git add .verhielt sie sich so, als ob jede einzelne Datei neu wäre und ein Commit benötigt.
Mark
1
Funktioniert auch nicht, wenn man ein Submodul hat. Einfach zurücksetzen (siehe Antwort).
TimZaman
Wenn ich herausfand, dass ich nach dem Ausführen git restore --stagedeine ausführen musste, wurde das Problem behoben, dass Git dachte, alles müsse neu festgelegt werden
ViperSniper0501
90

Wenn Sie lokale Änderungen beibehalten möchten, verwenden Sie Folgendes:

$ rm .git/index
$ git reset HEAD .

> Unstaged changes after reset:
  modified foo.txt
  modified bar.txt
Scott Paradis
quelle
1
Irgendeine Idee, warum das passiert? Es ist mir in den letzten 14 Tagen ungefähr 4-5 Mal passiert.
Crmpicco
1
Diese Antwort ist die beste hier. Heads-up, wenn Sie Git-Submodule verwenden: Entfernen Sie auch diese Indexdateien (sie befinden sich in .git/modules/src). Ich habe mich gefragt, warum der Fehler nach dem Entfernen der (Haupt-) Indexdatei immer noch aufgetreten ist.
Graftak
Ich würde vermuten, dass dies aus Standardgründen passieren könnte, der Prozess auf halbem Weg abgebrochen ist, nicht genügend Speicherplatz vorhanden ist usw. In meinem Fall kann es jedoch sein, dass ich einen Symlink zum git-Ordner verwende, um Verzeichnisse zu erstellen, die anstelle von svn-Externals zum Erstellen verwendet werden , obwohl es seltsam ist, da die einzige Operation auf diesen Repos schreibgeschützt ist, um die Build-Ordner hart zurückzusetzen.
jgmjgm
2

Für diejenigen, die auch nach dem Entfernen des Index Probleme haben und keinen Reset durchführen können. Wenn Sie Ihre Änderungen beibehalten möchten, gehen Sie wie folgt vor (keine Lösung, sondern eine hässliche Problemumgehung!).

  1. Erstellen Sie eine Sicherungskopie Ihrer Dateien. Was ich gleich sagen werde, sollte funktionieren, aber nur für den Fall.
  2. Entfernen Sie den Ordner .git
  3. Klonen Sie Ihr Repository (egal wo). Ich habe es im aktuellen Verzeichnis gemacht
  4. Kopieren Sie das aus dem Klon .git erstellte Verzeichnis in Ihr aktuelles Verzeichnis
  5. Entfernen Sie das geklonte Verzeichnis 6. Optional, wenn Sie erneut eine Verzweigungsprüfung durchgeführt haben
  6. Der Git-Status sollte nun die Änderungen nachverfolgen und alle Ihre Git-Befehle sollten funktionieren

Mein Fall war wie oben beschrieben, Git hatte seine Referenzen durcheinander gebracht ... Git logzeigte "Ihr Zweig scheint kaputt zu sein" und git fsckwarnte mich vor schlechten Referenzen. Ich dachte mir, ob ich es wahrscheinlich reparieren kann, aber ich würde viel Zeit damit verbringen, also habe ich mich für die hässliche Problemumgehung entschieden.

Mischo Janev
quelle