具有相同历史记录的git和Mercurial存储库中的提交会具有相同的哈希值吗?

时间:2019-04-02 15:16:03

标签: git mercurial dvcs

使用git克隆hg存储库时,或从hg迁移到git时,哈希值是否保持不变?

1 个答案:

答案 0 :(得分:3)

通过检查,答案似乎是“否”。

hg clone ssh://some.server.com/path/hgproject/

git clone hg::ssh://some.server.com/path/hgproject/

其次:

hg log -l 5

git log -n 5

为相同的提交显示不同的提交哈希。

虽然git和hg都使用SHA-1散列,但它们的散列内容(可能是元数据)必须有所区别。

任何依赖于散列的工具都需要重写历史记录才能进行迁移。

深入了解

@ngoldbaum和https://www.mercurial-scm.org/wiki/Nodeid的每条评论:

nodeid = sha1( min(parent1, parent2) + max(parent1, parent2) + contents )

而git computes it as

sha1(
    meta data
        commit message
        committer
        commit date
        author
        authoring date
    hash-of-tree-object (effectively the working directory)
)

映射

如果使用git-remote-hg进行视图或转换,则可以找到足够的信息来在.git/hg/origin/marks-{hg,git}中创建映射