8

リポジトリで実行git fsckすると、次の出力が得られます。

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

これらの警告について心配する必要がありますか?彼らは私のレポにダメージを与えることができますか?

4

1 に答える 1

4

リポジトリを壊すことはありませんが、疑わしいです。ゼロパディングファイルモードのテストは、2005年にさかのぼります。

commit 64071805eda2b57d2b77943bb3f9865d90562ecf
Author: Linus Torvalds <torvalds@g5.osdl.org>
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 <torvalds@osdl.org>

SHA1の値が異なると、すべての重要な点で同じである場合でも、「ツリーA」は「ツリーB」とは異なるとgitに信じ込ませます(1つの先行ゼロを除いて同じファイルとモード)。リポジトリを必要以上に少し大きくします。さらに、2つの実際に同一のコミット(たとえば、パッチの再生によって作成されたもの)は異なっているように見えます。結果として何がうまくいかないかはわかりませんが、さまざまな操作を混乱させる可能性があり(違いを見つけることを「期待」しますが、何も見つかりません)、時間の経過とともにリポジトリが肥大化する可能性があります。

2つの興味深い追加の質問:(1)これをどのように修正できますか?を使用git filter-branchすると(コミットを再生して「正しい」ツリーオブジェクトを取得することで)修正できると思いますが、どのブランチにそれらのツリーを含むコミットが含まれているかを把握し、「不良」コミットを削除する必要があります。悪いツリーオブジェクトを参照します。(そしてもちろん、これはリポジトリのクローンを作成した人にあらゆる種類の苦痛を引き起こします。)(2)そもそもこれはどのようにして起こったのですか?

git cat-file先行ゼロを追加しますが、これらの木に何が印刷されるかを確認するのは興味深いgit cat-file -pので、それは一種の苦痛です。(git cat-file tree bde551ba2d6882ac7614c25305c24ddc1c75b1c4生のコンテンツをダンプしますが、バイナリビットでいっぱいです。それでも表示可能です。バイナリのものを処理するものを使用する必要があります。)

于 2013-03-24T22:48:33.763 に答える