2012-05-20 17 views
13

Jeśli git fetch zostanie przerwane na przykład przez Ctrl-C lub spowodowane przez problemy z połączeniem, po tym git fetch, a także git pull nie działać.Jak naprawić repozytorium git przerwane przez przerwane pobieranie git?

[email protected]:~/code/openttd-git$ git fetch 
^C 
[email protected]:~/code/openttd-git$ git fetch 
error: Unable to find 22d90742fc79a9011fb86ee03d8aeea66bc12657 under http://git.openttd.org/openttd/trunk.git 
Cannot obtain needed object 22d90742fc79a9011fb86ee03d8aeea66bc12657 
error: Fetch failed. 

Uważam, że nie jest to związane z repozytorium. Użycie git clone do utworzenia kopii tego uszkodzonego lokalnego repozytorium w nowym lokalnym repozytorium nie rozwiązuje tego problemu. Jedyne znane mi rozwiązanie to git clone całe zdalne repozytorium (origin/master) do nowego lokalnego repozytorium. Ale czy istnieje jakieś lepsze (szybsze) rozwiązanie?

Jest Debian bug report, który ma ostatnią wiadomość z lutego 2011. Czy to ten sam błąd, który mam, czy jest już poprawka lub jakieś rozwiązanie lub obejście tego problemu? Moja wersja git to 1.7.10.

Odpowiedz

6

znajdź *.pack.temp w .git/objects/pack w lokalnym repozytorium. Następnie znajdź plik .idx z tą samą nazwą systemu i odsuń oba (lub usuń je, ale lepiej być bezpiecznym niż przepraszać). Ponownie uruchom git fetch i powinno działać (cóż, zrobiło to dla mnie).

Na przykład:

% git fetch 
error: Unable to find a4fb0b54b2609df8a1ee4b97c268d205fc5bf9f1 under https://www.example.com/~someuser/something.git 
Cannot obtain needed object a4fb0b54b2609df8a1ee4b97c268d205fc5bf9f1 
error: fetch failed. 

% ls -l .git/objects/pack 
total 65872 
-rw-r--r-- 1 someuser someuser 64072 Feb 12 2014 pack-2e31e66e67d8596f1193bbbc06c87293900c6e45.idx 
-rw-r--r-- 1 someuser someuser 16920 Jul 21 2013 pack-3d76e0bf6c67d71913efc0711d56f04c7f79b95d.idx 
-rw-r--r-- 1 someuser someuser 62224 Feb 11 2014 pack-74107fa80989df6619479874d94b5f8ed010fd2f.idx 
-rw-r--r-- 1 someuser someuser 96552 Oct 30 22:55 pack-bb75633331ea0e74d4d3cb29f7660e1ba00fb899.idx 
-rw-r--r-- 1 someuser someuser 73228 Mar 6 2014 pack-de0c1bcf3550cd7a2fd0c5a981bc17d15f1144c0.idx 
-r--r--r-- 1 someuser someuser 129144 Feb 2 18:57 pack-ffb25d036dea040923468e2de07023f9b497aeb7.idx 
-r--r--r-- 1 someuser someuser 46413554 Feb 2 18:57 pack-ffb25d036dea040923468e2de07023f9b497aeb7.pack 
-r--r--r-- 1 someuser someuser 129312 Feb 2 19:10 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.idx 
-rw-r--r-- 1 someuser someuser 20450545 Feb 2 19:09 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.pack 
-rw-r--r-- 1 someuser someuser 129312 Feb 2 18:36 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.idx 
-rw-r--r-- 1 someuser someuser 9863168 Feb 2 18:37 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.pack.temp 

% mv .git/objects/pack/pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.idx /tmp/ 
% mv .git/objects/pack/pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.pack.temp /tmp/ 
% git fetch 
From https://www.example.com/~someuser/something 
    3288ab9..a4fb0b5 master  -> origin/master 
+1

Dzięki, to działa. Należy zauważyć, że może istnieć kilka plików '* .pack.temp' i odpowiednich plików' * .idx' (miałem 3 z nich). Przeniosłem je wszystkie do osobnego katalogu, a po tym '' git fetch' i 'git merge origin/master' działały poprawnie. – nrz

-1

Czy jesteś w stanie uruchomić:

git reset --hard <some prior commit> 

Teoretycznie, jeśli właśnie uruchomić git fetch, powinieneś być w stanie:

git reset --hard HEAD 

To powinno odrzucić zmiany spowodowane przez przerwany pobierz operację, przywracając repozytorium do poprzedniego stanu. W tym momencie powinieneś być w stanie ponownie uruchomić operację fetch.

+0

jestem w stanie uruchomić 'git zresetować --hard Head ~ 20 '(na przykład) i działa bez problemów, ale problem z' git fetch' i 'git pull "pozostaje taki sam. Myślę, że "potrzebny przedmiot" powinien zostać jakoś naprawiony, ale nie wiem jak. – nrz

-1

Czy próbowałeś wyczyścić repo?

git gc 

Ostrzegam, ponieważ powyższe polecenie również czyści zawartość refloga.

+0

'git gc' wypisuje następujące polecenie:' użytkownik @ komputer: ~/code/openttd-broken-git $ git gc Liczenie obiektów: 150683, wykonane. Kompresja Delta za pomocą do 8 wątków. Kompresowanie obiektów: 100% (24232/24232), wykonane. Pisanie obiektów: 100% (150683/150683), wykonane. Razem 150.683 (delta 126184), ponownie wykorzystane 150626 (Delta 126127) złe plik SHA1: .git/obiektów/22/d90742fc79a9011fb86ee03d8aeea66bc12657.temp' Po czym 'git wyjść fetch':' błąd: Nie można znaleźć ce35909568caea9116c69b0a9d0cf6810d6507a5 pod http://git.openttd.org/openttd/trunk.git Nie można uzyskać wymaganego blob ce35909568caea9116c69b0a9d0cf6810d6507a5' ... – nrz

8

Spróbuj polecenia:

git fsck 
git gc 
+1

Powiedz, co robią komendy, a będzie bardziej przydatny dla innych. Świetna odpowiedź. –

+0

Po prostu trafiłem na ten sam problem i te polecenia go nie rozwiązały (jak wspomniano w jednym z komentarzy poniżej). –

+1

To nie rozwiązuje problemu. '$ git fsck' wyprowadza:' Sprawdzanie katalogów obiektów: 100% (256/256), wykonano. '' Sprawdzanie obiektów: 100% (161159/161159), wykonane. 'Następnie' $ git gc' wyprowadza: 'Liczenie obiektów: 157646, wykonane '' Kompresja Delta za pomocą do 8 wątków. 'Kompresowanie obiektów: 100% (24579/24579), wykonane.' Pisanie obiektów: 100% (157646/157646), wykonane. 'Łącznie 157646 (delta 133211), ponownie użyty 157173 (delta 132738) ". A potem '$ git fetch' wypisze to samo co powyżej, więc to nie rozwiąże problemu. – nrz

1
man git-fsck 

mówi użycie rsync:

Any corrupt objects you will have to find in backups or other archives (i.e., you can just remove them and do an rsync with some other site in the hopes that somebody else has the object you have corrupted).

rsync -av [email protected]:repo/.git ./.git 

pracował dla mnie

-1

Jest prawdopodobne, że repozytorium jest corrup t. Uruchamianie git fsck i git gc na serwerze może go rozwiązać. Sklonowanie do oddzielnego katalogu i wyciągnięcie z tego katalogu również da ci zatwierdzenie. Potem zadziała git fetch, ponieważ aktualizuje tylko refs i nie musi pobierać żadnych obiektów.

Powiązane problemy