创建重复的git提交
我想知道是否可以使用相同的哈希创建两个提交 假设我在创建重复的git提交,git,Git,我想知道是否可以使用相同的哈希创建两个提交 假设我在master分支上,我创建了一个名为foo的新分支。现在让我们假设我有两个终端会话,它们都被授权为作者john。smith@gmail.com。现在让我们假设在一个终端会话上,主会话处于打开状态,另一个终端会话处于打开状态,并且两个分支都具有完全相同的阶段性更改。现在让我们假设我在两个终端会话中同时运行git commit命令 这两个提交的散列值不是相同吗?是的,理论上可能会遇到这种情况。提交哈希由提交对象的内容生成,这些内容是: 提交消息
master
分支上,我创建了一个名为foo
的新分支。现在让我们假设我有两个终端会话,它们都被授权为作者john。smith@gmail.com
。现在让我们假设在一个终端会话上,主会话处于打开状态,另一个终端会话处于打开状态,并且两个分支都具有完全相同的阶段性更改。现在让我们假设我在两个终端会话中同时运行git commit命令
这两个提交的散列值不是相同吗?是的,理论上可能会遇到这种情况。提交哈希由提交对象的内容生成,这些内容是:
- 提交消息
- 作者姓名
- 创作时间戳
- 提交者名称
- 提交时间戳
- 父提交的列表
- 树对象引用
当然,由于SHA1的哈希空间有限,仍然存在哈希冲突问题。在非常大的存储库中,这可能会成为一个问题,但我还没有听说过会发生这种情况,尽管已经有非常大的存储库。但即使发生在其中一个存储库中,也不会影响其他具有更大可管理规模的存储库。请参考@Slava.K的答案。这是完全不同的,我的问题不是git如何处理这种情况,我的问题是你是否真的可以创建这种情况。另请参见脚注1中我给出了一个计算公式“非受迫性“碰撞概率。如果可以破坏或部分破坏SHA-1,则可以增加碰撞的概率。然而,即使您知道general SHA-1的第二个前映像攻击,您也可能需要对其进行修改以使用Git。谢谢,这是一个很好的回答-非常容易理解。我从来没有意识到,即使它真的发生了,也不会是一个问题!