4

すべてのブランチの先端のハッシュは、リポジトリ全体の整合性を証明するのに十分ですか? 議論のために、リポジトリ全体を誰かに渡して、好きなことをさせて、1ビットのデータでも変更したかどうかを判断する必要があると仮定します。どのようにしますか?

アップストリームのベア リポジトリにプッシュする場合、後でリポジトリ全体の整合性を検証できることを保証するために必要なデータはこれだけですか?

git ls-remote --heads origin

fcce961b46784fae13be8a30c2622ddd34d970ec        refs/heads/develop
9da7bb692a72235451706f24790a3f7a100a64e2        refs/heads/feature-netty-testing
86020c50d86691caecff4a55d3b1f2f588f6291d        refs/heads/javafx-testing
871d715e5c072b1fbfacecc986f678214fa0b585        refs/heads/master
7ed641c96d910542edeced5fc470d63b8b4734f0        refs/heads/orphan-branch

これは、私が遊んでいるサンドボックス リポジトリからのものです。here で説明されているように、意図的に孤立させたorphan-branchブランチです。私にはすべてが正しいように思えます。予想されるすべてのブランチがリストされていますが、すべてのブランチ ヒントの SHA だけで十分かどうかはわかりません。何か不足していますか?

タグはどうですか?何にもマージされずに削除されたブランチはどうなりますか?

更新しました

いくつかのコメントで指摘されているように、考慮が必要なヘッド以外の参照が存在する可能性があります。たとえば、それらがあなたにとって重要かどうか、またはタグに署名しているかどうかに応じて、 tagsandが役立つ場合があります。notes私自身は主にコミットの内容に興味があるため、VonC の回答を受け入れました。

4

1 に答える 1

5

整合性の観点からはそれで十分のようです。
タグはコミットを参照するため、コミットが変更された場合、git fsckはタグとその存在しないコミットの間の非整合性を検出します。

整合性は信頼(つまり、コンテンツの保証)とは異なることに注意してください。その
ために、「Gitホラーストーリー:署名されたコミットを使用したリポジトリの整合性」は有益です。

最初のセクション「コミット履歴」では、SHA-1の整合性の背後にある理論について詳しく説明します(「 Gitとデータの整合性」にも示されています)。

とはいえ、リポジトリの整合性は、ハッシュの衝突を作成できない場合にのみ保証されることを理解することが重要です。つまり、攻撃者が異なるデータで同じSHA-1ハッシュを作成できた場合、子はコミットします。 )は引き続き有効であり、リポジトリは正常に侵害されています。SHA-1には、悪用するのに安価ではありませんが、ブルートフォースよりも高速にハッシュを計算できる
脆弱性が2005年から知られています。 リポジトリは今のところ安全かもしれませんが、将来的には、SHA-1が現在のMD5と同じように機能不全に陥っていると見なされるようになるでしょう。

于 2012-08-13T10:38:12.480 に答える