在C ++项目中维护版本的好方法是什么?

时间:2010-07-15 07:11:06

标签: c++

我们有一个C ++项目,每月有数百个SVN版本。有时我们需要在版本号中增加一个小数字,将其从1.6更改为1.7。我们大约每个月做一次。这样做的正确方法是什么?我们希望保存/维护有关每个新版本所做更改的信息,我们希望获得某种版本说明。请给我们一些建议或链接。谢谢!

PS。对不起,如果问题太模糊了。

PPS。我看到我需要澄清一下这个问题。我对如何命名版本不感兴趣。我很感兴趣技术上我应该用C ++代码维护版本号。

6 个答案:

答案 0 :(得分:6)

我将这个系统用于我写的所有软件:

1.2.3.4
  1. 主要版本号。只在增加了许多产品功能的“主要”版本上增加。
  2. 次要版本号。定期(季度,月度)版本的增量。这个数字不限于9;随心所欲,随心所欲。不要为小修正或更新增加此值。更改主版本号时,此数字设置为零。
  3. 更新编号。每当您发布一系列更新时,请递增此数字。我的书中的更新被认为是一个包含一系列错误修复,性能改进或安全增强功能的发行版。必须有多个更改才能增加。这也可以大于9.当更改次要版本号时,将重置为零。
  4. 次要更新号码。通过轻微的个人变化来增加这一点。例如,如果您修复了特定的错误并将补丁推送到上一版本中,则会增加。更新编号更改时,此编号应重置为零。
  5. 最后,我使用以下后缀来表示预发布版本:

    • b :Beta
    • a :Alpha
    • rc :发布候选人

    后缀可以后跟一个数字,以指示该包的预发布版本的哪个版本。例如:

    1.2.3.4b2
    

    将被视为第二个测试版。

    此外,在编写版本时,可以消除尾随零。即:1.0.0.0可以写成1.0

    希望这有点有用。我发现它有助于保持组织有序并在我的档案中保持一些相似的顺序。

答案 1 :(得分:3)

对于“发行说明”跟踪,我建议使用一些外部工具来跟踪任务。您可以分配功能,并在许多情况下将问题编号与特定的Subversion提交相关联。我过去使用过ClearQuest和Jira,但是你可以尝试使用开源/免费工具。

如果您决定遵循此路径,请确保每个提交都标有问题编号,并且所有问题都标有特定的软件版本号('resolve in')。为每个发现的bug打开一个问题。对于每个新版本,创建一个分支,合并标记了要在该版本中解决的问题的提交,并进行测试 - 有时您可能会与不适用于此版本的更改发生冲突,而是与之后的版本发生冲突。在分支合并,构建和测试之后,从中创建一个发布标记。

生成发布文档非常简单:所有信息都存在于与当前版本号相关联的问题跟踪器中。

我在过去也看到过相反的工作:打开一个分支进行开发,在分支中执行单独的更改并将它们合并回主干,每个合并包含整个更改的描述性文本 - - 新功能或错误被修复。需要时直接从主干创建发布标签。从两个版本中获取更改只是从一个版本到下一个版本中读取从更改到中继的日志。

两种解决方案都存在相同类型的问题:合并在理论上是微不足道的,但在实践中并非如此。在第一种情况下,当将代码从主干拉到发布分支时,您将不得不在不拉动中间提交时处理合并问题。在分支机构中开发并合并回主干时,在每次合并到主干之前,您必须将第一个主干更改合并到您的分支中。构建,测试然后合并回主干。

大多数颠覆书都会推荐第二条路径,但在某些情况下,第一条路径(我目前正在使用的路径是有道理的)。在我们的例子中,我们有一整套自动化测试,运行时间超过20小时,所有代码都直接写入主干,这意味着您只需要在那里运行自动化测试。如果我们为每个更改进行分支,要么我们会在未经检验的情况下离开分支,直到我们合并回来 - 想法 - 否则我们将不得不投入更多硬件进行测试并减慢开发速度。

答案 2 :(得分:1)

Semantic Versioning是管理主要/次要修订的一套出色指南。使用它的一个优点是,您只需将人员指向http://semver.org即可让他们完全了解您的版本控制系统。

答案 3 :(得分:0)

你可以

  • 手动维护version.cc文件
  • 使用GNU Autotools并将您的版本号放在AC_INIT() configure.in中,然后使用PACKAGE_VERSION脚本在configure中为您定义的config.h < / LI>
  • 使用代码在您的资源库中标记版本号的位置 - Subversion使用svn cp执行此操作 - 查看有关here的更多信息

答案 4 :(得分:0)

我发现将SVN版本号作为版本号的一部分包含在内非常有用,就像客户报告特定版本的问题一样,您可以轻松查看相关代码。您可以编写可以轻松查询SVN修订版的脚本(例如,我使用JScript编写过脚本),自动编写特殊的version.h头文件。主要/次要编号是手工维护的,但剩下的两个数字(在我的情况下是SVN版本和表示构建日期的特殊版本号)是自动创建的。然后,我使用MS Visual Studio预构建步骤来执行脚本,确保它对于每个构建都是最新的。我自动创建的标题最终看起来像这样:

#ifndef VERSION_H
#define VERSION_H

namespace Version
{
  const int MAJOR = 1;
  const int MINOR = 2;
  const int REVISION = 1234;
  const int BUILD = 10123;

  inline const char* toString()
  {
    return "1.2.1234.10123";
  }

  ...
}

#endif

要从命令行获取SVN修订版,只需从命令行运行svnversion

答案 5 :(得分:0)

我知道WebKit补丁需要包含对ReleaseNotes.txt文件的更改。这可能是一种跟踪个别变化的方法。

他们有许多(面向WebKit的)脚本来帮助他们完成这些任务。它们是用perl编写的,可能会为你提供一些有用的东西。

http://trac.webkit.org/browser/trunk/WebKitTools/Scripts

特别检查   - resolveChangelogs   - svn-createpatch 最重要的是:prepare-changelogs

我没有查看脚本,但它们似乎可以满足您对WebKit的需求。