git 对提交内容进行 sha-1 散列后,如何保证提供的短信息是唯一的?

前情提要:正在学习git,了解到它是通过sha-1散列对提交的内容进行计算和校验的。使用git过程中注意到,例如某次提交获得的散列值为2b5284d55c6b71ce9df89a00008319f93e722596,但是同时提供了该散列值的前几位2b5284d55c作为短信息(我自己这么叫)。

问题:git是如何保证协作过程中,产生的短信息不会与其他人的某次提交产生的短信息一致的? 或者即使短信息一致,git也有某种方式可以准确识别出来提交的信息?

阅读 2.3k
1 个回答

经过一番检索,找到了一些有关的内容,Git 里的 hash 值主要由这几部分组成。

  • The source tree of the commit (which unravels to all the subtrees and blobs)
  • The parent commit sha1
  • The author info
  • The committer info (right, those are different!)
  • The commit message

来源:How is git commit sha1 formed

根据 Pro Git 上的描述,这个 hash 值出现碰撞的可能性极低。

当然,也有人弄出来了,参考:How would Git handle a SHA-1 collision on a blob? - Stack Overflow

这篇回答参考自:How would Git handle a SHA-1 collision on a blob? - Stack Overflow

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏