当 GIT 用完您的修订版的哈希值时会发生啥?
Posted
技术标签:
【中文标题】当 GIT 用完您的修订版的哈希值时会发生啥?【英文标题】:What happens when GIT runs out of hash values for your Revisions?当 GIT 用完您的修订版的哈希值时会发生什么? 【发布时间】:2014-02-02 11:09:11 【问题描述】:当 GIT 用完您的修订版的哈希值时会发生什么?
并不是说它会很快发生,但理论上是可能的。
【问题讨论】:
不,实际上不可能,理论上是可能的。 Git 使用 SHA-1,我相信该算法尚未产生实际冲突。并不是说它不会 - 根据固定长度摘要的定义,它会。但这一切都与发生碰撞的可能性有关。 理论上也不可能:这些加密散列是散列,——即根据数据计算的摘要,而不是 GUID 或其他一些随机生成的值.理论上存在所谓的哈希冲突的可能性,但它已经在 Git 邮件列表上被咀嚼了很多次,我建议你自己研究并阅读它们。 【参考方案1】:根据Git's Documentation
“如果你碰巧提交了一个与你的存储库中的前一个对象具有相同 SHA-1 值的对象,Git 将在你的 Git 数据库中看到前一个对象并假设它已经被写入。如果你尝试要在某个时候再次检查该对象,您将始终获得第一个对象的数据。”
【讨论】:
除此之外。由于 git 返回与前一个相同的哈希,因此创建它的存储库在前一次提交时也是相同的。这意味着没有任何伤害指向先前的提交。散列是通过代码生成的,并且可能永远不会与不同代码上的另一个散列相同。如果是这样,您可以停止使用 git。 @Embed101,这并不完全正确,存在哈希冲突,重要的是概率,10^-45 是相当安全的选择。【参考方案2】:我认为这将帮助您更好地理解Probability of SHA1 collisions
我认为您在现实世界中会用完空间;-)
【讨论】:
以上是关于当 GIT 用完您的修订版的哈希值时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章