子树合并或子模块用于基于组件的开发:将两个不同但连贯的文件组合在一起。
每组文件都在自己的目录中,因为它们可以独立地分支或标记(子模块),或者一起(子树合并,同时保持取回它们自己的历史的能力)。
两者都需要一个单独的目录。
但是您所描述的(“ Base Project”在根目录中,在“ project 1”或“ project 2”中增长)是关于一种基于系统的方法:所有组件合并为一个大组件:一大组文件将始终一起演变,作为一个单元。
因此,每个项目可以有一个分支:branch1for CMS-projet1、branch2forCMS-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仅将正确的提交导出为补丁。