使用TortoiseSVN跟踪版本,构建,修订

时间:2009-11-16 16:33:25

标签: svn version-control tortoisesvn

我是一个项目的唯一开发人员,并且已经使用tortoiseSVN很长一段时间了。现在我想开始在项目中正确地使用版本信息。在日志文件和帮助>中显示主要版本,次要版本,更新,构建/修订关于等...

我似乎无法找到最合适的人选。 svn关键字修订似乎是一个好主意,但它插入文件的信息不是友好的格式来更新资源。

$rev$ is expanded to $Revision: 72 $ 

另一方面,subwcrev几乎可以实现,但是我无法让它为版本文件编写正确的修订版。换句话说,如果我运行

subwcrev c:\myproject c:\myproject\version.in c:\myproject\version.h  

它会正确编写当前版本(72),但如果我然后提交(现在版本73)并在稍后阶段检查该版本,则项目中的实际修订将为72.

我采取了错误的做法吗?我应该采用不同的方法,只在Visual Studio中使用自动递增的内部版本号吗?

您在组织中做了什么?

6 个答案:

答案 0 :(得分:3)

首先,您是否在svn中使用标签来跟踪您的主要版本,次要版本等?如果没有,我会从那里开始。我为项目的每个版本创建一个标签,只需将其命名为1.0,1.1,2.0等。

其次,您可能需要查看持续集成/构建服务器,例如Cruise Control。

答案 1 :(得分:1)

WordAligned有一篇非常好的摘要文章,您可能希望阅读:

The Trouble with Version Numbers

答案 2 :(得分:0)

Subwcrev是查找工作副本状态的好工具。我不会用它来跟踪构建号码,因为颠覆状态号码经常变化。如果另一个开发人员开始研究这个项目,这听起来很难保持一切有条理。

使用visual studio工具跟踪构建号码并使用subversion来标记版本。

答案 3 :(得分:0)

解决您的问题:

  

我对此采取了错误的做法吗?

在文件本身中打印修订号很有用,但该修订号仅适用于该文件。项目中的其他文件可能会有不同的版本号,这将使您难以跟踪实际进入构建的文件组。

  

我应该采用不同的方法,只在Visual Studio中使用自动递增的内部版本号吗?

不,坚持颠覆中的那个。不要依赖您的开发工具来告诉您文件的版本,而是使用版本控制系统。

  

您在组织中做了什么?

我们使用tagging。一旦我们项目中的文件处于我们可以将其部署到生产的位置,我们就会标记该组文件(通常以%Y%m%d格式给出日期)。标记有很多好处。

从该标签开始,我们将构建和部署。我们还没有合适的构建服务器或持续集成服务器。我们像你一样小,但我们到了那里: - )

编辑:我应该指出标记很有用,因为它会告诉你整个项目的状态(它是项目中所有文件的快照,无论版本号如何)。如果你必须回滚到以前的版本,它也很方便。当然,这是在您标记了一段时间之后。

答案 4 :(得分:0)

好的,将添加部分答案。

就版本号而言(从不介意机制),颠覆版本号非常有用 - 你可能想控制Major和Minor,但是从那里使用版本号(第3或第4个元素)是很好的。更重要的是,即使您没有在发布时专门标记存储库,您仍然可以获得处于正确状态的代码。

这将我们带到力学 - 这在某种程度上取决于语言。在C#程序集中,您希望修改AssemblyInfo.cs以获得所需的值,在其他语言中,我不确定是否在我的脑海中(将编辑以响应有用的注释!)。如果能够正确执行此操作,您将能够识别已部署项目中所有程序集的代码。

那么......如何在发布版本中获得AssemblyInfo.cs或同等权限?通过构建脚本(MSBuild或其他)为您完成 - 正确构建文件可能很痛苦(我之前已经为它完成了),特别是当您开始添加诸如提取修订号之类的并发症时/ em>还有其他可以提供帮助的工具,这使我有了构建服务器的可取性。

我最近发现的关于TeamCity的一件事是,你有可以插入构建脚本的系统变量 - 所以我有TeamCity内部版本号(包括SVN版本和TeamCity构建版本)作为我的标识符 - 我们的发布包是由TeamCity创建的构建工件,因此我识别特定构建的能力相当不错。我确信其他服务器具有类似的功能。我还没有这样做,但我的下一步将是在Team City中创建我可以手动触发的“发布”版本 - 我的意图是这将自动执行在Subversion中创建标记的步骤以及其他一些步骤(例如调整web.config)。

答案的答案多于真正的答案,但工具已经存在(带有社区任务的MSBuild,TeamCity,其他......)这只是将它们串在一起的问题。

答案 5 :(得分:0)

为了明确地知道一段代码来自Subversion存储库的位置,您需要两个信息:

  1. 修订号
  2. 从中提取代码的分支(或标记)
  3. 如果您不同时使用,则无法确定从哪里检出代码。由于我不相信管理员不滥用手动编号方案(只是重复使用相同的版本号,以便客户不会注意到您发送了补丁...),这些信息是构建的一部分并在以后自动检索构建应用程序。

    为了实现这一点,我有一个custom Ant task来检索信息并使其可用作Ant属性。然后,您可以将它们自由地包含在属性文件或Java类中。

    在我的情况下,信息显示为“RELEASE_1.0 / 3454”或“TRUNK / 4565”。

    非技术版本名称在project.version中定义为[build.properties][2]。优点(...)是您可以使用-D选项覆盖此值并重复使用相同的版本号。