0

アイテム間の衝突を避けるために必要なハッシュ値はいくつありNますか? 誕生日のパラドックスを思い出すと、答えは よりもはるかに小さくなりNます。

質問を逆にしてみましょう:N=16^10短縮された git リビジョン コードの 10 桁の 16 進数に対応する可能なハッシュ値について、リビジョン ハッシュの一致の確率が 50% に上昇するリビジョンの数は? 直接計算すると、1234603 個のリビジョンがある場合、そのうちの 2 つが同じ 10 桁のハッシュを持つ確率は 50% です。

現在、大規模なアクティブなリポジトリでは、100 万回ほどのリビジョンが前例のないものではありません。あなたの仕事で git ハッシュの衝突を経験した人はいますか? 理論的に言えば、そうなるはずだった。

4

2 に答える 2

0

「特定のコードベースの変更を一意に識別するために、Git SHA は一般的にどの程度必要と考えられていますか?」で説明されているように、必要な最小の長さは次のようにして取得できます。git rev-parse --short

 git rev-parse --short=4

ただし、完全な長さでのみ作業する場合は、次のようにします。

Git 2.31 (2021 年第 1 四半期) では、構成変数 'c​​ore.abbrev' を 'no' に設定して、ハッシュ アルゴリズムに関係なく省略を強制しないようにすることができます。

これは、 Git が SHA1 から SHA2 に切り替わるときに重要になります。

Eric Wong ( )によるコミット a9ecaa0 (2020 年 9 月 1 日)を参照してください。( 2021 年 1 月 15 日コミット 6dbae1Junio C Hamanoによってマージされました)ele828
gitster

core.abbrev=no: 略語を無効にします

署名者: Eric Wong

これにより、ユーザーは省略形を無効にすることで、ハッシュに依存しないスクリプトと構成を作成できます。

" -c core.abbrev=40" の使用は SHA-256 では不十分であり、" -c core.abbrev=64" は現在 SHA-1 リポジトリでは機能しません。

[jc: 実装の微調整、ドキュメントとテストの追加]

git configmanページに含まれるようになりました:

「no」に設定すると、略語は作成されず、オブジェクト名は完全な長さで表示されます。

于 2021-01-17T02:33:18.630 に答える