【问题标题】:Manage multiple versions of a project for multiple customers为多个客户管理项目的多个版本
【发布时间】:2023-11-17 06:18:01
【问题描述】:

我正在开发一个 Web 应用程序(Symfony 4 rest API),它将被多个客户(大约 20 个不同的客户)使用。每个客户都有他的特定需求,因此我必须为每个客户分叉 Web 应用程序以实现特定需求。

我的第一个想法是在 Git 存储库中创建一个包含所有源代码的通用核心项目,并将其作为 Git 子模块添加到所有其他客户项目中。每个客户项目都会在共同的核心项目上实现他的特定需求。 问题:如何“覆盖”客户项目中的公共核心项目文件?如果在客户项目中被覆盖,如何管理公共核心项目中的更正?我认为这个解决方案行不通。

所以,据我所知,有两个“解决方案”来管理它:

A) 在一个 Git 存储库中创建一个不专用于特定客户的基础项目,并为每个客户项目派生它。当我必须在基础项目中应用更正时,我将使用 cherry-pick Git 命令将其应用于每个客户项目存储库。因此项目之间没有“链接”,因为它们是在单独的存储库中管理的。

B) 使用基础项目创建一个唯一的 Git 存储库,并为每个客户项目创建分支:每个客户项目有 4 个分支。 例如:

(基础项目)

  • 主人
  • 开发
  • 功能
  • 修复

...

  • 客户A/主人
  • 客户A/开发人员
  • 客户A/功能
  • 客户A/修复

...

  • 客户B/主人
  • 客户B/开发人员
  • 客户B/功能
  • 客户B/修复

等等

N 个客户项目的 4 * N 个分支...

您认为最好的解决方案是什么?

谢谢。

【问题讨论】:

    标签: git customization


    【解决方案1】:

    我想这取决于您的代码库预期会有多不同。

    如果它们的分歧不大,我会选择选项 2。我喜欢将所有代码放在同一个 repo 中。

    但是,如果您预计会有更大的分歧,将代码拆分到不同的项目中并智能地使用接口和工厂可能更有意义,这样您就可以将核心代码与每个客户端的特定流程实现混合在一起(无需恢复到黑客或覆盖文件)。使用这种方法,我将拥有一个具有默认流程实现的核心项目,并且每个客户项目都将添加可通过配置以核心项目为基础的替代流程。

    【讨论】: