2011-10-16 13 views
9

To co ja dostać Kiedy zrobić hg zweryfikować:uszkodzony revlog i sierocym revlog w Mercurial - Jak naprawić?

repository uses revlog format 1 
checking changesets 
checking manifests 
crosschecking files in changesets and manifests 
checking files 
includes/base/class/[email protected]: broken revlog! (index data/includes/base/class/ViewInstanceAdapter.class.php.i is corrupted) 
warning: orphan revlog 'data/includes/base/class/ViewInstanceAdapter.class.php.i' 
158 files, 61 changesets, 270 total revisions 
1 warnings encountered! 
1 integrity errors encountered! 
(first damaged changeset appears to be 7) 

nie używam Mercurial przez długi czas, a ja nie rozumiem, co to znaczy.

(Jestem na windows wykorzystaniem TortoiseHg, a projekt jest tylko lokalnie)

+0

Wszelkie szansa to repozytorium znajduje się w folderze Dropbox lub podobnego synchronizacji? –

+0

Nie, pracowałem sam i nigdy tego nie udostępniłem. – Leto

+0

Spróbuj 'hg verify -v', pokaż log. Spróbuj sklonować to repo i sklonuj - niektóre szanse na zniknięcie istnieją –

Odpowiedz

6

Jak wspomniano wcześniej (chociaż już potwierdziła to nie działa), należy zacząć od próby klonowania repozytorium; jeśli problemy są związane z dirstate, można to obejść.

Następnie każdy klon zawiera pełne repozytorium, więc każdy klon jest faktycznie kopią zapasową. Nie masz centralnego serwera lub współpracownika lub innej lokalnej kopii? Spróbuj sklonować to, a następnie wyciągając z uszkodzonego repozytorium. Jako pierwszy uszkodzony zestaw zmian jest zgłaszany jako nie. 7 (na 270), to powinno być dość stare, a więc najprawdopodobniej łatwe do odzyskania, i miejmy nadzieję, że obrażenia nie powstrzymają Mercurial przed ciągnięciem zmian.

Trzecią opcją, którą można wypróbować, jest uruchomienie konwersji Mercurial-Mercurial na twoim repozytorium (hg convert repo repo-copy); dosłowna konwersja powinna zachować nietknięte identyfikatory zestawu zmian, chociaż prawdopodobnie wystąpi ten sam problem. Można również spróbować określić filemap, aby odfiltrować plik ViewInstanceAdapter.

Ponieważ uszkodzony zestaw zmian jest tak stary i biorąc pod uwagę, że Mercurial używa metody zapisu tylko do zapisu, prawdopodobną przyczyną tego problemu jest awaria sprzętu lub przypadkowe uszkodzenie dysku.

Należy pamiętać, że Mercurial nie jest systemem zapasowym i nie zapewnia nadmiarowości. Częste tworzenie kopii zapasowych (które w przypadku Mercurial jest tak proste jak "push") jest jedynym sposobem, aby upewnić się, że nie stracisz cennego kodu.

Alternatywną przyczyną, dla której uważam, że powinienem Cię ostrzec, są skanery antywirusowe lub usługa indeksowania systemu Windows. Te pliki blokujące w pewien sposób uniemożliwiają ich usunięcie w krótkich oknach czasowych. Chociaż Mercurial dokłada wszelkich starań, aby być solidnym, trudno jest bronić się przed wszystkimi przypadkami. Zaleca się białą listę swoich repozytoriów, patrz: this note.

+0

Ok, jak powiedziałeś, uszkodzony plik już nie istnieje w większości ostatnia wersja kodu, więc jej zawartość nie jest ważna Chcę po prostu ponownie zacząć działać mercurial – Leto

+0

W takim przypadku możesz również spróbować przekonwertować z filemap, co spowoduje, że zignoruje określony plik, zaktualizuję odpowiedź Ale nadal nie jest dla mnie jasne, czy masz jakieś kopie/centralny magazyn twojego repozytorium, jeśli tak, i chcesz tylko sprawić, by Mercurial znów działał, dlaczego nie zrobić nowego klonu, a następnie skopiować zawartość twojego działania katalog na górze (ignorując plik .hg)? Trochę brutalnej metody, aby naprawić problem, i musisz ponownie zatwierdzić wszelkie lokalne zmiany, które zrobiłeś, ale to się spełni –

+0

Właśnie znalazłem stara kopia zapasowa ( Leto

1

Znalazłem rozwiązanie (dzięki Laurens Holst) TYLKO jeśli masz czysty bakcup (bez błędu), w tym wersję problemu.

W moim problemem rev wydania wynosi 7 i mam kopię zapasową, dopóki rev 18.

kroki:

  • sklonować repozytorium kopii zapasowych na ostatnim wspólnym rev (tutaj jest 18)

  • Pull uszkodzony repozytorium obroty język sklonowanego jednego (masz teraz dwie głowy, ale żadne modyfikacje w katalogu roboczym oczywiście)

  • Aktualizacja klonuje repozytorium do najnowszej wersji (wskazówka)

Masz teraz reż działający .hg :)