0
我有3个类似的组织和一些重复的目录之间的git回购。他们是一个大项目的子项目。Git。如何使共享目录而不是重复?
Proj1/
.git/
feature1_lib/
feature1_app/
feature1/ <- specific to Proj1
feature2_lib/
...
Proj2/
.git/
feature1_lib/
feature1_app/
feature1/ <- specific to Proj2
feature2_lib/
...
Proj3/
.git/
feature1_lib/
feature1_app/
feature1/ <- specific to Proj3
feature3_lib/ <- specific to Proj3
feature3_app/ <- specific to Proj3
feature3/ <- specific to Proj3
...
它们是同时开发的,但历史略有不同。
Proj1/
...
commit4 "Commit specific to Proj1."
commit5 "Add code to feature1_lib."
commit6 "Fix bugs in feature1_lib."
commit7 "Refactoring in feature1_lib."
...
Proj2/
...
commit6 "Import changes from Proj1." <- after commit7 in Proj1
commit7 "Commit specific to Proj2."
commit8 "Fix bugs in feature2_lib."
commit9 "Add code to feature2_lib."
...
等。
现在我正在寻找切割和粘贴重复部分的选项。我认为它应该看起来像这样
Proj1_2_common/
.git/
...
Proj1_2_3_common/
.git/
...
Proj1/
.git/
...
Proj2/
.git/
...
Proj3/
.git/
...
我读了关于子树和子模块,但没有完全理解。为什么我必须创建子树,如果我可以将我的项目指向特定目录?也就是说,我可以简单地重新配置我的项目以查看"Proj1_2_3_common/feature1_lib/"
,而不是从"feature1_lib/"
制作子树。
那么从你的观点来看,这里有什么更好的选择?什么是最简单的?如何处理这种混乱的历史,在移动之后有一些参考?
'''我拥有它。 ''我需要从原始回购中删除它。 '3.为什么子模块在这里更好?历史呢? – LVitya 2014-09-23 09:54:18
@LVitya通过子模块,对'*/vendor/ProjModules'所做的更改将受到ProjModules项目历史的影响。这与如果您切换到“ProjModules”进行更改,然后切换回“Proj *”以提取这些更改的行为相同。从现在开始,'ProjModules'历史属于'ProjModules'项目,'Proj *'历史属于'Proj *'项目。 – zessx 2014-09-23 09:58:47
与subtree有什么区别?如何保存以前的分离目录更改历史记录? – LVitya 2014-09-23 11:01:56