是否存在重复的SHA提交记录?

3
每次提交时,git/hg都会生成一个SHA,用于唯一标识该提交在仓库历史中的位置。
假设我想合并两个仓库(我们不知道它们是哪些)。这就引出了一个问题:如果有人想要同一个合并后的仓库中的特定提交,是否会有重复的SHA哈希值混淆git获取该提交的过程?如果没有,git会怎么处理?
最终,我想问的问题是:在整个世界的所有仓库中,是否存在重复的哈希值?

不是重复的。可能是一个扩展,看看Git会如何处理这种情况。 - Patrick Bassut
2
如果发生这种情况,你就是 Git 抽奖的大赢家,并会在软件开发世界中成名!;-) - Philippe
@Philippe "如果发生这种情况,Git会如何处理"?请参见https://dev59.com/PWox5IYBdhLWcg3wKBN9#34599081 - VonC
@VonC 是的,我已经点赞了;-) - Philippe
2个回答

10

全世界每个仓库是否都存在重复的哈希值?

可能有,但这非常不可能发生。让我引用Git book中的一个例子来说明:

很多人担心,他们的代码库中可能会出现两个对象的哈希值相同的情况。那么会发生什么呢?
如果你提交了一个哈希值与代码库中之前的某个对象相同的对象,Git 会在你的代码库中看到之前的对象,并认为它已经被写入。如果你在以后的某个时刻尝试再次检出该对象,你将始终得到第一个对象的数据。
以下是一个例子,以便您了解需要做些什么才能获得SHA-1碰撞。如果地球上65亿人都在编程,每秒钟每个人都产生相当于整个Linux内核历史(3.6百万个Git对象)的代码,并将其推送到一个巨大的Git代码库中,那么需要大约2年时间,直到该代码库包含足够的对象,有50%的概率出现单个SHA-1对象碰撞。但是,你的编程团队的每个成员在同一晚上遭到无关的狼袭击并丧生的可能性更高。
简而言之:理论上可能出现SHA1碰撞,但是概率极低,Git根本不考虑这种情况。

0
最终,我想问题也是:全世界的代码库中是否存在重复的哈希值?
不太可能。到目前为止,没有人发现SHA1碰撞。虽然可能存在重复的哈希值,但这些重复的哈希值将识别具有完全相同内容的相同对象。
另请参见: Git如何处理blob上的SHA-1碰撞?SHA1碰撞的概率

但是如果有一天发生了这种情况,Git会怎么做呢? - Patrick Bassut
1
@PatrickBassut 我甚至在我的回答中链接了另一个解释SHA-1碰撞会发生什么的答案:https://dev59.com/PWox5IYBdhLWcg3wKBN9 - TimWolla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接