使用fast-export将mercurial存储库迁移到git后,我发现未转换为未合并为默认值的开放命名分支。现在我想将这些分支上的未完成变更集导入新的git repos。
我尝试了各种方法,包括hg-git和hg export,但这些方法的问题是我想要迁移的更改集或差异具有不同的变更集ID,并且由于找不到历史记录而导致流程出错。
我正在考虑编写一个脚本来自动从Mercurial导出变更集,在新的git仓库中找到相应的父变更集,导入到git阶段,然后提交,但我想知道是否有类似这样的工具 - 导入没有匹配历史记录的差异 - 已经存在。那里有什么东西吗?
答案 0 :(得分:1)
您可以通过以下步骤将hg转换为git:
mkdir git
cd git
git init
cd ..
hg clone <URL for hg repo>
hg bookmarks hg
hg push ../git
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 here和Gist can be found here。