2013-03-24 4 views
7

Lauf git fsck auf meinem Repo, ich diese Ausgabe erhalten:Muss ich mir Sorgen über `git fsck` Warnung:„enthält mit Nullen aufgefüllt Dateimodi“

$ 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. 

Sollte ich über diese Warnungen Sorgen machen? Können sie mein Repo beschädigen?

Antwort

4

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

+0

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

Verwandte Themen