是否存在两个 git commit id 相同的情况(在两个不同的项目中)?

Ion*_*zău 2 git

我正在开发一个新版本的git-stats工具来根据 Git 提交、作者等制作一些图表。

在当前版本中,它接受相同的提交 ID,对项目名称进行命名:

{
   "some-project-url" { "hash1": "date", ... }
   "some-project-url-fork" { "hash1": "date", ..., "commit-in-fork-id": "date" }
}
Run Code Online (Sandbox Code Playgroud)

我想删除存储项目 url 的要求,这意味着没有相同的哈希值。

现在我在想这是否是一个好的举动。

当导入多个项目并且每个提交都存储一次时,有两个相同 id 的概率是多少?

实际上,在现实生活中,什么时候会碰巧有两个相同的id(在两个不同的项目中)?

Joo*_*ost 6

SHA-1 哈希值由 160 位组成,允许 2^160 = 1.4615e+48 种组合。由于生日悖论,只需取该数字的大约根(大约 2^80)即可获得 50% 的碰撞机会,但这仍然是巨大的。但请注意,哈希的输入根本不是均匀随机的,因为它只是提交数据的哈希(请参见此处)。

我认为最有可能发生冲突的原因不是 SHA1,而是输入数据的精确匹配。鉴于作者详细信息和时间戳也在那里,这似乎不太可能。

总而言之,使用提交哈希来识别提交似乎足以识别在不同项目中使用,而不存在任何真正的麻烦风险。