2

我最近遇到了一个我无法完全解决的问题。我们公司在许多其他项目中开发了一组以一个为中心的项目——我们称之为引擎。该引擎包含使用 MVC 框架 yii 的大部分代码库。还有多个其他项目使用该引擎作为其基础。虽然它们也可以包含唯一代码,但它们主要使用或扩展引擎中的方法和类,专门为客户的规范(在合理范围内)量身定制。这些项目虽然相似,但可以包含独特的部分,使它们彼此不同。我想说每个项目都有 30-40% 的代码库是他们独有的。

在过去的几个月里,我们在发布和更新方面遇到了一些困难。每当客户请求新功能时,我们必须以不干扰其他项目的方式开发它。大多数时候这不是问题,但有时会导致意外错误或延长开发时间。

尽管如此,最令人头疼的还是在发布之前。虽然我们可以及时推出它们,但测试新代码对所有项目的影响可能会花费比我们想要的更多的时间(我们正在编写单元测试和硒测试以使过程更快,而且还因为如果我们想管理这么大的代码库并保持理智,这是合理的做法......不幸的是,我们严重落后,因为管理层认为我们以后总能做到......)。

我们使用 git 作为我们的版本跟踪系统,它应该能够处理这样的事情,至少我希望如此。我们的首席程序员管理着许多具有相似结构的项目:多个站点运行在一个中央引擎上(这两个引擎是为两个完全不同的目的而设计的)。几年前他遇到了同样的问题,并开始使用 git 标签来管理更重要的版本。一些客户的站点使用引擎的 1.3 版本,其他的 1.4 等等。虽然这个系统使推送更新和错误修复变得更容易和更快,但我认为从长远来看它并不实用。或者这是最佳实践。

似乎“我的”引擎应该使用相同的系统,所以我们可以享受更快的开发周期,但我想知道是否有更好的方法。

我的主要问题是:我们能跟上这种方法多久?虽然我理解只将新代码推送到需要它的项目的优势,但为每个主要功能创建一个新版本似乎很快就会失控。

此外,我们应该如何处理现有代码的修复和更新?我的理解是在 1.2 上修复某些东西并不能修复 1.3 和 1.4 上的错误 - 还是我弄错了?还是我应该在 1.4 上修复它?有没有一种我可以选择的方法可以轻松地将特定更改应用于旧/新版本,因此我不必多次进行相同的更改?在旧版本上启用为 1.5 编写的函数怎么样?

我开始考虑使用补丁来为每个需要它们的版本提供修复,但我不确定这是否是个好主意。

还是我应该只说“去他妈的”并仅修复最新版本的错误,逐个升级项目,以便在我们确保它们不会破坏该特定系统上的任何东西时他们会收到修复?

我迷路了。虽然我找到了关于 git 标签和补丁的资源,但我觉得我还没有找到解决问题的真正方法。一个是有用的,不会破坏任何东西(我 99% 确信我们必须保持一个支持多个项目的中央引擎的当前设置),并且是可持续的。目前我们只谈论围绕引擎构建的少数几个站点,但今年已经有更多的计划,随着开发时间的缩短,这个数字只会增加。

我希望你们中的一些遇到并解决了这个问题的人可以帮助我——我将非常感激(知道有解决方案,我松了一口气……)。

提前感谢您的帮助-当我说您会帮助我保持理智时,我不是在开玩笑。

4

1 回答 1

1

此外,我们应该如何处理现有代码的修复和更新?我的理解是在 1.2 上修复某些东西并不能修复 1.3 和 1.4 上的错误 - 还是我弄错了?还是我应该在 1.4 上修复它?有没有一种我可以选择的方法可以轻松地将特定更改应用于旧/新版本,所以我不必多次进行相同的更改?

不,一个版本的修复不会自动应用于所有其他版本。我假设您bug-fix基于标记为 1.2 版的提交创建了一个分支。找到并修复错误后,您应该将修复合并到版本 1.2 并最终标记 1.2.1 的发布。在过程中的某个时刻,这些提交应该合并到其他版本(例如 1.3、1.4 等)中,并根据需要解决冲突。然后为 1.3.1、1.4.1 等发布版本,并添加特定于这些版本的任何其他错误修复。

为了解决更普遍的问题,我认为将您的“引擎”视为具有自己发布周期的单独项目是一种合理的策略。每个使用这个引擎的项目都可以指定它在项目依赖管理系统中使用的版本(requirements.txt对于 python、Maven 或 Ant 用于 Java,yarn 或 npm 用于 JavaScript)。

于 2018-01-30T00:47:40.383 回答