2010-11-13 21 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 

Jakieś pomysły, dlaczego tak się nie dzieje?
Po uruchomieniu git --bare fsck-objects --full widzę tylko zwisające łącza, ale nie są uszkodzone łącza. Również git gc nie pomogło w żaden sposób. Kiedy wycofam się lub ściągam z innego klonu, nie widzę tego błędu.Błąd pobierania GIT - zdalny obiekt jest uszkodzony

+6

Czy używasz 'git fsck' na pilocie? Jeśli nie, nie ma to wpływu na błąd - to obiekt na zdalnej stronie, a 'fsck' w twoim repo bada obiekty w repozytorium. Nie ma możliwości zobaczenia tych na pilocie. – Cascabel

+0

Tak, działa "git fsck" w zdalnym nagim repozytorium. –

+9

Spróbuj 'git fsck --full 21f3981; git przepakuj 'na pilocie. Jeśli to się powtórzy, sprawdź zaporę ogniową. –

Odpowiedz

11

Wydaje się, że odpowiedź jest w komentarzach: git fsck

+0

Jest znacznie bardziej prawdopodobne, że na serwerze zabrakło pamięci RAM, tworząc pliki pakietów. –

1

to rozwiązać problem dla mnie i nadzieja pomaga sombody innego. :) https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header

+5

Należy pamiętać, że [odpowiedzi dotyczące tylko łącza] (http://meta.stackoverflow.com/tags/link-only-answers/info) są odradzane, odpowiedzi na pytania powinny być punktem końcowym wyszukiwania rozwiązania (jeszcze jeden przystanek referencji, które z czasem zanikają). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra

25

Julian powiedział zobaczyć https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header

To rzeczywiście może być problem pamięci i mieć pewność, że nie stracisz rozwiązanie to jest tutaj:

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

To działało jak urok! –

+2

dodanie 'git config --global pack.window" 0 "' działało dla mnie .. – logan

+2

Jeśli twój serwer używa protokołu inteligentnego http, możesz nie być w stanie ustawić globalnej konfiguracji dla procesu. Zamiast tego wpisz 'cd' w katalogu repozytorium git i uruchom te same komendy bez' --global'. – yig

5

Właśnie ten błąd i spędził pół dnia robiąc wszystkie rzeczy opisane we wpisie: fsck, przepakowanie, gc, konfigurowanie opcji pamięci.

następnie także tego posta: http://git.kernel.org/cgit/git/git.git/tree/Documentation/howto/recover-corrupted-blob-object.txt?id=HEAD

Ale w końcu, że to tak proste jak znalezienie uszkodzonego obiektu (21f3981dd35fccd28febabd96f27241eea856c50 w tym przypadku) w gołej repozytorium i zastąpienie go non wersji uszkodzonego (które mogą być znalezione w folderze .git któregoś z lokalnych repozytoriów, które ciągnęły/sklonowanych z gołego repozytorium.)

15

Dodawanie git config --global pack.window "0" pracował dla mnie ... wraz z następującymi

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

Powód:

git clone kompresuje dane podczas klonowania repozytorium

To kompresuje dane w pamięci serwera przed otrzymaniem danych/plików.

Jeśli serwer ma z pamięci pojawi się powyższy błąd podczas pakowania przedmiotów

Można rozwiązać ten problem poprzez git sklonować repozytorium bez pakowania przedmiotów na serwerze z następujących czynności.

git config --global pack.window "0"

+1

Dziękuję za to i wyjaśnienie. To mi bardzo pomogło! – StefMa

+0

Czy to jest konfiguracja dla klienta lub serwera? –

+0

@AaronWang: To jest dla komputera klienta, na którym sklonowałeś swoje repozytorium !! – logan

0

Dla mnie było to, ponieważ mój zdalny serwer hosting repo git miał uszkodzonego obiektu/pliku. Kiedy próbowałem ponownego pakowania, zabrakło mu pamięci.I zmodernizowane moim instancji pamięci, a następnie ssh-ed powrotem i pobiegł

git gc 

Oto link do dokumentacji:

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

0

w kliencie, spróbuj zrobić to tak:

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

lub na serwerze git, spróbuj tego: modyfikować: /home/git/repositories/***.git/config, dodaj poniżej:

[pack] 
     window = 0 
+0

To rozwiązało problem także dla mnie, tj. Zmiana konfiguracji po stronie serwera – Sqripter

Powiązane problemy