Cha*_*ffy 31
让构建过程调用svnversion命令,并将其输出嵌入到生成的{source | binaries}中.这不仅会给出当前版本(这里有许多其他示例),但是它的输出字符串还将告诉构建是在混合树还是树中完成,这与所讨论的版本号不完全匹配(即一棵有局部变化的树.
使用标准树:
$ svnversion
3846
Run Code Online (Sandbox Code Playgroud)
使用修改后的树:
$ echo 'foo' >> project-ext.dtd
$ svnversion
3846M
Run Code Online (Sandbox Code Playgroud)
使用混合修订,修改后的树:
$ (cd doc; svn up >/dev/null 2>/dev/null)
$ svnversion
3846:4182M
Run Code Online (Sandbox Code Playgroud)
Sam*_*kes 19
该svnversion
命令是执行此操作的正确方法.如果您的工作副本混合,它会输出您的整个工作副本所在的修订号,或者输出一系列修订版(例如,某些目录是最新的,而某些目录不是).它还将指示工作副本是否具有本地修改.例如,在一个相当不干净的工作目录中:
$ svnversion
662:738M
Run Code Online (Sandbox Code Playgroud)
$ Revision $关键字不能达到您想要的效果:它仅在包含文件时才会更改.Subversion书提供了更多细节."svn info"命令也不能执行您想要的操作,因为它只会告诉您当前目录的状态,而忽略任何子目录的状态.在与前一个示例相同的工作树中,我有一些比我所在的目录更新的子目录,但是"svn info"没有注意到:
$ svn info
... snip ...
Revision: 662
Run Code Online (Sandbox Code Playgroud)
将svnversion合并到构建过程中很容易,因此每个构建都以一些运行时可访问的形式获取修订号.例如,对于Java项目,我让makefile将svnversion输出转储到.properties文件中.
Mic*_*tum 14
svn info <Repository-URL>
Run Code Online (Sandbox Code Playgroud)
要么
svn info --xml <Repository-URL>
Run Code Online (Sandbox Code Playgroud)
然后看看结果.对于xml,对存储库的修订版本的parse/info/entry/@ revision(本例中为151)或/ info/entry/commit/@对于此路径的最后一次提交的修订版本(133,在使用时很有用)标签):
<?xml version="1.0"?>
<info>
<entry
kind="dir"
path="cmdtools"
revision="151">
<url>http://myserver/svn/stumde/cmdtools</url>
<repository>
<root>http://myserver/svn/stumde</root>
<uuid>a148ce7d-da11-c240-b47f-6810ff02934c</uuid>
</repository>
<commit
revision="133">
<author>mstum</author>
<date>2008-07-12T17:09:08.315246Z</date>
</commit>
</entry>
</info>
Run Code Online (Sandbox Code Playgroud)
我为自己编写了一个工具(cmdnetsvnrev,包含源代码),它取代了AssemblyInfo.cs文件中的Revision.但它仅限于此目的,但通常svn信息然后处理是要走的路.
Bob*_*ler 12
将svn:keywords添加到源文件的SVN属性中:
svn:keywords Revision
Run Code Online (Sandbox Code Playgroud)
然后在源文件中包含:
private const string REVISION = "$Revision$";
Run Code Online (Sandbox Code Playgroud)
修订版将在下次提交时使用修订号更新(例如)"$Revision: 4455$"
.您可以解析此字符串以仅提取修订号.
如果你有陆龟SVN,你可以使用SubWCRev.exe
创建一个名为的文件:
RevisionInfo.tmpl
SvnRevision = $WCREV$;
Run Code Online (Sandbox Code Playgroud)
然后执行以下命令:
SubWCRev.exe . RevisionInfo.tmpl RevisionInfo.txt
Run Code Online (Sandbox Code Playgroud)
它将使用您的修订号创建一个ReivisonInfo.txt文件,如下所示:
SvnRevision = 5000;
Run Code Online (Sandbox Code Playgroud)
但是,您可以使用所需的任何源文件,而不是使用.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
Run Code Online (Sandbox Code Playgroud)
使用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;
});
}
Run Code Online (Sandbox Code Playgroud)