645 Stimmen

Wie kann ich den Git-Fehler "Objektdatei ... ist leer" beheben?

Wenn ich versuche, Änderungen zu übertragen, erhalte ich diesen Fehler:

error: object file .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0 is empty
fatal: loose object 3165329bb680e30595f242b7c4d8406ca63eeab0 (stored in .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0) is corrupt

Ich habe versucht git fsck Das habe ich:

error: object file .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71 is empty
fatal: loose object 03dfd60a4809a3ba7023cbf098eb322d08630b71 (stored in .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71) is corrupt

Wie kann ich diesen Fehler beheben?

1voto

qiucw Punkte 49

Ich bin auf das gleiche Problem gestoßen und habe es mit einer sehr einfachen Methode gelöst. Ich fand heraus, dass diese fehlenden Dateien auf dem Computer meines Teamkollegen vorhanden waren.

I diese Dateien nacheinander kopiert auf einen Git-Server übertragen (insgesamt 9 Dateien), und damit war das Problem behoben.

1voto

Code Realistic Punkte 53

Hier ist eine Möglichkeit, das Problem zu lösen, wenn Ihr öffentliches Repository auf github.com funktioniert, aber Ihr lokales Repository beschädigt ist. Seien Sie sich bewusst, dass Sie alle Commits, die Sie im lokalen Repository vorgenommen haben, verlieren werden.

Gut, ich habe also ein lokales Repository, das mir folgendes Problem bereitet object empty error und das gleiche Repository auf github.com, aber ohne diesen Fehler. Ich habe also einfach das funktionierende Repository von GitHub geklont und dann alles aus dem beschädigten Repository kopiert (außer der .git Ordner), und fügen Sie das geklonte Repository ein, das funktioniert.

Dies ist zwar keine praktische Lösung (da Sie die lokalen Commits löschen), aber Sie erhalten den Code und eine reparierte Versionskontrolle.

Denken Sie daran, vor der Anwendung dieser Methode ein Backup zu erstellen.

1voto

Benjamin Basmaci Punkte 1886

In meinem Fall war es nicht wichtig, dass ich die lokale Commit-Historie behalte. Wenn das also auch auf Sie zutrifft, können Sie dies als schnelle Alternative zu den oben genannten Lösungen tun:

Sie ersetzen im Grunde nur die beschädigten .git/ Verzeichnis durch ein sauberes ersetzen.

Nehmen wir das folgende Verzeichnis für Ihr Projekt mit den beschädigten Git-Dateien an: projects/corrupt_git/

  1. cp projects/corrupt_git projects/backup - (optional) eine Sicherungskopie erstellen
  2. git clone [repo URL] projects/clean_git - so dass Sie projects/clean_git
  3. rm -rf corrupt_git/.git/ - entfernen Sie die beschädigten .git Ordner
  4. mv clean_git/.git/ corrupt_git/ - sauberes Git nach corrupt_git/.git
  5. git status en projects/corrupt_git - um sicherzustellen, dass es funktioniert

1voto

Jacob Punkte 49

Die Zwölf-Schritte-Lösung abgedeckt von Nathan VanHoudnos hat mir auch aus der Patsche geholfen. Ich danke Ihnen. Die wichtigsten Schritte waren die Eingabe:

git fsck --full

und entfernen Sie alle leeren Objekte

rm .git/objects/...

Dann die beiden Zeilen der Auspeitschung:

tail -n 2 .git/logs/refs/heads/master

Mit den zurückgegebenen Werten

git update-ref HEAD ...

Da zu diesem Zeitpunkt keine Fehler mehr auftraten, erstellte ich eine Sicherungskopie meiner letzten Dateien. Dann machte ich einen Git-Pull, gefolgt von einem Git-Push. Ich kopierte meine Backups in meine Git-Repository-Datei und machte einen weiteren Git-Push. Das brachte mich auf den neuesten Stand.

0voto

Aquarius Power Punkte 3431

Wenn Sie eine alt Backup und sind in Eile:

Machen Sie eine neues Backup Ihres aktuellen, mit Git gebrochenen, Projektpfads.

  1. bewegen Sie Ihr .git in den Papierkorb (niemals löschen)
  2. kopieren. .git von der alt Backup
  3. git pull (führt zu Konflikten beim Zusammenführen)
  4. verschieben Sie alle Ihre Quellen (alles, was Sie in Git eingegeben haben) in den Papierkorb: ./src (niemals löschen)
  5. Kopieren Sie alle Ihre Quellen (alles, was Sie in Git eingegeben haben) aus dem Verzeichnis neues Backup
  6. alle "Fusionen" akzeptieren bei git gui Drücken Sie und... klatschen Sie in die Hände!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X