有没有Subversion命令可以显示当前修订版本号?
svn checkout
之后,我想启动一个脚本并需要将修订版本号存入一个变量中。如果有类似 svn info get_revision_number
的命令将非常方便。
有没有Subversion命令可以显示当前修订版本号?
svn checkout
之后,我想启动一个脚本并需要将修订版本号存入一个变量中。如果有类似 svn info get_revision_number
的命令将非常方便。
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无法从远程存储库获取版本号以将其与本地存储库进行比较。
还有一个更为方便(对某些人而言)的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
首先,svn状态包含修订版本号,您可以从中读取。
此外,您在SVN中存储的每个文件都可以在自身中存储修订版本号--将$Rev$
关键字添加到您的文件中,并运行propset:svn propset svn:keywords "Revision" file
最后,修订版本号还在.svn/entries
文件的第四行中。
现在,每次您检出该文件,它都会在自身中具有修订版本。
svn, version 1.11.0 (r1845130) compiled Oct 31 2018, 12:40:42 on x86_64-unknown-cygwin
上运行:.svn/entries
只包含一个整数。 - badamsREV=svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep 'Revision:' | cut -d\ -f2
版本号=svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep '版本:' | cut -d\ -f2
有关Windows世界的SubWCRev很少被提及。如果正确使用,可以在脚本以SubWCRev WC_PATH TPL-FILE READY-FILE
的形式调用时自动将所需数据替换到所需位置。
这是我提交后钩子的示例(部分内容)
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$
svn info
命令。如果你只需要版本号,也许可以尝试以下命令:svn info | grep "Revision:"
使用类似以下的方式,利用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=...>
条目可能更符合您的需求。它提供了“最后更改版本”,该版本仅在当前代码树中的代码实际更改时才会更改,而不是“版本”(上面给出的内容),后者将在任何时候更改存储库中的任何内容(甚至是分支),当您执行“svn up”时,这并非相同的事情,也不经常有用。svnversion
呢?它具有文档化的紧凑输出,不需要这么复杂的解析。 - Julien Guertault我刚刚使用了@badcat的答案并进行了修改,使用了subprocess.check_output()
:
import subprocess
revision = subprocess.check_output("svn info | awk '/^Revision:/ {print $2}'", shell=True).strip()
如果您想使用Python与SVN进行交互,我相信您也可以安装并使用pysvn。
svn log -r HEAD | grep -o -E "^r[0-9]{1,}" | sed 's/r//g'
我认为我需要执行svn info,然后通过字符串操作从"Revision: xxxxxx"中检索出编号。如果有一个返回只有数字的命令,那就太好了:)
cmd.exe
标签,这意味着 OP 在 Windows 系统中,无法使用grep
和awk
。 - iamamacsvn info
(例如使用subprocess模块),读取输出并直接在Python中执行grep/awk步骤(if“Revision”in line:return line.split()[1]
)通常比尝试在Python中编写bash命令更简单和容易。 - Roger Pategrep
:svn info | awk '/Revision/ { print $2; }'
(注:该命令用于从 SVN 仓库获取版本号,将其修改为不需要使用grep
命令的形式。)去除grep
:通过使用awk
命令,匹配包含 "Revision" 的行,并打印第二个字段。命令如下:svn info | awk '/Revision/ {print $2}'
。 - just somebodysvn info | awk '/^Revision:/ {print $2;}'
- ndimLANG=C svn info | grep "Revision" | awk '{print $2}'
。 - Florent