2

使用https://github.com/AndreyNikiforov/vault2git我能够将 Vault 存储库转换为 Git,然后使用 Mercurialhg convert获取 hg 存储库。唯一的问题是在运行hg convert更改集提交日期后的日期不正确。

日期显示更改集从 got 转换为 mercurial 的时间,而不是提交日期。

我还需要做些什么来保存日期吗?

4

2 回答 2

2

我通过删除检查文件https://www.mercurial-scm.org/repo/hg-stable/file/09b200396384/hgext/convert/git.pyhg convert git文件扩展名中的提交者信息的代码来完成这项工作:125130

        if n == "committer":
            p = v.split()
            tm, tz = p[-2:]
            committer = " ".join(p[:-2])
            if committer[0] == "<": committer = committer[1:-1]
            committer = self.recode(committer)

删除此内容后,hg convert将使用作者信息作为日期。您需要从 repo 链接复制转换扩展,对其进行修改,然后将其添加到 TortoiseHg。

为什么需要这样做:

使用 提交时git,变更集元数据中有两条记录:committerauthor.

  • 作者是代码的负责人。

  • 提交者是实际将更改提交到存储库的人。

这种区别在开源项目中很重要,其中编写代码的人不一定是将代码提交到存储库的人:通常有项目的维护者(提交者)接受来自贡献者(作者)的拉取请求并将其提交到存储库。

Vault2Git使用 Vault 签入信息(提交者和提交日期)作为 git 变更集作者信息。git committer info 使用 git 用户的信息和实际提交日期(存储库的默认用户)。git cat-file <rev hash>您可以通过执行更改集来看到这种差异Vault2Git

这适用于 git,但是当您运行时hg convert,Mercurial 使用author名称和committer日期来创建 Mercruial 变更集元数据。

于 2011-12-06T01:57:52.957 回答
1

您可以尝试hg-git而不是转换扩展。它是两者之间的双向桥梁,旨在实现无损。这必须包括日期,否则每次拉取时哈希都会改变。

于 2011-12-04T10:38:20.280 回答