【问题标题】:Vault to Git to Mercurial not preserving datesVault to Git to Mercurial 不保留日期
【发布时间】:2012-01-12 10:17:29
【问题描述】:

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

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

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

【问题讨论】:

  • 可能是多余的问题,但你为什么要进一步从 git 转换为 mercurial? :)
  • 我的目标是让 repo 变成 mercurial,而 vault2git 是我找到的 x 的唯一保险库。
  • @Omar git repo 中的时间戳是否正确?
  • 是的,Git 时间戳是正确的。

标签: git mercurial sourcegear-vault mercurial-convert


【解决方案1】:

我通过删除检查文件https://www.mercurial-scm.org/repo/hg-stable/file/09b200396384/hgext/convert/git.py 文件125 到130 中hg convert git 扩展名中的提交者信息的代码来完成这项工作:

        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 用户的信息和实际提交日期(存储库的默认用户)。您可以通过在 Vault2Git 所做的变更集上执行 git cat-file &lt;rev hash&gt; 来看到这种差异。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 试过这样做,但由于某种原因,它不会克隆使用 vault2git 创建的 git repo。
    • 让我想知道 vault2git 创建的 git repo 是否有些奇怪。它设法导致两种方法(通常有效)失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多