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