如何使用git存储库跨项目组织共享代码/资产

时间:2011-02-26 15:55:47

标签: git

我有一个场景,其中基础项目包含java代码和网站文件(jsp / html / javascript,模板,css,图像等)。

此基础项目的变体由于以下原因而创建:

a)白色标签+定制

b)基于此项目的新项目,但附加功能(包括java和Web文件)

基础项目
java

  • 的src /芯

web

  • 模板

  • CSS

  • 的javascript

  • 图像

项目A(基于基础)
java

  • src / core

  • src / projectA特定文件夹

web

  • 模板

  • CSS

  • 的javascript

  • 图像

  • projectA特定文件夹

项目B(基于基础)
java

  • 的src /芯

  • src / projectB特定文件夹

web

  • 模板

  • CSS

  • 的javascript

  • 图像

  • projectB特定文件夹

重要约束

a)projectA和projectB共享来自基础项目的相当多的代码

b)除了拥有自己的文件和代码外,ProjectA和ProjectB还可以添加,修改或删除web / templates,web / css,web / image文件夹中的文件 - 用于自定义和白色标签

c)未来可以创建更多项目,如projectA和projectB

d)更改基础项目时,应该可以将更改反映在子项目中

e)有时,projectA / projectB对公共文件所做的更改应该折叠回基础项目。

最初,我认为我将为基础项目和项目A,B等各自提供单独的git存储库。但是特别注意上述约束,我认为git子树或子模块方法都不起作用(对于明显的局限性)

所以,我倾向于拥有一个单独的存储库并使用“分支”方法,其中projectA和projectB将成为分支,base将成为“主”。约束(e)在这种方法中的效果如何?

有没有更好的方法来管理这个git?

2 个答案:

答案 0 :(得分:1)

您为每个子项目设置base分支和分支的方法听起来很合理。

然后,您可以结帐{/ 1}}和base您需要从子项目中加入的提交(约束e)。

答案 1 :(得分:0)

您的约束绝对适合分支项目的模型,因此您可以将ProjectA和ProjectB视为Base的分支。我的意思是,基本上,派生项目正在修改原始文件并添加一些新文件。新文件位于单独的目录中的事实并不重要,因为您需要修改来自Base的存储库。

是否有三个存储库,其中两个由外部“分支策略”绑定到第三个存储库,这比当前保持三个永久保持同步的分支的解决方案当然可以讨论,但我认为看看开源分叉项目以及它们如何处理与它们的起源合并的双向代码是值得花一点研究时间的东西。不幸的是,这是我以前没有经验的领域。