是否有Subversion命令显示当前修订号?
之后,svn checkout
我想启动一个脚本并需要一个变量中的修订号。如果有这样的命令,那就太好了svn info get_revision_number
。
Answers:
较新版本的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将其与本地版本进行比较。
svn info
(例如使用subprocess模块),直接在Python(if "Revision" in line: return line.split()[1]
)中读取输出并执行grep / awk步骤通常更容易。
grep
svn info | awk '/Revision/ { print $2; }'
svn info | awk '/^Revision:/ {print $2;}'
LANG=C svn info | grep "Revision" | awk '{print $2}'
还有一个更方便的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
仅包含一个整数。
REV =svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep 'Revision:' | cut -d\ -f2
利用以下内容,利用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”,这不是同一回事,也常常没有用。
svnversion
呢?它具有记录的紧凑输出,不需要复杂的东西来解析它。
刚在修改版本中使用@badcat的答案,使用subprocess.check_output()
:
import subprocess
revision = subprocess.check_output("svn info | awk '/^Revision:/ {print $2}'", shell=True).strip()
我相信如果您想使用python与svn进行交互,也可以安装并使用pysvn。
没有人提及Windows世界SubWCRev,如果脚本以以下形式调用SubWCRev,那么正确使用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$
结果,我每次都有带有可变部分的bat文件-dir的名称-对应于工作副本的元数据
否则,对于旧版本,如果无法识别'--show-item',则可以使用以下命令:
svn log -r HEAD | grep -o -E "^r[0-9]{1,}" | sed 's/r//g'
希望能帮助到你。
cmd.exe
原始问题中有一个标签,表示OP在Windows中,您不能使用grep
和awk
。