最好的方法移植善变的回购与subrepositories与git,保持历史?

问题描述 投票:5回答:3

我试图迁移Mercurial库与git,但问题是,Mercurial库有subrepositories(部分带分支),以及大量的合并和分支本身。我想最后的git仓库,以保持所有这些历史,是正确和完整的检查了仓库或其他部门的早期部分时。我不需要新的仓库有子模块或子树,但我会接受使用以及解决方案。我见过一些方法在新的回购为分行,这意味着在过去的检查出不包含全部原来在subrepos文件的顶部合并所有subrepos。我也试过进口一切,树枝,头部复位到过去,合并和向上重订,但有太多的合并和许多发生冲突,甚至--preserve-合并,所以我宁愿避免这种情况。我也无法找到的git的子模块的更新历史记录复制善变subrepository更新历史的任何方式。有没有人有什么想法?谢谢。

git mercurial migration git-submodules mercurial-subrepos
3个回答
1
投票

也许有一两件事你可以做(​​但我不知道这是否会工作),是使用HG-混帐推到一个空的Git仓库。

或者,您也可以看看延长git-cinnabar支持subrepo转换为子模块。


1
投票

有类似的问题(移动水银项目,subrepositories用统一的布局,GIT)我打算跟进2倍的方法:

  1. 将您subrepositories成水银统一项目布局 - 这是这里介绍:Join multiple subrepos into one and preserve history in Mercurial
  2. 现在你可以迁移到Git的轻松,我发现官方的文档最好的资源,并就如何清理提交历史(作者)一个很好的说明:https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git#Mercurial

我正要这个测试自己,并会根据结果更新这个答案...


0
投票

免责声明:以下解决方案只有当你愿意把subrepos折叠到主存储库中,这可能会或可能不会接受你的作品。


总之:每个subrepo转向Git,转换主回购与git,并已合并的git回购。

  1. 成立fast-export。它需要Python 2.7和Mercurial 4.6。
  2. 对于每个subrepo: 转换使用fast-export 创建一个新的目录,以存放临时subrepo 初始化的git:git init; git config core.ignoreCase false; 根据需要跑得快,与出口的配置选项 运行git reset --hard HEAD重新填充目录 根据需要从回购除去汞的任何痕迹 配置文件夹为migration1准备 提交对subrepo变化。
  3. 从汞转换主回购与git,使用步骤2.1-2.3。
  4. 转换.hgignore文件的.gitignore要求
  5. 更改提交到主要的回购
  6. 合并在每个subrepo,使用从this post步骤
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
© www.soinside.com 2019 - 2024. All rights reserved.