将mercurial repo及其子存储库迁移到git并保留历史的最佳方法?
我正在尝试将mercurial存储库迁移到git,但问题是mercurial存储库有子存储库(一些有分支),并且有很多合并和分支本身。我希望最终的git存储库保留所有这些历史记录,并且在签出存储库或其他分支的早期部分时保持正确和完整。我不需要新的存储库有子模块或子树,尽管我也会接受使用它的解决方案。我见过的一些方法将新repo顶部的所有子repo合并为分支,这意味着过去的签出并不包含子repo中的所有文件。我也尝试过将所有内容作为分支导入,将头部重置为过去,合并,并向上重新调整,但是合并太多,并且会产生很多冲突,即使使用--preserve合并,所以我宁愿避免这种情况。我也找不到任何方法将git中的mercurial子存储库更新历史复制为子模块更新历史。有人有什么想法吗?谢谢。也许您可以做一件事(但我不确定这是否可行),那就是使用hg git推送到一个空的git存储库 或者,您也可以考虑扩展以支持子回购转换为子模块。有一个类似的问题(将带有子存储库的Mercurial项目移动到具有统一布局的Git),我打算采用两种方法:将mercurial repo及其子存储库迁移到git并保留历史的最佳方法?,git,mercurial,migration,git-submodules,mercurial-subrepos,Git,Mercurial,Migration,Git Submodules,Mercurial Subrepos,我正在尝试将mercurial存储库迁移到git,但问题是mercurial存储库有子存储库(一些有分支),并且有很多合并和分支本身。我希望最终的git存储库保留所有这些历史记录,并且在签出存储库或其他分支的早期部分时保持正确和完整。我不需要新的存储库有子模块或子树,尽管我也会接受使用它的解决方案。我见过的一些方法将新repo顶部的所有子repo合并为分支,这意味着过去的签出并不包含子repo中的所有文件。我也尝试过将所有内容作为分支导入,将头部重置为过去,合并,并向上重新调整,但是合并太多,并
我正准备亲自测试,并将根据结果更新此答案…免责声明:以下解决方案仅在您愿意将子回购折叠到主存储库中时有效,您可能会接受,也可能不会接受
简而言之:将每个子回购转换为git,将主回购转换为git,并让git合并回购
git init;git config core.ignoreCase false代码>
git reset--hard HEAD
重新填充目录1例如,在我的例子中,初始文件夹结构如下:
Main Repo
|- SubRepo1
L SubRepo1-Data
|- SubRepo2
L OtherStuff
转换后,新回购被配置为:
SubRepo1 (master)
L SubRepo1-Data
因此,我们需要将文件夹级别添加到Subrepo中,使其类似于:
SubRepo1 (master)
L SubRepo1
L SubRepo1-Data
我可以使用hggit完成提交,但这完全忽略了子回购。我查看了git cinnabar,但它也没有subrepo支持。我以前已经转换过基本回购协议和所有子回购协议,但是还没有找到一个好方法来组合它们,同时能够看到包括子回购协议在内的所有文件的历史状态。
SubRepo1 (master)
L SubRepo1
L SubRepo1-Data