2

未来还有一些子项目:“项目1”、“项目2”等等。

此外,还有一个名为“基础项目”的项目,它是其他项目的基础。“Base Project”是一个内容管理系统(CMS)。

所有项目都有自己的 git 存储库。

“项目1”、“项目2”等使用“基础项目”发展壮大。

git 中有一些方法,例如 submodule 或 subtreemerge。但似乎不适合这里。“基础项目”不应克隆到子目录中。它在根目录中。它在“项目1”或“项目2”中增长......

当我在子项目中工作时,我必须能够将“基础项目”更改单独推送到它自己的存储库以获取其他子项目。

我能做些什么?

4

1 回答 1

3

子树合并或子模块用于基于组件的开发:将两个不同但连贯的文件组合在一起。
每组文件都在自己的目录中,因为它们可以独立地分支或标记(子模块),或者一起(子树合并,同时保持取回它们自己的历史的能力)。
两者都需要一个单独的目录。

但是您所描述的(“ Base Project”在根目录中,在“ project 1”或“ project 2”中增长)是关于一种基于系统的方法:所有组件合并为一个大组件:一大组文件将始终一起演变,作为一个单元。
因此,每个项目可以有一个分支:branch1for CMS-projet1branch2forCMS-project2等。

但是,如果您需要将projectx特定的修改或特定于 CMS 的修改报告回其原始(和单独的)存储库,则在专用分支中进行所述特定更改,然后合并这些更改

  • branchp1将是影响的变化project1
  • branchc1将是影响的变化CMS
  • branch1将是从branchp1和合并的结果branchc1

(同样的事情branch2

然后,您可以将这些更改导出为补丁

  • branchp1project1回购
  • branchc1CMS回购

不方便的是,Git 不会记住已经合并回原始存储库的内容,但这将允许您将在您CMS-projectx的文件集中开发的公共历史报告回原始存储库CMS和存储projectx库。


注意:如果您不想管理 2 个额外的分支,另一种解决方案是:

  • 确保每次提交仅包含 CMS 修改或项目修改
  • 留下有助于区分它们的提交消息(“ [CMS] my CMS modification comment...”或“ [Project1] my project1 modification comment...
  • 使用脚本git-extract-patches仅将正确的提交导出为补丁。
于 2012-11-25T12:49:08.690 回答