2013-03-24 21 views
7

Running git fsck na moim repo, uzyskać ten wynik:powinienem martwić `git ostrzeżenia fsck`:„zawiera tryby zero-wyściełane plik”

$ git fsck 
Checking object directories: 100% (256/256), done. 
warning in tree bde551ba2d6882ac7614c25305c24ddc1c75b1c4: contains zero-padded file modes 
warning in tree 7cac28aefa67ff63e5ca163de382a3e08b8a7ba5: contains zero-padded file modes 
warning in tree c24803abe783decd96c1dbf05d3ac45dbf3ff372: contains zero-padded file modes 
warning in tree 51393697adb908ddb5fac540a86ea5a331fc1da5: contains zero-padded file modes 
Checking objects: 100% (40275/40275), done. 

Byłbym zaniepokojony tych ostrzeżeń? Czy mogą one uszkodzić moje repozytorium?

Odpowiedz

4

To nie będzie cudownie zerwanie z repo, ale jest podejrzane. Test dla zero-wyściełane trybów plików poszedł w drodze powrotnej w 2005 roku:

commit 64071805eda2b57d2b77943bb3f9865d90562ecf 
Author: Linus Torvalds <[email protected]> 
Date: Wed Jul 27 16:08:43 2005 -0700 

    git-fsck-cache: be stricter about "tree" objects 

    In particular, warn about things like zero-padding of the mode bits, 
    which is a big no-no, since it makes otherwise identical trees have 
    different representations (and thus different SHA1 numbers). 

    Also make the warnings more regular. 

    Signed-off-by: Linus Torvalds <[email protected]> 

Poszczególne wartości SHA1 uczyni git uwierzyć, że „Drzewo” różni się od „B” drzewa nawet gdy są takie same w wszystkie ważne sposoby (te same pliki i tryby oprócz początkowego zera w jednym), które sprawią, że repo będzie trochę większa niż to konieczne. Co więcej, dwa faktycznie identyczne zatwierdzenia (np. Utworzone przez ponowne odtworzenie łatki) wydają się być różne. Nie wiem nic o tym, że w wyniku tego, w wyniku błędu, coś pójdzie nie tak, ale mogłoby to zmylić różne operacje ("spodziewali się" znaleźć różnice, ale nie znaleźli żadnych), a po pewnym czasie mogło rozwinąć repozytorium .

Dwa interesujące dodatkowe pytania: (1) Jak możesz to naprawić? Podejrzewam, że można go naprawić za pomocą git filter-branch (powtarzając zatwierdzenia, aby uzyskać "poprawne" obiekty drzewa), ale trzeba się domyślić, które gałęzie zawierają zatwierdzenia, które zawierają te drzewa, a także muszą usunąć "złe" zatwierdza, odnosząc się do złych obiektów drzewa. (I oczywiście spowoduje to wszelkiego rodzaju ból dla każdego, kto sklonował repozytorium.) (2) Jak to się stało w pierwszej kolejności?

Interesujące byłoby zobaczenie, co git cat-file drukuje dla tych drzew, chociaż git cat-file -p dodaje początkowe zera, więc jest to rodzaj bólu. (git cat-file tree bde551ba2d6882ac7614c25305c24ddc1c75b1c4 zrzuca surową zawartość, ale są one pełne binarnych bitów.) Wciąż możliwe do wyświetlenia, wystarczy użyć czegoś, co obsługuje pliki binarne.)

+0

Dzięki za informację. 'git filter-branch' jest zbyt niebezpieczne w użyciu. Chciałbym mieć rozwiązanie, które nie zaszkodzi mojej zdolności do push/pull z pilotów. Mam nadzieję, że takie rozwiązanie istnieje. –

Powiązane problemy