2013-10-26 174 views
-1

我在寻找关于合并三个Git存储库的建议或警告。我需要维护提交历史和所有分支。用一个父存储库替换三个Git存储库

我已经研究this questionthis question,它似乎像“混帐子树”命令会做我想要什么,但似乎这样的命令已被删除或东西(的评论似乎在这场冲突问题。)有一个“git子树”命令,但我不确定它做了什么,而且文档很薄。

我有三个Git仓库,每个仓库都包含一个Maven项目。这些文件和资料库不重叠的所有(没有项目是其它任何的Git的子模块,例如)。他们除了在B码和C引用一个完全独立的:

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

我认为git subtree可能是矫枉过正的这种用例,因为你想只是不可逆转地组合存储库。

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

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

由于现在不存在冲突,所以这应该是正常的,并保留所有的历史记录。但是我还没有尝试过,所以不要一段时间删除旧版本库,以防万一出错!

+0

谢谢,我会试试这个(并且保留所有的备份)。 – user1071914

+0

标记答案正确! – MariuszS

+0

还没试过呢! – user1071914

0

你在说什么?按照第一个问题的示例代码所述,通过输入git subtree来运行git-subtree。

+0

是的,git子命令在手册页中被标记为'git-commandname',因为手册页名称不允许有空格,就是这样。但是,我认为'git subtree'命令对于这个用例可能是过分的。 –

+0

对第一个问题的评论不同地说,“git-subtree”是(1)已停用(2)被包含在Git中,并且(3)已停用,但仍未包含在Git中。我真的不知道要相信哪一个,如果有的话。另外,对这个问题至少有三个截然不同的“答案”。我应该选择哪一个?请记住,破坏公司的源代码库可能会让你被解雇,这就是为什么我非常小心。 :-D – user1071914

+0

@ user1071914关于最后一点,显然会做备份 - 因为这是一个非常深的操作,在这种情况下,'git clone's离线 - 并仔细验证。 – djechlin

相关问题