【问题标题】:How to organize shared code/assets across projects with git repositories如何使用 git 存储库跨项目组织共享代码/资产
【发布时间】:2011-07-04 21:59:09
【问题描述】:

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

创建此基础项目的变体的原因如下:

a) 白标+定制

b) 基于此项目的新项目,但具有附加功能(在 java 和 web 文件中)

基础项目
爪哇

  • src/核心

网络

  • 模板

  • css

  • javascript

  • 图片

项目 A(基于基础)
爪哇

  • src/核心

  • src/projectA 特定文件夹

网络

  • 模板

  • css

  • javascript

  • 图片

  • projectA 特定文件夹

项目 B(基于基础)
爪哇

  • src/核心

  • src/projectB 特定文件夹

网络

  • 模板

  • 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 中是否有更好的管理方法?

【问题讨论】:

    标签: git


    【解决方案1】:

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

    然后您可以签出basecherry-pick 您需要从子项目中合并的提交(约束e)。

    【讨论】:

    • simon,我原本想将“基础项目”作为“主”分支。将它作为另一个“分支”有什么好处?
    • 你可以称它为masterbase,这是一个品味问题;)你说得对,master 可能更惯用。
    • 偶尔cherry-pick +1,虽然如果你经常这样做,通常最好直接在master 中进行更改并将其合并。
    【解决方案2】:

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

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

    【讨论】:

    • 查看其他开源项目是个好主意。将花一些时间来看看其中的几个。
    猜你喜欢
    • 2022-01-17
    • 2015-08-04
    • 1970-01-01
    • 2015-04-06
    • 2023-02-06
    • 1970-01-01
    • 2023-04-04
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多