加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

分配mercurial全局变更集ID

发布时间:2020-12-20 12:26:12 所属栏目:Python 来源:网络整理
导读:显然,Mercurial会为每个更改分配一个全局变更集ID.他们如何确保这是独一无二的? 解决方法 正如Zach所说,变更集ID是使用 SHA-1 hash function计算的.这是加密安全散列函数的一个例子.加密散列函数接受任意长度的输入字符串,并从该字符串生成固定长度的摘要.
显然,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中以递归方式使用.每个变更集哈希都是通过连接来计算的:

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

然后在所有这些上运行SHA-1(参见changelog.py和revlog.py).因为散列函数是递归使用的,所以changeset hash会将整个历史记录一直修复回变更集图中的根.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读