git - Vault 到 Git 到 Mercurial 不保留日期

标签 git mercurial sourcegear-vault mercurial-convert

使用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线路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将使用该日期的作者信息。您需要从存储库链接复制转换扩展,修改它,然后将其添加到 TortoiseHg。

为什么需要这样做:

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

  • 作者是对代码负责的人。

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

这种区别在开源项目中很重要,其中编写代码的人不一定是将其提交到存储库的人:通常有项目的维护者(提交者)接受来自贡献者的 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/

相关文章:

mercurial - 如何使用 .hgsub 中的 [subpaths] 部分重新映射本地子存储库以便在 bitbucket 中使用

sourcegear-vault - 在 Vault 中查看已删除的文件

version-control - 超出比较3的编辑已禁用

eclipse - 将 Sourcegear Vault 与 Eclipse 结合使用?

git - 使用 .gitignore 忽略子目录中的特定文件

git - 将删除移动到 git 中的一个分支

mercurial - “忘记”一个死胡同的分支

java - 开发一个项目有两个名字?

c# - Git 无法区分或 merge utf-16 编码的 .cs 文件

python - 命令完成在 Hg 代码的哪个位置实现?