Es wird nicht exatly brechen der Repo, aber es ist verdächtig. Der Test für die mit Nullen aufgefüllt Dateimodi ging zurück in das Jahr 2005:
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]>
Die verschiedenen SHA1 Werte git glauben, dass „Baum A“ unterscheidet sich von „Baum B“, auch wenn sie die gleiche sind in alle wichtigen Wege (gleiche Dateien und Modi außer den führenden Nullstellen in einem), die das Repo etwas größer als nötig machen. Darüber hinaus scheinen zwei tatsächlich identische Commits (z. B. erzeugt durch Abspielen eines Patches) unterschiedlich zu sein. Ich weiß nichts, dass wird als Ergebnis falsch gehen, aber es könnte verschiedene Operationen verwirren (sie "erwarten" Unterschiede zu finden, aber dann keine finden) und im Laufe der Zeit könnte es das Repository aufgebläht .
Zwei interessante zusätzliche Fragen: (1) Wie können Sie das beheben? Ich vermute, dass die Verwendung von git filter-branch
es beheben kann (indem Sie Commits wiederholen, um "korrekte" Baumobjekte zu erhalten), aber Sie müssten herausfinden, welche Zweige die Commits enthalten, die diese Bäume enthalten, und auch die "schlechten" löschen müssen verpflichtet sich zu den schlechten Baumobjekten. (Und natürlich wird das für jeden, der das Repo geklont hat, allerlei Schmerzen verursachen.) (2) Wie ist das überhaupt entstanden?
Es wäre interessant zu sehen, was git cat-file
Drucke für diese Bäume, obwohl git cat-file -p
führenden Nullen fügt, so ist es eine Art von Schmerz. (git cat-file tree bde551ba2d6882ac7614c25305c24ddc1c75b1c4
Dumps die rohen Inhalte, aber sie sind voll von binären Bits. Immer noch sichtbar, nur etwas zu verwenden, das binäre Zeug behandelt.)
Danke für die Informationen. 'git filter-branch' ist zu gefährlich für den Gebrauch. Ich hätte gerne eine Lösung, die meiner Fähigkeit, von Fernbedienungen zu drücken/ziehen, nicht schadet. Ich hoffe, dass eine solche Lösung existiert. –