Vault to Git to Mercurial不保留日期

时间:2011-12-04 00:49:28

标签: git mercurial sourcegear-vault hg-convert

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

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

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

2 个答案:

答案 0 :(得分:2)

我通过删除检查文件https://www.mercurial-scm.org/repo/hg-stable/file/09b200396384/hgext/convert/git.pyhg convertgit的{​​{1}} 125扩展名中的提交者信息的代码来实现此目的:

130

删除此内容后, 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) 将使用作者信息作为日期。您需要从repo链接复制转换扩展,修改它然后将其添加到TortoiseHg。

为什么需要这样做:

提交hg convert时,变更集元数据中有两条记录:gitcommitter

  • 作者是代码负责人。

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

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

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

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

答案 1 :(得分:1)

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