将存储库从hg转换为git后,如何迁移其他变更集?

时间:2017-01-03 05:11:32

标签: git version-control mercurial

使用fast-export将mercurial存储库迁移到git后,我发现未转换为未合并为默认值的开放命名分支。现在我想将这些分支上的未完成变更集导入新的git repos。

我尝试了各种方法,包括hg-git和hg export,但这些方法的问题是我想要迁移的更改集或差异具有不同的变更集ID,并且由于找不到历史记录而导致流程出错。

我正在考虑编写一个脚本来自动从Mercurial导出变更集,在新的git仓库中找到相应的父变更集,导入到git阶段,然后提交,但我想知道是否有类似这样的工具 - 导入没有匹配历史记录的差异 - 已经存在。那里有什么东西吗?

2 个答案:

答案 0 :(得分:1)

您可以通过以下步骤将hg转换为git:

  1. 在TortoiseHg中 - >全球设置 - >扩展程序标签 - >选择hggit
  2. 创建一个初始git仓库:
  3. mkdir git cd git git init cd ..

    1. 克隆hg repo并将其推送到git
    2. hg clone <URL for hg repo> hg bookmarks hg hg push ../git

      1. 在git repo中,找到hg的变更集
      2. cd .. cd git git checkout hg git log

        然后你会找到日志历史记录。

        <强>更新

        如果您仍想使用faste-export进行迁移。您可以尝试以下步骤:

        migrate from mercurial to git的启发,我们还可以按hg log | grep changeset: | sort | uniq | sed 's/changeset: *//' > ../changeset创建变更集映射文件。

        将hg迁移到git时只需尝试/path/for/fast-export/hg-fast-export.sh -r /path/for/hg-repo -A /path/for/changeset(因为Windows操作系统似乎无法使用hg-fast-export.sh,所以很抱歉我在更新答案之前无法尝试)。

答案 1 :(得分:1)

最后,导入所需的内容比任何转换工具都支持的更复杂。我写了一个C#脚本,它将从Mercurial存储库导出补丁,根据需要修改它们以匹配新的Git repo布局,然后生成一系列git命令,这些命令在运行时会导入补丁并在分支上进行提交以导入。这在我们需要导入的许多分支机构中运作良好。

The LinqPad script can be found hereGist can be found here