リポジトリを壊すことはありませんが、疑わしいです。ゼロパディングファイルモードのテストは、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
生のコンテンツをダンプしますが、バイナリビットでいっぱいです。それでも表示可能です。バイナリのものを処理するものを使用する必要があります。)