如何在subversion中自动导入最新的构建/修订号?
我们的目标是让您的网页页脚上的数字显示为SO.
让构建过程调用svnversion命令,并将其输出嵌入到生成的{source | binaries}中.这不仅会给出当前版本(这里有许多其他示例),但是它的输出字符串还将告诉构建是在混合树还是树中完成,这与所讨论的版本号不完全匹配(即一棵有局部变化的树.
使用标准树:
$ svnversion 3846
使用修改后的树:
$ echo 'foo' >> project-ext.dtd $ svnversion 3846M
使用混合修订,修改后的树:
$ (cd doc; svn up >/dev/null 2>/dev/null) $ svnversion 3846:4182M
该svnversion
命令是执行此操作的正确方法.如果您的工作副本混合,它会输出您的整个工作副本所在的修订号,或者输出一系列修订版(例如,某些目录是最新的,而某些目录不是).它还将指示工作副本是否具有本地修改.例如,在一个相当不干净的工作目录中:
$ svnversion 662:738M
$ Revision $关键字不能达到您想要的效果:它仅在包含文件时才会更改.Subversion书提供了更多细节."svn info"命令也不能执行您想要的操作,因为它只会告诉您当前目录的状态,而忽略任何子目录的状态.在与前一个示例相同的工作树中,我有一些比我所在的目录更新的子目录,但是"svn info"没有注意到:
$ svn info ... snip ... Revision: 662
将svnversion合并到构建过程中很容易,因此每个构建都以一些运行时可访问的形式获取修订号.例如,对于Java项目,我让makefile将svnversion输出转储到.properties文件中.
svn info
要么
svn info --xml
然后看看结果.对于xml,对存储库的修订版本的parse/info/entry/@ revision(本例中为151)或/ info/entry/commit/@对于此路径的最后一次提交的修订版本(133,在使用时很有用)标签):
http://myserver/svn/stumde/cmdtools http://myserver/svn/stumde a148ce7d-da11-c240-b47f-6810ff02934c mstum 2008-07-12T17:09:08.315246Z
我为自己编写了一个工具(cmdnetsvnrev,包含源代码),它取代了AssemblyInfo.cs文件中的Revision.但它仅限于此目的,但通常svn信息然后处理是要走的路.
将svn:keywords添加到源文件的SVN属性中:
svn:keywords Revision
然后在源文件中包含:
private const string REVISION = "$Revision$";
修订版将在下次提交时使用修订号更新(例如)"$Revision: 4455$"
.您可以解析此字符串以仅提取修订号.
如果你有陆龟SVN,你可以使用SubWCRev.exe
创建一个名为的文件:
RevisionInfo.tmpl
SvnRevision = $WCREV$;
然后执行以下命令:
SubWCRev.exe . RevisionInfo.tmpl RevisionInfo.txt
它将使用您的修订号创建一个ReivisonInfo.txt文件,如下所示:
SvnRevision = 5000;
但是,您可以使用所需的任何源文件,而不是使用.txt,并且可以访问源代码中的reivsion编号.
您没有说明您正在使用的编程语言/框架.以下是使用PySVN在Python中执行此操作的方法
import pysvn repo = REPOSITORY_LOCATION rev = pysvn.Revision( pysvn.opt_revision_kind.head ) client = pysvn.Client() info = client.info2(repo,revision=rev,recurse=False) revno = info[0][1].rev.number # revision number as an integer
使用c#和SharpSvn(来自http://sharpsvn.net)代码将是:
//using SharpSvn; long revision = -1; using(SvnClient client = new SvnClient()) { client.Info(path, delegate(object sender, SvnInfoEventArgs e) { revision = e.Revision; }); }