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.)
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. –