繁体   English   中英

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

[英]After converting repository from hg to git, how to migrate additional changesets?

使用快速导出将Mercurial存储库迁移到git之后,我发现未合并为默认值的打开的命名分支没有被转换。 现在,我想将这些分支上的未完成变更集导入到新的git repos中。

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

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

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

  1. 在TortoiseHg->全局设置->扩展选项卡->选择hggit
  2. 创建一个初始git repo:

mkdir git cd git git init cd ..

  1. 克隆一个汞回购并将其推入git

hg clone <URL for hg repo> hg bookmarks hg hg push ../git

  1. 在git repo中,找到hg的变更集

cd .. cd git git checkout hg git log

然后,您将找到日志历史记录。

更新

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

受到从mercurial迁移到git的启发,我们还可以通过hg log | grep changeset: | sort | uniq | sed 's/changeset: *//' > ../changeset创建一个变更集映射文件hg log | grep changeset: | sort | uniq | sed 's/changeset: *//' > ../changeset hg log | grep changeset: | sort | uniq | sed 's/changeset: *//' > ../changeset 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操作系统似乎很难usehg-fast-export.sh,非常抱歉,在更新答案之前无法尝试)。

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

您可以在此处找到LinqPad脚本,并在此处找到 要点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM