2010-11-13 6 views
41
$ git pull 

remote: fatal: object 21f3981dd35fccd28febabd96f27241eea856c50 is corrupted 
error: git upload-pack: git-pack-objects died with error. 
fatal: git upload-pack: aborting due to possible repository corruption on the remote side. 
remote: aborting due to possible repository corruption on the remote side. 
fatal: protocol error: bad pack header 

Irgendwelche Ideen, warum dies scheitert?
Wenn ich git --bare fsck-objects --full ausführen, sehe ich nur dangling Links, aber keine defekten Links. Auch git gc hat in keiner Weise geholfen. Wenn ich einen anderen Klon neu klicke oder ziehe, sehe ich diesen Fehler nicht.GIT Pull-Fehler - Remote-Objekt ist beschädigt

+6

Haben Sie 'git fsck' auf der Fernbedienung? Wenn nicht, hat es keinen Einfluss auf den Fehler - das ist ein Objekt auf der entfernten Seite, und "fsck" in Ihrem Repo untersucht die Objekte in Ihrem Repo. Es hat keine Möglichkeit, die in der Fernbedienung zu sehen. – Cascabel

+0

Ja bin ich "git fsck" im entfernten blanken Repository laufen. –

+9

Versuchen Sie 'git fsck --full 21f3981; git repack "auf der Fernbedienung. Wenn dies erneut auftritt, überprüfen Sie Ihre Firewall. –

Antwort

11

Es scheint die Antwort in den Kommentaren ist: git fsck

+0

Es ist viel wahrscheinlicher, dass auf dem Server kein RAM mehr verfügbar war, um Pack-Dateien zu erstellen. –

1

dieses Problem zu beheben, das Problem für mich und Hoffnung hilft sombody anderes. :) https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header

+5

Beachten Sie, dass [Link-Only-Antworten] (http://meta.stackoverflow.com/tags/link-only-answers/info) nicht empfohlen werden. SO-Antworten sollten der Endpunkt einer Suche nach einer Lösung sein (vs. ein weiterer Zwischenstopp von Referenzen, die im Laufe der Zeit abgestanden werden). Bitte beachten Sie, dass Sie hier eine eigenständige Zusammenfassung hinzufügen und den Link als Referenz beibehalten. – kleopatra

25

Wie Julian sagte siehe https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header

Es ist wirklich ein Speicherproblem sein kann, und um sicherzustellen, dass wir die Lösung hier nicht verlieren es ist:

git config --global pack.windowMemory "100m" 
git config --global pack.SizeLimit "100m" 
git config --global pack.threads "1" 
+0

Das funktionierte wie Charme! –

+2

hinzufügen 'git config --global pack.window" 0 "' hat für mich funktioniert .. – logan

+2

Wenn Ihr Server das smart http-Protokoll verwendet, können Sie möglicherweise keine globale Konfiguration für den Prozess festlegen. Stattdessen "cd" in das Verzeichnis des Git-Repository selbst und führen Sie die gleichen Befehle ohne '--global' aus. – yig

5

sind gerade diese Fehler und verbrachte einen halben Tag damit, all die Dinge zu tun, die im Post beschrieben wurden: fsck, repack, gc, Speicheroptionen konfigurieren.

folgten auch diesen Beitrag: http://git.kernel.org/cgit/git/git.git/tree/Documentation/howto/recover-corrupted-blob-object.txt?id=HEAD

Aber am Ende war es so einfach wie das beschädigte Objekt (21f3981dd35fccd28febabd96f27241eea856c50 in diesem Fall) in dem nackten Repository zu finden und es mit der nicht beschädigten Version ersetzt wird (was sein kann im .git Ordner von einem des lokalen Repositories gefunden, die aus dem bloßen Repository gezogen/geklont.)

15

Hinzufügen git config --global pack.window "0" für mich gearbeitet ... zusammen mit folgenden

git config --global pack.windowMemory "100m" 
git config --global pack.packSizeLimit "100m" 
git config --global pack.threads "1" 

Grund:

Git-Klon komprimiert die Daten, während das Repository, bevor die Daten/Dateien empfangen

Es komprimiert die Daten auf dem Server-Speicher zu klonen.

Wenn der Server nicht genügend Arbeitsspeicher hat wird die obige Fehlermeldung erhalten, während die Objekte

Verpacken Sie können das Problem beheben, indem sie git das Repository klonen, ohne mit der folgenden Objekte auf dem Server zu packen.

git config --global pack.window "0"

+1

Vielen Dank dafür und die Erklärung. Das hilft mir sehr! – StefMa

+0

Ist diese Konfiguration für Client oder Server? –

+0

@AaronWang: Dies ist für Client-Rechner, wo Sie Ihr Repository klonten !! – logan

0

Das war für mich, weil mein Remote-Server des git Repo hatte ein beschädigtes Objekt/Datei-Hosting. Als ich versuchte, das Paket zu packen, war der Speicher knapp.Ich habe ein Upgrade meine Instanz Speicher und dann in ssh-ed zurück und lief

git gc 

Hier ist der Link zu der Dokumentation:

https://git-scm.com/book/uz/v2/Git-Internals-Packfiles

0

im Client, versuchen Sie es tun wie folgt aus:

git config --global pack.windowMemory "100m" 
git config --global pack.SizeLimit "100m" 
git config --global pack.threads "1" 
git config --global pack.window "0" 

oder im git-Server, versuchen Sie dies: ändern: /home/git/repositories/***.git/config, fügen Sie unter:

[pack] 
     window = 0 
+0

Dies löste das Problem auch für mich, d. H. Die Konfigurationsänderung auf der Serverseite – Sqripter