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

时间:2015-07-10 07:06:09

标签: git

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

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

{
   "some-project-url" { "hash1": "date", ... }
   "some-project-url-fork" { "hash1": "date", ..., "commit-in-fork-id": "date" }
}

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

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

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

实际上,在现实生活中,它何时碰巧有两个相同的ID(在两个不同的项目中)?

2 个答案:

答案 0 :(得分:2)

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

我认为碰撞的最可能原因不是SHA1,而是输入数据中的完全匹配。考虑到作者的详细信息和时间戳也存在,这似乎不太可能。

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

答案 1 :(得分:0)

有三种情况需要考虑。

  1. 两个不同的非恶意提交碰巧具有相同的提交ID。
  2. 故意构造两个不同的提交以具有相同的提交ID
  3. 包含相同提交的两个项目。
  4. 案例1极不可能。

    案例2现在可能已经构建了sha1冲突技术,但github至少已经采取了对策来尝试阻止这样的提交。

    案例3实际上是最有可能的。许多项目都是其他项目的分支。