2009-11-16 25 views
0

我是在一个项目上唯一的开发商和已使用TortoiseSVN相当长一段时间。现在,我想开始在项目I.E中正确使用版本信息。节目主要版本,次要版本,更新,建立/修改日志文件,并在帮助>关于等等跟踪版本,构建,修订,同时TortiseSVN

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

$rev$ is expanded to $Revision: 72 $ 

另一方面,subwcrev几乎使它,但我不能让它写入版本文件的正确修订。在我办

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

换句话说,它会正确地写入当前版本(72),但如果我再提交(现在的版本73),并在以后的阶段检查出修订,该项目实际修订时将72.

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

你在你的公司做什么?

+1

我想问的第一个问题是:“什么样的开发环境?”第二个是:“你有一个构建服务器?” – Murph

+0

VS2008。目前还没有构建服务器,但存储库是由作为另一台服务器上的Windows服务运行的Subversion处理的。 – Canacourse

+0

阅读到目前为止发布的答案和链接后,我意识到我没有正确地使用subwcrev。在我之前检查了一个版本之后,我应该使用subwcrev,这是我正在尝试做的。这里发布的信息非常有帮助 - 谢谢.. – Canacourse

回答

3

首先,你使用SVN标签来追踪你的主要,次要版本等?如果没有,我会从那里开始。我创建了一个标签为一个项目的每一个版本,并简单地将其命名为1.0,1.1,2.0等

其次,你可能想寻找到一个持续集成/构建服务器,如巡航控制。

+0

+ 1.我同意100% –

0

Subwcrev是查找工作副本状态的好工具。我不会使用它来跟踪内部版本号,因为颠覆状态号码的变化非常频繁。这听起来像是如果另一个开发人员开始在这个项目上工作,将所有事情都组织起来会很痛苦。

使用Visual Studio工具来跟踪版本号并用颠覆来标记版本。

0

为了解决你的问题:

我是不是采取了错误的做法呢?

在文件中打印版本号本身很有用,但该版本号仅用于文件。您的项目中的其他文件可能会有不同的版本号,这将使您很难追查到实际进入版本的文件组。

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

否,坚持使用一个颠覆。不要依赖你的开发工具来告诉你你的文件是什么版本,而是使用版本控制系统。

你在你的组织中做什么?

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

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

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

0

好的,会添加一部分答案。

在版本号方面(不必介意机制),Subversion版本号非常有用 - 您可能想要控制Major和Minor,但是使用版本号(3rd或4th元素)很好。更重要的是,即使你没有在版本中专门标记库,你仍然有办法以正确的状态访问代码。

这给我们带来了机械 - 这会根据语言而有所不同。在C#程序集中,您想修改AssemblyInfo.cs以获得所需的值,但在其他语言中,我不确定关闭头部(将根据有用的注释进行编辑!)。如果你能够做到这一点,你将能够识别部署项目中所有程序集的代码。

所以......你如何在发布版本中获得你的AssemblyInfo.cs或同等版本?通过一个构建脚本(MSBuild或其他)为你做 - 正确地获取构建文件可能是痛苦的(以前我已经完成了它),特别是当你开始添加并发症如拉动修订号但是有其他可以提供帮助的工具,这让我非常期待构建服务器。

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

答案的指针比真实答案要多,但工具已经存在(MSBuild与社区任务,TeamCity,其他......)只是将它们串联在一起的问题。

0

为了明确地知道一段代码是走出Subversion版本库,你需要两个信息:

  1. 版本号
  2. 其中代码被拉到分行(或标签)从

如果你没有这两个,你永远不能确定你从哪里检出了代码。由于我不相信管理者不会滥用手动编号方案(只是重复使用相同的版本号,以便客户不会注意到您发送了补丁...),那些信息是构建的一部分,并在构建应用程序。

为了达到这个目的,我有一个custom Ant task,它检索信息并将其作为Ant属性提供。然后,您可以将它们包含到属性文件或Java类中。

我的信息显示为“RELEASE_1.0/3454”或“TRUNK/4565”。

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