用一个父存储库替换三个Git存储库

时间:2013-10-26 21:16:57

标签: git maven merge

我正在寻找有关合并三个Git存储库的建议或警告。我需要维护提交历史记录和所有分支。

我已经检查了this questionthis question,似乎“git-subtree”命令会完成我想要的东西,但似乎该命令已经已被删除或某事(评论似乎在这个问题上有冲突。)有一个“git子树”命令,但我不确定它做了什么,文档相当薄。

我有三个Git存储库,每个存储库都包含一个Maven项目。文件和存储库根本不重叠(例如,没有项目是任何其他项目的Git子模块。)它们是完全独立的,除了B和C中引用A的代码:

ProjectA.git
    pom.xml
    /src/....

ProjectB.git
    pom.xml
    /src/...

ProjectC.git
    pom.xml
    /src/...

我想将它们合并到一个“父”存储库中:

Parent.git
    /ProjectA
        pom.xml
        /src/...
    /ProjectB
        pom.xml
        /src/...
    /ProjectC
        pom.xml
        /src/...

我需要维护提交历史记录和所有分支,但我不想将各个存储库维护为子模块或单独的存储库。事实上,如果他们在这个过程之后离开会更好,人们不会想继续使用它们。

最简单,最可靠的方法是什么?有没有办法访问git-subtree命令(我使用Git 1.8.0在Windows 7上运行)或没有该命令进行此合并的方法?

2 个答案:

答案 0 :(得分:2)

我认为git subtree对于这个用例可能有点过分,因为你想要不可逆转地组合存储库。

首先,在每个现有存储库中,创建相关的项目子目录(projectA或其他),并使用git mv将现有文件和目录移动到其中。提交这些更改。然后依次检查每个分支,并为每个分支重复该过程。

然后对每对存储库中的每对同名分支使用git remote addgit fetch,然后使用git merge。如果您在任何存储库中有任何唯一命名的分支,则需要将它们与master合并(使用-s ours-s theirs合并策略,具体取决于您是否要合并FROM或者他们)。否则,它们会非常奇怪,因为它们会丢失2/3的项目(但可能这并不重要,因为其他2/3rds仍将存在于其他分支中)。

由于现在没有冲突,这应该可以正常工作,并保留所有历史记录。但是我没试过这个,所以不要删除你的旧存储库一段时间,以防它出错!

答案 1 :(得分:0)

你正在谈论什么?您可以通过输入git subtree来运行git-subtree,如第一个问题的示例代码中所述。