2010-05-25 20 views
20

Czy istnieje sposób, w jaki mogę naprawić moje repozytorium z historią commit w takcie.Git log: śmiertelny obiekt [sha1] jest uszkodzony

# git log 
fatal: object 01aeb2bf2e93b238f0e0422816b3e55518321ae7 is corrupted 

Odczytując poniższy link wygląda na to, że go odpalę i zacznę od nowa.

http://www.miek.nl/s/7e76eadefe/

+1

należy dodać, że przyczyną tego było uszkodzenie dysku na mojej maszynie wirtualnej, która nie zamykając poprawnie. – Keyo

Odpowiedz

11

Czy masz klonów tego repozytorium gdzie indziej? Możesz przeczytać this post Linusa Torvaldsa, aby przywrócić uszkodzony obiekt, zakładając, że uszkodzony obiekt to obszar blobowy (zawartość pliku).

+0

Brak klonów. Po prostu wczoraj to ustawiłem. Więc miałem tylko 10 zatwierdzeń. Skończyło się na tym, że jestem świeży. Ale na pewno popchnie to gdzie indziej na koniec każdego dnia. Lekcja. Nadal cieszę się, że jestem poza svn. Git jest szybki! – Keyo

+5

byłoby pomocne zawierać istotę stanowiska w swojej odpowiedzi, nie rozczarować, powiedzmy, kernal.org kiedykolwiek zostanie posiekany i jest nieaktywny :( – SpoonMeiser

8

I likwidacji w takiej samej sytuacji, prawdopodobnie z powodu nieprawidłowego wyłączania maszyny wirtualnej pracowałem w. Było około 10 obiektów w .git/obiekty, które miały zerową długość. O ile mogę powiedzieć, rzeczywiste pliki kodu źródłowego były w porządku, tylko repozytorium zostało hosed.

$ git status 
fatal: object fbcf234634ee04f8406cfd250ce5ab8012f92b08 is corrupted 

Per niektórych sugestii widziałem gdzie indziej (w tym poście Linusa jest mowa powyżej), próbowałem tymczasowo przesuwając git uszkodzonych obiektów narzekał z .git/obiektów gdzie indziej. Kiedy przeniósł się wszyscy, mam:

$ git status 
fatal: bad object HEAD 

Po około godzinie Googling i próbuje różnych rozwiązań, dałem się i rozpoczął nową kopię roboczą za pomocą „git clone”, aby wyciągnąć od pochodzenia (co było około 2 godziny za moim roboczym egzemplarzem). Następnie użyłem rsync -rC (-C wyklucza pliki SCM), aby skopiować zmienione pliki z popsutego egzemplarza roboczego do mojej nowej kopii roboczej.

+0

Dzięki! Wydaje się działać dla mnie. Katastrofa zażegnane. – DevX

+0

samo tutaj VM korupcja. rsync działało idealnie - nic nie stracił, tylko dziennik, który był łatwy do odtworzenia Dzięki –

1

Można również spróbować przywrócić te obiekty, kopiując je tylko z innych repozytoriów.

Moja maszyna wirtualna rozbił się podczas nagrywania pchnął popełnić, więc przedmioty były bezpiecznie przechowywane na komputerze lokalnym. Przerzuciłem je na maszynę wirtualną i voila - git fsck nie wyświetla żadnych błędów.

1

Po prostu usuń uszkodzony obiekt, na który narzeka Git. W ten sposób udało mi się rozwiązać ten sam problem.

fatal: object 985a4870e7d890b314d2794377045a8b007c7925 is corrupted 

Dla powyższego błędu, udało mi się znaleźć odpowiedniego obiektu pod adresem:

project_directory/.git/objects/98/5a4870e7d890b314d2794377045a8b007c7925 

Gdzie można zobaczyć plik jest 0 bajtów i usuwanie to pozwoliło sprowadzić do rozpoczęcia pracy.

Przypuszczalnie poprzedniego pobieraniu przerywano, pozostawiając uszkodzony obiekt o rozmiarze = 0 bajtów.

+0

dziwne, że to faktycznie działa, trochę jak kopanie telewizora, aby wyczyścić w górę –

+1

statyczne nie działa dla mnie i to brzmi jak zły.! pomysł rozważa kilka instrukcji stronę Torvaldsa w jaki sposób naprawić uszkodzony obiekt (wymienione powyżej w odpowiedzi). –

+0

nie działa na mnie też nie. Moim celem to nigdzie nie można znaleźć –

1

miał ten sam problem, w zależności od polecenia git I Ran skończyło się z komunikatem:

fatal: object <hash> is corrupted 

nie miałem kopii zapasowej i nie chcę stracić zobowiązuje, więc postanowiłem próby rozwiązania JASE i usuwa plik 0 długość miałem: .git/objects/00/<hash> Potem dostał takie same:

$ git status 
fatal: bad object HEAD 

Następnie starałem się dowiedzieć, co się stało i spojrzał .git/refs/heads/master gdzie miałem hash.

Spojrzałem .git/logs/refs/head/master i stwierdzono, linie takie jak ten:

<old commit> <new commit> <author> <timestamp> commit: <commit message> 

że usuwa ostatni wiersz (który miał =), a wklejone tej linii do .git/refs/heads/master i usunięcie jej zawartości

że wtedy zdolne do skutecznego zatwierdzania.

1

Miałem ten sam problem. Zauważyłem, że nie jestem zalogowany jako root. Kiedy logowałem się jako root, mogłem sprawdzić dziennik bez znaku błędu.

krzepnąć to dobry stan, zrobiłem to:

git add . 
git commit -a -m "stabilize git" 

I wyszedł z korzenia i próbowała ciągnąć od klienta. Dla mnie to zadziałało.

Kiedy dodałem i zatwierdziłem, wiedziałem, że wszystko jest w porządku z tym, co znajdowało się w tym katalogu. Nie widziałem żadnych zmian widocznych w "statusie git".

Powiązane problemy