多个网站,单一代码库:git fork?

Multiple websites, single codebase: git fork?

我工作的其中一个 Web 应用程序是一个旧的遗留系统,最近已迁移到 git。系统相当大。同一软件的两个不同网站 运行;然而,代码的许多部分使用简单的控制语句(if site == 'this' { do custom business logic; })做特定于站点的事情。这个策略已经用了十多年了,越来越丑了。

由于代码库的很大一部分在两个站点之间存在分歧,我们正在考虑分叉存储库。棘手的是,大部分代码是git在两个系统之间直接共享的。因此,如果在共享代码中修复了错误,那么将修复程序放入分叉中似乎很棘手。例如,我们可以使用补丁。或者,我们可以在分叉点创建一个分支,挑选更改,然后使用拉取请求。但是这两种方法对我来说都过于复杂,我想尽量减少复杂性。

现在进入正题。 在这里分叉似乎是个好方法吗?我们应该改用分支,并挑选 fixes/enhancements 来共享代码吗?

顺便说一句,我要再次强调这是一个大型遗留系统。我们一直在努力改进系统,比如将共享的 JavaScript 模块提取到它们自己的存储库中,并在 NPM 中发布这些模块。 (我们遵循 Michael Feather 的书 有效地使用遗留代码 中列出的指导方针。)话虽如此,改进大型遗留系统是一个缓慢的过程。我们希望尽量减少重构,并继续进行缓慢的改进。

您知道拥有大量重复代码将是一个问题。最有可能的是,一旦这些站点存在于单独的存储库中,它们就会产生分歧,使交换补丁变得非常困难,以至于无法正确执行这不是您最终要做的事情——这意味着您最终将通过两个单独的开发工作来修复每个错误。我无法想象与当前 "branch based on site ID" 方法相关的问题会比这更糟。

我了解大型系统的动力,但如果您选择系统 方法来将通用代码与不同代码分开 - 而不必担心(还)拆分个人代码通用模块,但首先转向 3-repo 解决方案 - 你可以比你想象的更快到达那里。