目前,我们在共享存储库中为我们的PHP应用程序提供了一个主分支。我们有超过500个订阅我们软件的客户。出于不同的目的,他们中的大多数都在他们的项目中进行了一些定制。自定义可以仅从文本字段名称,到全新的功能和模块,或数据库中的新表/列。
我们面临的挑战是我们维护数百个定制分支机构并分发给客户。我们不时提供新功能并更新我们的主分支,然后我们想将主分支更改推送到自定义分支,以便将自定义分支更新到最新版本。
不幸的是,这会导致定制代码与主代码之间发生很多冲突。我们需要很多人力来经历每一个分支并解决所有冲突。这是非常低效的方式,当我们解决冲突时,人类的错误会不断发生。
我正在寻找在自己的客户端发布分支中维护所有自定义代码的高效方法,但是当我们发布新功能时,他们可以继续使用master分支进行更新,只需要很少的努力来合并编码。
答案 0 :(得分:2)
我认为没有一个快速简单的答案。您的产品允许这么多定制的事实基本上意味着您有500个单独的产品。
在我看来,第一步是将核心产品从所有定制中分离出来。然后创建一个单独的存储库,您可以在其中保留所有客户端分支,并将核心产品视为依赖性。您可以通过git-submodule或某种依赖包解决方案来实现。
这样每个客户端都依赖于您的核心产品的特定版本,并且您可以控制某个客户端何时升级到更新版本。
当然,这意味着您的核心产品必须支持某种形式的功能切换和/或模块覆盖,以便进行自定义。