使用跨多个项目的git标记管理不同的软件版本

时间:2018-01-30 00:38:47

标签: git git-tag git-patch

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

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

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

我们使用git作为我们的版本跟踪系统,它应该能够处理这样的事情,至少我希望如此。我们的首席程序员管理着不少具有类似结构的项目:多个站点运行一个中央引擎(两个引擎分别用于两个完全不同的目的)。几年前他遇到了同样的问题,并开始使用git标签来管理更重要的版本。一些客户的网站使用引擎的1.3版本,其他的则使用1.4等等。虽然这个系统可以更轻松,更快地推动更新和错误修复,但从长远来看,我认为它不实用。或者说这是最好的做法。

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

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

此外,我们应该如何处理现有代码的修复和更新?我的理解是在1.2上修复某些东西并不能解决1.3和1.4上的错误 - 或者我错了?或者我应该在1.4上修复它?有没有一种方法可以让我更容易对旧版本/新版本进行特定更改,因此我不必多次进行相同的更改?如何在旧版本上启用为1.5编写的函数?

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

或者我应该说" f * ck it"并且仅在最新版本上修复错误,逐个升级项目,以便在我们确保他们不会破坏该特定系统上的任何内容时收到修复程序?

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

我希望遇到并解决这个问题的一些人可以帮助我 - 我会非常感激(并且知道有一个解决方案而感到宽慰......)。

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

1 个答案:

答案 0 :(得分:1)

  

此外,我们应该如何处理现有代码的修复和更新?我的理解是在1.2上修复某些东西并不能解决1.3和1.4上的错误 - 或者我错了?或者我应该在1.4上修复它?有没有一种方法可以让我更容易对旧版本/新版本进行特定更改,因此我不必多次进行相同的更改?

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

为了解决更普遍的问题,我相信对待你的"引擎"作为一个单独的项目,有自己的发布周期是一个合理的策略。使用此引擎的每个项目都可以指定它在项目依赖关系管理系统中使用的版本(requirements.txt用于python,Maven或Ant用于Java,yarn或npm用于JavaScript)。