私は、この事件の極端に少ない確率を認識していると言ってこれを接頭語にします。製造が不可能であることはわかっていて、極端には「野生で」起こることはありません。これは単にGitの内部についてのwhat-if質問です。2つのGitコミットが同じSHA-1ハッシュを持つとどうなりますか?
これは私の質問です.2つのGitコミットハッシュが同じであればどうなりますか?初心者の方:
- コミットは成功しますか?
- 後でデタッチヘッドとしてチェックアウトできますか?
- 後続のコミットは可能でしょうか?
私は、この事件の極端に少ない確率を認識していると言ってこれを接頭語にします。製造が不可能であることはわかっていて、極端には「野生で」起こることはありません。これは単にGitの内部についてのwhat-if質問です。2つのGitコミットが同じSHA-1ハッシュを持つとどうなりますか?
これは私の質問です.2つのGitコミットハッシュが同じであればどうなりますか?初心者の方:
私の古い回答「How would git handle a SHA-1 collision on a blob?」は、コミットであってもブロブでなくても適用されます。
torekにはin the commentsと記載されているので、gitはすべてを「オブジェクト」と考えています。それぞれが独自のSHA1を持っています。
(ProGit Book v2のGit Internals - Git References章からの画像)
コミット可能性が高い(小切手のカップルがgit-commit-tree.c
である)成功しないだろうが、あなたはまた、どこのケースを考慮する必要がありますrepos AとB ...で同じSHA1(と何らかの形で異なる内容)を持つ2つのコミットが作成され、repo Aがrepo Bをフェッチしています!
Commit 8685da4 (March 2007, git 1.5.1)がそれを処理し、フェッチが失敗します。
Commit 0e8189e (Oct. 2008, git 1.6.1)はindex V2と、それを言及しない:
SHA1参照のオッズが破損得るためにそれが実際に同じ大きさの別のオブジェクトのSHA1(デルタ・ヘッダ・ストアの予想サイズと一致するように適用する基底オブジェクト)は事実上ゼロです。
オブジェクトをアンパックするときに、パックされたオブジェクトのCRCチェックを実装します。
ここにいくつかの議論がありますが、私はそれが本当に質問に答える素晴らしい仕事とは思わない:http://stackoverflow.com/questions/10434326/hash-collision-in-git – mipadi
私はそれを実際に見たハッシュをコミットするのではなく、ファイルハッシュについて議論しているようです。 – Ben
ええ、答えのほとんどはGitのハッシュの部分に焦点を当てています。しかし、Gitメーリングリストに関するディスカッションへのリンクがあります:http://thread.gmane.org/gmane.comp.version-control.git/26106/focus=26170 – mipadi