我正在寻找有关合并三个Git存储库的建议或警告。我需要维护提交历史记录和所有分支。
我已经检查了this question和this 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上运行)或没有该命令进行此合并的方法?
答案 0 :(得分:2)
我认为git subtree
对于这个用例可能有点过分,因为你想要不可逆转地组合存储库。
首先,在每个现有存储库中,创建相关的项目子目录(projectA或其他),并使用git mv
将现有文件和目录移动到其中。提交这些更改。然后依次检查每个分支,并为每个分支重复该过程。
然后对每对存储库中的每对同名分支使用git remote add
,git fetch
,然后使用git merge
。如果您在任何存储库中有任何唯一命名的分支,则需要将它们与master
合并(使用-s ours
或-s theirs
合并策略,具体取决于您是否要合并FROM或者他们)。否则,它们会非常奇怪,因为它们会丢失2/3的项目(但可能这并不重要,因为其他2/3rds仍将存在于其他分支中)。
由于现在没有冲突,这应该可以正常工作,并保留所有历史记录。但是我没试过这个,所以不要删除你的旧存储库一段时间,以防它出错!
答案 1 :(得分:0)
git subtree
来运行git-subtree,如第一个问题的示例代码中所述。