可以由两个人提交相同的哈希?

Flo*_*oud 2 git internal git-commit

更新:我将两个东西混合在一起:第一行实际指向目录(在下面的答案中有很好的解释),第二行指向父提交.我让第二个误导了我.谢谢大家的澄清.


我正在学习git,我正在复制所做的代码.我在一个名为Make a commit的小节中,这不是第一次提交.她承诺后,这就是她得到的(为了格式化原因我划掉了她的电子邮件):

tree ce72afb5ff229a39f6cce47b00d1b0ed60fe3556

父母774b54a193d6cfdd081e581a007d2e11f784b9fe

作者Mary Rose Cook ......

提交人Mary Rose Cook ...

a2

而且,神秘地,我得到了(我划掉了我的个人信息)

tree ce72afb5ff229a39f6cce47b00d1b0ed60fe3556

parent c96fbf6143ccef645d1cb867b05427c399a9bcb3

作者....

提交者......

a2

比较当前树的两个哈希,很明显我们都得到相同的哈希(我确实按照她的代码).

所以我很好奇这是如何可能的?我知道git据说可以隐藏那个时刻的快照,但我的megadatas肯定与她的不同.愿有人知道会发生什么吗?

Ehr*_*ryk 7

A tree hash是当前工作目录的哈希值 - 换句话说,其中具有相同文件和目录的任何两个目录将具有相同的树哈希.

树是文件和目录的分层集合,不依赖于历史记录中的任何特定点.例如,如果您创建一个文件然后删除该文件(没有其他干预提交),您将最终得到您开始使用的同一个树.

提交是项目历史中的一个要点.提交指定树,但也包含其他信息,例如作者/提交者和时间,提交消息(作者描述更改的内容),最重要的是零或更多父项,它们是存储库的先前状态.(你的第一次提交没有父项.大多数提交之后在线性开发期间有一个父项,如果你合并则有多个.)

(来源)

一旦你进行了一些修改并提交了它们,你就会得到一个commit hash.在40个字符的SHA1哈希中发生哈希冲突的可能性非常非常非常微小.

SHA-1哈希是一个40十六进制的字符串...每个字符的4位乘以40 ... 160位.现在我们知道10位大约是1000(准确地说是10 ^ 24),这意味着有1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000个不同的SHA-1哈希... 10 ^ 48.

这相当于什么?月球由大约10 ^ 47个原子组成.所以,如果我们有10个月亮......然后你在其中一个卫星上随机选择一个原子......然后再继续在它们上面选择一个随机原子...然后你可能会选择相同原子两次,是两个git提交具有相同SHA-1哈希的可能性.

(来源)

您也可以在同一个父commit(parent hash)之外有两个或更多不同的提交,这也没关系,但每个提交哈希都会有所不同.除非你令人惊讶,否则,请大笑(不)幸运.