我试图迁移Mercurial库与git,但问题是,Mercurial库有subrepositories(部分带分支),以及大量的合并和分支本身。我想最后的git仓库,以保持所有这些历史,是正确和完整的检查了仓库或其他部门的早期部分时。我不需要新的仓库有子模块或子树,但我会接受使用以及解决方案。我见过一些方法在新的回购为分行,这意味着在过去的检查出不包含全部原来在subrepos文件的顶部合并所有subrepos。我也试过进口一切,树枝,头部复位到过去,合并和向上重订,但有太多的合并和许多发生冲突,甚至--preserve-合并,所以我宁愿避免这种情况。我也无法找到的git的子模块的更新历史记录复制善变subrepository更新历史的任何方式。有没有人有什么想法?谢谢。
也许有一两件事你可以做(但我不知道这是否会工作),是使用HG-混帐推到一个空的Git仓库。
或者,您也可以看看延长git-cinnabar支持subrepo转换为子模块。
有类似的问题(移动水银项目,subrepositories用统一的布局,GIT)我打算跟进2倍的方法:
我正要这个测试自己,并会根据结果更新这个答案...
免责声明:以下解决方案只有当你愿意把subrepos折叠到主存储库中,这可能会或可能不会接受你的作品。
总之:每个subrepo转向Git,转换主回购与git,并已合并的git回购。
git init; git config core.ignoreCase false;
根据需要跑得快,与出口的配置选项
运行git reset --hard HEAD
重新填充目录
根据需要从回购除去汞的任何痕迹
配置文件夹为migration1准备
提交对subrepo变化。git remote add subrepo1 path/to/subrepo1
git fetch subrepo1 --tags
git merge subrepo1/master --allow-unrelated-histories
git remote remove subrepo1
1对于例如,在我的情况下,初始文件夹结构就像:
Main Repo
|- SubRepo1
L SubRepo1-Data
|- SubRepo2
L OtherStuff
和转换后,新的回购协议被配置为:
SubRepo1 (master)
L SubRepo1-Data
因此,我们需要一个文件夹级别增加了,使他们就像subrepos:
SubRepo1 (master)
L SubRepo1
L SubRepo1-Data