使用https://github.com/AndreyNikiforov/vault2git我能够将Vault repo转换为Git,然后使用Mercurial的hg convert
获取hg repo。唯一的问题是,在运行hg convert
后,更改集提交日期的日期不正确。
日期显示更改集从get转换为mercurial而不是提交日期的时间。
我还需要做些什么来保存日期吗?
答案 0 :(得分:2)
我通过删除检查文件https://www.mercurial-scm.org/repo/hg-stable/file/09b200396384/hgext/convert/git.py行hg convert
到git
的{{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
时,变更集元数据中有两条记录:git
和committer
。
作者是代码负责人。
提交者是实际将更改提交到存储库的人。
这种区别在开源项目中很重要,在该项目中,编写代码的人不一定是将其提交到存储库的人:通常项目的维护者(提交者)接受来自贡献者的拉取请求(作者)并将其提交到存储库。
author
使用Vault签入信息(提交者和提交日期)作为git changeset作者信息。 git提交者信息使用git用户的信息和实际提交日期(存储库的默认用户)。您可以通过对Vault2Git
所做的变更集执行git cat-file <rev hash>
来了解这种差异。
这适用于git,但是当您运行Vault2Git
时,Mercurial会使用hg convert
名称和author
日期来创建Mercruial变更集元数据。
答案 1 :(得分:1)
您可以尝试hg-git而不是转换扩展程序。它是两者之间的双向桥梁,意味着无损。这必须包括日期,否则每次拉动时哈希都会改变。