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?

11voto

germanyDevelops Punkte 97

Ich habe dieses Problem häufig bei virtuellen Maschinen.

Bei mir funktioniert das folgendermaßen:

cd /path/to/your/project
rm -rf .git

Wenn Sie sich einige Downloads ersparen wollen, löschen Sie in Ihrem Dateiexplorer alle Dateien in dem Ordner, die bereits übertragen wurden, und lassen Sie sie in Ihrem /Lieferant y /node_modules (Ich arbeite mit PHP-Komponist y npm ) Mappen.

Dann erstellen Sie einfach ein neues Repository:

git init

Fügen Sie Ihre Fernbedienung hinzu

git remote add origin ssh://git@github.com/YourUsername/repoName.git

Und holen Sie den Zweig / alles davon

git fetch origin somebranch

Und schauen Sie sich das an

git checkout somebranch

Dann sollten Sie an dem Punkt vor dem Fehler sein.

9voto

haoqiang Punkte 129

Denn ich muss meinen Computer neu starten VM regelmäßig, irgendwie passiert mir dieses Problem sehr oft. Nach einigen Malen habe ich erkannt, dass ich den Vorgang nicht wiederholen kann beschrieben von Nathan Vanhoudnos jedes Mal, wenn dies geschieht, obwohl es immer funktioniert. Dann habe ich die folgende schnellere Lösung gefunden.

Schritt 1

Verschieben Sie Ihr gesamtes Repository in einen anderen Ordner.

mv current_repository temp_repository

Schritt 2

Klonen Sie das Repository erneut vom Ursprung.

git clone source_to_current_repository.git

Schritt 3

entfernen Alles unter dem neuen Repository mit Ausnahme des .git Ordner.

Schritt 4

Verschieben alles von der temp_repository in das neue Repository außer les .git Ordner.

Schritt 5

Entfernen Sie die temp_repository , und wir sind fertig.

Ich bin sicher, dass Sie diese Verfahren nach ein paar Mal sehr schnell durchführen können.

6voto

cyberfranco Punkte 61
  1. Verschieben Sie Ihren App-Ordner, um ein Backup zu erstellen, d.h., mv app_folder app_folder_bk (es ist wie ein Deppenhaufen )
  2. git clone your_repository
  3. Öffnen Sie schließlich ein Zusammenführungswerkzeug (ich verwende das Meldung Diff-Viewer unter Linux oder WinMerge unter Windows) und kopieren Sie die Änderungen von rechts ( app_ordner_bk ) nach links (neu app_folder ) (es ist wie ein git stash apply ).

Das war's schon. Vielleicht ist es nicht der beste Weg, aber ich denke, es ist so praktisch.

5voto

Raphayol Punkte 1146

In einem Skript

#! /bin/sh

# Save Git data
cp -r .git gitold

# Remove all empty Git object files
find .git -type f -empty -delete -print

# Get the current branch name
branchname=$(git branch --show-current)

# Get the latest commit hash
commit=$(tail -2 .git/logs/refs/heads/$branchname | awk '{ print $2 }' | tr -d '[:space:]')

# Set HEAD to this latest commit
git update-ref HEAD $commit

# Pull the latest changes on the current branch (considering remote is origin)
git pull origin $branchname

echo "If everything looks fine you remove the git backup running :\n\
      $ rm -rf gitold \n\
Otherwise restore it with: \n\
      $ rm -rf .git; mv gitold .git"

4voto

Gui-yi Punkte 41

Damit war mein Problem gelöst:

git stash
git checkout master
cd .git/ && find . -type f -empty -delete
git branch your-branch-name -D
git checkout -b your-branch-name
git stash pop

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