为多个客户管理一个项目的多个版本

时间:2019-07-17 08:39:59

标签: git customization

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

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

因此,据我介绍,有2种“解决方案”可以对其进行管理:

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

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

(基础项目)

  • 主人
  • dev
  • 功能
  • 修复

...

  • customerA / master
  • customerA / dev
  • customerA / feature
  • customerA / fix

...

  • customerB / master
  • customerB / dev
  • customerB /功能
  • customerB / fix

所以有4个* N个分支用于N个客户项目...

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

谢谢。

1 个答案:

答案 0 :(得分:0)

我想这取决于您的代码库有望获得的差异。

如果它们之间的差异不大,我会选择选项2。我喜欢将所有代码都放在同一个仓库中。

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