Danach habe git init
ich einige Dateien hinzugefügt und festgeschrieben, einige Änderungen vorgenommen, hinzugefügt und festgeschrieben. Richten Sie den Git-Daemon ein (der unter Cygwin unter WinXP ausgeführt wird) und klonen Sie das Repository einmal. Jetzt erhalte ich diesen Fehler mit dem geklonten Repository:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
Gibt es eine andere Möglichkeit, dies zu beheben, als eine neue Kopie des Repositorys zu erhalten?
git
corruption
Nummer 8
quelle
quelle
Antworten:
Wenn das Problem mit dem Index als Staging-Bereich für Commits (dh
.git/index
) besteht, können Sie den Index einfach entfernen (eine Sicherungskopie erstellen, wenn Sie möchten) und dann den Index auf die Version des letzten Commits zurücksetzen:Unter OSX / Linux:
Unter Windows:
(Der
reset
obige Befehl ist der gleiche wiegit reset --mixed HEAD
)Sie können alternativ auch niedrigere Wasserleitungen
git read-tree
anstelle von verwendengit reset
.Wenn das Problem mit dem Index für die Packdatei besteht , können Sie ihn mithilfe von wiederherstellen
git index-pack
.quelle
:w!
in a:Gstatus
(von fugitive.vim) gemacht. Diese Antwort ersparte mir viel Haarziehen.erase /s .git\index
, ich brauchte auch eineerase .git\index.lock
.git reset --keep
stattdessen zu verwenden ? Im Tower Git Cheat Sheet wird Folgendesgit reset --keep
ist eine sicherere Form vongit reset --hard
;git reset --mixed
berührt workdir überhaupt nicht.Möglicherweise haben Sie versehentlich die .git / index-Datei mit einem sed in Ihrem Projektstamm beschädigt (Refactoring vielleicht?) Mit folgenden Elementen:
Um dies in Zukunft zu vermeiden, ignorieren Sie einfach Binärdateien mit Ihrem grep / sed:
quelle
.git/index
, können Sie sie jederzeit löschen und mitgit reset
(ohne--hard
!) Neu erstellen .sed
mit so etwas wie invertieren.find .git/ -type f -exec sed -i 's/Legislator/Politician/g' {} \;
Dies könnte helfen, wenn Ihre.git/
so beschädigt ist, dassgit reset
nicht funktioniert. Oder Sie möchten Ihr vorhandenes wiederherstellen,.git/index
ohne es zu löschen. Dies schlägt natürlich fehl, wenn in Ihrem ursprünglichen Code oder Index bereits einige "Gesetzgeber" enthalten waren.sed
indem ichnew_string
mein durch mein ersetzt habeold_string
!Ich hatte dieses Problem und versuche es damit zu beheben:
Aber es hat nicht funktioniert. Die Lösung ? Aus irgendeinem Grund hatte ich andere .git-Ordner in Unterverzeichnissen. Ich lösche diese .git-Ordner (nicht den Principal) und
git reset
wieder. Sobald sie gelöscht wurden, funktionierte alles wieder.quelle
Das klingt nach einem schlechten Klon. Sie können Folgendes versuchen, um (möglicherweise?) Weitere Informationen zu erhalten:
quelle
Da die oben genannten Lösungen zu anhaltenden Problemen führten, habe ich diese langweilige Lösung verwendet:
Hat den Trick gemacht. Übrigens habe ich eine
sed
Projektwurzel erstellt, wie @hobs vermutet hat. Ich habe meine Lektion gelernt.quelle
Das hat bei mir funktioniert. Obwohl ich neugierig bin, warum ich die Fehler überhaupt erst bekommen habe. Als ich mich gestern abmeldete, war es in Ordnung. Melde dich heute Morgen an, das war es nicht.
quelle
Hinweis für Benutzer von Git-Submodulen - die Lösungen hier funktionieren für Sie nicht wie sie sind.
Angenommen, Sie haben beispielsweise ein übergeordnetes Repository aufgerufen
dev
und Ihr Submodul-Repository wird aufgerufenapi
.Wenn Sie sich innerhalb von befinden
api
und den in dieser Frage genannten Fehler erhalten:error: bad index file sha1 signature fatal: index file corrupt
Die
index
Datei befindet sich NICHT in einem.git
Ordner. Tatsächlich handelt.git
es sich nicht einmal um einen Ordner, sondern um ein Textdokument mit dem Speicherort der tatsächlichen Git-Daten für dieses Repository. Wahrscheinlich so etwas:~/dev/api $ cat .git gitdir: ../.git/modules/api
Stattdessen
rm -f .git/index
müssen Sie Folgendes tun:rm -f ../.git/modules/api/index git reset
oder allgemeiner
rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index git reset
quelle
Dieses Problem kann auftreten, wenn sich
.git
unter einem der Unterverzeichnisse ein Verzeichnis befindet . Überprüfen Sie zur Behebung, ob dort andere .git-Verzeichnisse vorhanden sind, entfernen Sie sie und versuchen Sie es erneut.quelle
Ich habe einen einfachen Trick gemacht. Ich klone das Repo in einen neuen Ordner. Kopierte den .git-Ordner aus dem neuen Ordner in den alten Ordner des Repos und ersetzte dort .git.
quelle
Weitere Informationen unter https://www.chris-shaw.com/blog/quick-fix-for-git-corrupt-index
quelle
Das ist lächerlich, aber ich habe gerade meinen Computer (Mac) neu gestartet und das Problem war verschwunden, als wäre es nie passiert. Ich hasse es, wie ein Support-Typ zu klingen ...
quelle
Sie können auch versuchen, die vorherige Version der Datei wiederherzustellen (wenn Sie Windows OS verwenden).
quelle