使用https://github.com/AndreyNikiforov/vault2git我能够将 Vault 存储库转换为 Git,然后使用 Mercurial 的 hg Convert
来获取 hg 存储库。唯一的问题是,运行 hg Convert
后,更改集提交日期的日期不正确。
日期显示更改集从 got 转换为 Mercurial 的时间,而不是提交日期。
我还需要做些什么来保留日期吗?
最佳答案
我通过删除检查 hg convert
中提交者信息的代码来实现此功能。 git
文件中的扩展名https://www.mercurial-scm.org/repo/hg-stable/file/09b200396384/hgext/convert/git.py线路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
将使用该日期的作者信息。您需要从存储库链接复制转换扩展,修改它,然后将其添加到 TortoiseHg。
为什么需要这样做:
使用 git
提交时,变更集元数据中有两条记录:committer
和author
.
作者是对代码负责的人。
提交者是实际向存储库提交更改的人。
这种区别在开源项目中很重要,其中编写代码的人不一定是将其提交到存储库的人:通常有项目的维护者(提交者)接受来自贡献者的 pull 请求(作者)并将其提交到存储库。
Vault2Git
使用 Vault checkin 信息(提交者和提交日期)作为 git 变更集作者信息。 git 提交者信息使用 git 用户的信息和实际提交日期(存储库的默认用户)。您可以通过执行 git cat-file <rev hash>
看到这种差异在 Vault2Git
的变更集上做。
这对于 git 来说效果很好,但是当你运行 hg convert
时,Mercurial 使用 author
名称和 committer
创建 Mercruial 变更集元数据的日期。
关于git - Vault 到 Git 到 Mercurial 不保留日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372361/