【发布时间】:2011-01-05 20:44:50
【问题描述】:
我们有以下场景:我们的游戏 OpenLieroX 有几个基本版本;现在是 0.57、0.58 和 0.59。对于每个基本版本,我们都有一个单独的分支。每个这样的基本版本都有多个版本(如 0.57 beta1-beta8 和 rc1、0.58 beta1-beta9)。
当我们开发新东西时,我们在最高的基础版本分支中工作(现在是 0.59)。当我们修复一些报告的错误时,我们会在发生这种情况的最早版本(主要是 0.58)中这样做。有时,我们总是将 0.58 中的所有更改合并到 0.59 中(只要我们仍然会维护并在旧分支上进行更改)。
这一切都很好,直到涉及到一些我们只想在 0.58 中而不是在 0.59 中进行的更改。到目前为止,这只发生在一种情况下:版本号。我们有一些包含版本号的 Version.cpp 文件(以及一些其他文件)。因此,当我们想要发布 0.58 的新版本时,我们将其中的版本字符串更改为“0.58 beta10”(或其他)。现在,当我们进行从 0.58 到 0.59 的常规合并时,也会应用此更改。我们目前通过使用正确的版本号再次覆盖它来修复这种情况(或者在其他错误提交的情况下,可能会恢复)。
关于这种不需要的更改的细节对我来说似乎有点难看。我们管理这种情况的方式一般是坏的/不常见的吗?获得相同结果的最简单方法是什么?在 0.59 中挑选所有 0.58 的提交会做更多的工作。
还有一个更进一步的细节可能使它更复杂:在处理代码时,我必须设置即将到来的版本号。这是因为我们有一个网络引擎,我们可能已经引入了一些新功能,并且在代码中进行了检查,例如 'if(client->version() >= Version(X,Y,Z)) ...'。现在,当我们引入新的东西时,通常在某些时候也意味着这样的检查。 (但我们正在努力避免在旧分支中进行这些更改。)
另一个问题是我们不只是计算版本(如 0.58.1、0.58.2、...),而是这样计算:0.58 beta1、0.58 beta2、...、0.58 betaX、0.58 rc1, ..., 0.58, 0.58.1, 0.58.2, ... 这是因为我们希望将其标记为开始阶段的实验性(beta 阶段),然后标记为基本稳定或稳定。在极少数情况下,即使在两个不同的 beta 版本之间也可能会发生严重的变化(可能是网络协议)(当然,我们会尽量避免它们,但有时如果没有这些变化是不可能的)。
【问题讨论】: