一尘不染

Git如何创建唯一的提交哈希,主要是前几个字符?

algorithm

我发现很难全神贯注于Git如何创建完全独特的哈希,即使在前4个字符中也不允许相同。我可以仅使用前四个字符在Git
Bash中调用提交。在算法中是否特别确定第一个字符是“超”唯一的,并且永远不会与其他类似的哈希冲突,或者该算法是否以相同的方式生成哈希的每个部分?


阅读 352

收藏
2020-07-28

共1个答案

一尘不染

Git使用以下信息来生成sha-1:

  • 提交的源树(展开到所有子树和blob)
  • 父提交sha1
  • 作者信息(带时间戳)
  • 提交者信息(正确的,那些是不同的!,还有时间戳)
  • 提交消息

(有关完整说明,请参见此处)。

Git 保证前四个字符是唯一的。在Pro Git书的第7章中写道:

Git可以为您的SHA-1值找出一个简短的唯一缩写。如果将–abbrev-commit传递给git
log命令,则输出将使用较短的值,但保持它们唯一。它默认使用七个字符,但在必要时将它们延长以保持SHA-1的明确:

因此 ,只要 保持唯一性,Git都会 尽可能地 缩写。他们甚至注意到:

通常,八个到十个字符足以在一个项目中唯一。

例如,Linux内核是一个相当大的项目,具有超过450k的提交和360万个对象,没有两个对象的SHA-1重叠超过前11个字符。

因此,实际上,它们仅取决于具有完全相同的(a的X个首字符)sha 的极大 可能性

2020-07-28