gpt4 book ai didi

mercurial - Mercurial 全局变更集 ID 的分配

转载 作者:行者123 更新时间:2023-12-03 06:48:27 24 4
gpt4 key购买 nike

显然,Mercurial 为每个更改分配了一个全局更改集 ID。他们如何确保这是独一无二的?

最佳答案

正如 Zach 所说,变更集 ID 是使用 SHA-1 hash function 计算的。 。这是加密安全哈希函数的示例。加密哈希函数采用任意长度的输入字符串,并从此字符串生成固定长度的摘要。对于 SHA-1,输出长度固定为 160 位,默认情况下 Mercurial 仅显示前 48 位(12 个十六进制数字)。

加密哈希函数具有这样的特性,即很难找到产生相同输出的两个不同输入,即很难找到字符串 x != y这样H(x) == H(y) 。这称为碰撞抵抗。

由于 Mercurial 使用 SHA-1 函数来计算变更集 ID,因此对于相同的输入(相同的更改、相同的提交者名称和日期),您会获得相同的变更集 ID。但是,如果您使用不同的输入 ( x != y ),则由于碰撞阻力,您将获得不同的输出(变更集 ID)。

换句话来说,如果您没有为不同的输入获得不同的变更集 ID,那么您就发现了 SHA-1 的冲突!到目前为止,还没有人发现 SHA-1 的碰撞,因此这将是一个重大发现。

<小时/>

更详细地说,SHA-1 哈希函数在 Mercurial 中以递归方式使用。每个变更集哈希值都是通过连接计算的:

  • list ID
  • 提交用户名
  • 提交日期
  • 受影响的文件
  • 提交消息
  • 第一个父级变更集 ID
  • 第二个父级变更集 ID

然后对所有这些运行 SHA-1(请参阅 changelog.pyrevlog.py )。由于哈希函数是递归使用的,因此变更集哈希将修复整个历史记录,直到变更集图中的根。

这也意味着如果添加行Hello World!,您将不会获得相同的变更集ID使用相同的提交消息同时到两个不同的项目 - 当它们的历史不同(不同的父变更集)时,两个新的变更集将获得不同的 ID。

关于mercurial - Mercurial 全局变更集 ID 的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com