git - 10个十六进制数字git hash缩写就够了吗?
问题描述
需要多少个可能的哈希值才能避免N
项目之间的冲突?如果你回想生日悖论,答案就比这个小得多N
。
让我们把问题反过来:对于N=16^10
可能的哈希值,它对应于 10 个十六进制数字的缩写 git 修订代码,有多少修订,修订哈希重合的概率上升到 50%?直接计算表明,如果您有 1234603 个修订版本,其中两个具有相同 10 位哈希的概率为 50%。
现在,在大型活动存储库中,一百万左右的修订并非闻所未闻。这里有人在你的工作中经历过 git hash 冲突吗?从理论上讲,这应该发生了。
解决方案
随着对象数量的增加,Git 会自动缩放缩写哈希的长度,因此这通常不是问题。此外,如果一个缩写的散列在正常长度下是不明确的,Git 会自动生成一个更长的、明确的值。一些命令允许您使用一个选项来控制缩写的长度,--abbrev
如果您想要一个特定的值,该core.abbrev
选项可以覆盖默认值。
但是,这些名称必须仅在创建时是唯一的,因此如果您正在生产需要使用修订版的工具,它们应该始终对完整的对象 ID 进行操作。另请注意,正在切换到使用 SHA-256 的工作正在进行中,因此在编写工具时,您不应假设特定完整对象 ID 的长度。
推荐阅读
- javascript - 你如何使用 Lodash/FP 中的 'flow' 来传递 'this'
- javascript - 下拉框未在 Chrome 扩展中显示数组
- angularjs - 如何在文件上传方法中添加附加参数并进入控制器端?
- android - 反应原生地图视图不加载地图
- python - 如何检测何时单击矩形对象、图像或精灵
- c++ - 为 shell 命令转义文件名
- c# - Unity ScriptableObject 参考传递给 Monobehaviour 的 ScriptableObject
- javascript - 如何使这个 JavaScript 函数也与 Internet Explorer 兼容
- powershell - 如果文本框值(文本)不等于任何内容,是否算作 $false?
- angular - 在标头中使用 JWT 令牌从 API 获取的最佳方式