我目前正与另外五位开发人员合作开发一个项目,我们正在为我们的版本控制系统使用subversion。我们已经确定,在我们的软件首次发布之前,我们有12个里程碑。我们使用版本号(0.1到0.12)和描述性标签标记了里程碑。例如:
但是,每几个里程碑都有一个由之前的里程碑组成的外部版本。所以,我们最终会得到以下内容:
这些里程碑中的每一个都可以并行开发,但它们也需要并行进行QA。我们这样做是通过在subversion中为每个里程碑创建分支,只标记里程碑的版本号。自动化系统独立构建每个里程碑,并使用里程碑编号和构建应用程序的subversion版本号对应用程序进行版本控制。版本号在应用程序中突出显示,以便当QA团队查看版本号时,他们可以将其与特定里程碑联系起来,并知道需要进行QA和什么不需要。一旦里程碑通过QA,它将合并到主干中,任何正在进行的开发都将使用最新代码进行更新。
然而,有一个假设(正确地说)版本号的增加包括所有以前的版本。不幸的是,通过上述方案,这可能不会发生,因为一个里程碑可能在另一个之前完成。例如,0.3可能会在0.1之前完成。这意味着我们将有一个内部0.3版本,不包含0.2或0.1的功能。
这是我的问题。当多个并行版本(内部或其他版本)可以非顺序完成时,如何智能地对软件进行版本化?
答案 0 :(得分:2)
我认为你不能因为你有相互冲突的目标 - 并行开发和连续的里程碑。
你要么推迟0.3发布,直到0.1和0.2完成,否则你必须考虑另一种分配里程碑数字的方法。
也许不是使用0.1等,你可以根据它们的名称命名里程碑,这可以增加清晰度并消除混乱。
答案 1 :(得分:1)
由于内部里程碑没有真正的序列,我宁愿为外部版本保留次要版本号,给出反映该功能的分支名称,并添加subversion修订版以识别内部版本。你的外部版本得到了很好的干净0.1,0.2,0.3版本,内部版本为0.2.1234,可以很容易地在Subversion中检查已经合并到外部版本0.2和本版本之间的主干中的内容。
答案 2 :(得分:1)
我有点困惑为什么你要用数字来区分分支;根据功能命名每个分支(例如车门,车辆方向盘),并使用版本号跟踪每个分支的进度(车门v0.1,0.2等)。
如果你打算稍后整合,那么除非你真的非常小心,否则这将是地狱。你可能想要考虑一下如何管理这种疯狂。