当前的Subversion修订版命令

时间:2010-01-02 12:55:29

标签: svn

是否有Subversion命令显示当前的修订号?

svn checkout之后我想启动一个脚本并需要变量中的修订号。如果有像svn info get_revision_number这样的命令会很棒。

10 个答案:

答案 0 :(得分:95)

较新版本的svn支持--show-item参数:

svn info --show-item revision

有关本地工作副本的修订号,请使用:

svn info --show-item last-changed-revision

您可以使用os.system()执行如下命令行:

svn info | grep "Revision" | awk '{print $2}'

我在我的夜间构建脚本中这样做。

同样在某些平台上有一个svnversion命令,但我认为我有理由不使用它。啊,对。您无法从远程存储库获取修订版号,以使用svnversion将其与本地版本进行比较。

答案 1 :(得分:24)

还有一个更方便的(对于某些)svnversion命令。

输出可能是单个修订号或类似的内容(来自-h):

  4123:4168     mixed revision working copy
  4168M         modified working copy
  4123S         switched working copy
  4123:4168MS   mixed revision, modified, switched working copy

我使用这个python代码片段来提取修订信息:

import re
import subprocess

p = subprocess.Popen(["svnversion"], stdout = subprocess.PIPE, 
    stderr = subprocess.PIPE)
p.wait()
m = re.match(r'(|\d+M?S?):?(\d+)(M?)S?', p.stdout.read())
rev = int(m.group(2))
if m.group(3) == 'M':
    rev += 1

答案 2 :(得分:5)

  1. 首先,svn状态有修订号,你可以从那里阅读。

  2. 此外,您存储在SVN中的每个文件都可以存储修订号本身 - 将$Rev$关键字添加到您的文件并运行propset:svn propset svn:keywords "Revision" file

  3. 最后,修订号也在.svn/entries档,第四行

  4. 现在每次签出该文件时,它都会自行修改。

答案 3 :(得分:4)

REV = svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep 'Revision:' | cut -d\ -f2

答案 4 :(得分:2)

我相信

svn info就是你想要的。

如果您只是想要修改,也许您可​​以执行以下操作:

svn info | grep "Revision:"

答案 5 :(得分:2)

使用类似下面的内容,利用subversion的XML输出:

# parse rev from popen "svn info --xml"
dom = xml.dom.minidom.parse(os.popen('svn info --xml'))
entry = dom.getElementsByTagName('entry')[0]
revision = entry.getAttribute('revision')

另请注意,根据您的需要,<commit revision=...>条目可能更符合您的要求。这给出了“Last Changed Rev”,它不会改变,直到当前树中的代码实际发生变化,而不是“Revision”(上面给出的内容),随着存储库中的任何内容发生变化(甚至分支)并且你做了一个“svn up”,这不是一回事,也常常是有用的。

答案 6 :(得分:2)

使用subprocess.check_output()

在修改后的版本中使用了@ badcat的答案
import subprocess
revision = subprocess.check_output("svn info | awk '/^Revision:/ {print $2}'", shell=True).strip()

如果你想使用python与svn接口,我相信你也可以安装和使用pysvn

答案 7 :(得分:1)

如果脚本以SubWCRev WC_PATH TPL-FILE READY-FILE形式调用SubWCRev

,那么正确使用的Windows世界SubWCRev可以自动将所需数据替换为所需位置。

我的提交后挂钩示例(部分)

SubWCRev.exe CustomLocations Builder.tpl  z:\Builder.bat
...
call z:\Builder.bat

我的Builder.tpl在哪里

svn.exe export trunk z:\trunk$WCDATE=%Y%m%d$-r$WCREV$

结果,我每次都有bat-file和变量part-name of dir - 对应于Working Copy的元数据

答案 8 :(得分:0)

我想我必须做svn信息然后用“Revision:xxxxxx”中的字符串操作检索数字 如果有一个只返回数字的命令,那就太好了。)

答案 9 :(得分:0)

否则对于旧版本,如果无法识别'--show-item',则可以使用以下命令:

svn log -r HEAD | grep -o -E "^r[0-9]{1,}" | sed 's/r//g'

希望有帮助。