子树合并或子模块用于基于组件的开发:将两个不同但连贯的文件组合在一起。
每组文件都在自己的目录中,因为它们可以独立地分支或标记(子模块),或者一起(子树合并,同时保持取回它们自己的历史的能力)。
两者都需要一个单独的目录。
但是您所描述的(“ Base Project
”在根目录中,在“ project 1
”或“ project 2
”中增长)是关于一种基于系统的方法:所有组件合并为一个大组件:一大组文件将始终一起演变,作为一个单元。
因此,每个项目可以有一个分支:branch1
for CMS-projet1
、branch2
forCMS-project2
等。
但是,如果您需要将projectx
特定的修改或特定于 CMS 的修改报告回其原始(和单独的)存储库,则在专用分支中进行所述特定更改,然后合并这些更改:
branchp1
将是影响的变化project1
branchc1
将是影响的变化CMS
branch1
将是从branchp1
和合并的结果branchc1
(同样的事情branch2
)
然后,您可以将这些更改导出为补丁:
- 从
branchp1
到project1
回购
- 从
branchc1
到CMS
回购
不方便的是,Git 不会记住已经合并回原始存储库的内容,但这将允许您将在您CMS-projectx
的文件集中开发的公共历史报告回原始存储库CMS
和存储projectx
库。
注意:如果您不想管理 2 个额外的分支,另一种解决方案是:
- 确保每次提交仅包含 CMS 修改或项目修改
- 留下有助于区分它们的提交消息(“
[CMS] my CMS modification comment...
”或“ [Project1] my project1 modification comment...
”
- 使用脚本
git-extract-patches
仅将正确的提交导出为补丁。