是否有重复的SHA提交?

Pat*_*sut 2 git sha1 git-commit

每次进行提交时,git / hg都会生成一个SHA来在存储库的历史记录中唯一标识该提交。

假设我要合并两个存储库(我们没有关于哪个存储库的信息)。这就提出了一个问题:如果有人想要提交相同合并仓库的特定提交,会不会有重复的SHA哈希值在引起评论时混淆git?如果不是这样,git会做什么?

最终,我猜问题还是:全世界的每个存储库都有重复的哈希值吗?

hel*_*ert 5

全世界的每个存储库都有重复的哈希吗?

可能是的,但这极不可能。让我引用关于这一本书Git书,其中包含一个非常说明性的示例:

很多人在某个时候开始担心,由于偶然的原因,他们的存储库中将有两个对象哈希为相同的SHA-1值。然后怎样呢?

如果您确实提交了一个哈希值与存储库中先前对象相同的SHA-1值的对象,则Git将在您的Git数据库中看到该先前对象,并假定它已被写入。如果您尝试在某个时刻再次检出该对象,则将始终获得第一个对象的数据。

[...]

这是一个示例,可让您大致了解发生SHA-1冲突的过程。如果地球上所有的65亿人都在编程,并且每个人每秒都在产生与整个Linux内核历史相当的代码(360万个Git对象)并将其推入一个巨大的Git存储库,则大约需要2年时间直到该存储库包含足够的对象,才有50%的可能性发生一次SHA-1对象冲突。更有可能的是,您的编程团队的每个成员都会在同一晚被无关事件中的狼袭击并杀死。

简而言之:是的,SHA1冲突在理论上是可能的,但从天文学角度来看不太可能,因此Git根本不会考虑这种情况。

  • 哈哈哈 数学部分很棒。 (3认同)