使用Bash从Subversion获取版本号

16
我想编写一个基于bash的shell脚本,从svn仓库中部署网站。当我部署网站时,我将导出的目录命名为website_name-Rrevision_number。我希望这个bash脚本可以自动重命名导出的目录,因此它需要从导出的目录中学习当前的修订号。如果我运行

$> svn info http://svn-repository/trunk

Path: trunk
URL: http://svn-repository/mystery/trunk
Repository Root: http://svn-repository/mystery
Repository UUID: b809e6ab-5153-0410-a985-ac99030dffe6
Revision: 624
Node Kind: directory
Last Changed Author: author
Last Changed Rev: 624
Last Changed Date: 2010-02-19 15:48:16 -0500 (Fri, 19 Feb 2010)

我想要的是字符串 Revision: 后面的数字,我该如何将其存入一个 bash 变量中?需要对 svn info 命令的输出进行字符串解析吗?

9个回答

32

使用svnversion命令,它会输出最小化的额外信息以及版本号/范围。


1
这似乎只适用于本地工作副本。当我尝试使用远程URL(如原始问题中所述)时,会出现错误提示说它不存在。请参阅https://dev59.com/uEbRa4cB1Zd3GeqP384f。 - JeffB
这是服务器端的代码,不是客户端的。 - Sandburg

26
REVISION=`svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //'`

这很简单,但有些不够优雅。


12
更简洁地说: REVISION=svn info http://svn-repository/trunk | sed -ne 's/^Revision: //p' - Nathan Kidd
是的,我总是忘记使用sed的-n选项。 - Paul Tomblin
这不仅对于修订号有用,我刚刚使用它来获取存储库的 URL。 - Andres Jaan Tack
3
REVISION=`svn info http://svn-repository/trunk | sed -ne 's/^Revision: //p'`\n- 你需要用反斜杠转义文字中的反引号。 - l0b0
在执行此命令之前,请记得设置输出语言:LANG=C LC_MESSAGES=C - Nux

6

解析“Revision”字符串在不同地区可能会存在问题。例如,在我的地区,它的格式是:

...
Wersja: 6583
Rodzaj obiektu: katalog
Zlecenie: normalne
Autor ostatniej zmiany: ...
Ostatnio zmieniona wersja: 6583
Data ostatniej zmiany: 2013-03-21 11:33:44 +0100 (czw)
...

你不想解析那个 :)

因此,最好的方法是使用oefe建议的 "svnversion"。这是为此目的提到的工具。


5

不使用sed、grep或awk:

REVISION=`svn info --show-item=revision --no-newline`

REVISION=svn info --show-item=revision --no-newline -r HEAD 用于获取服务器上的最新版本。 - AndreyP
请注意,这是您签出的修订版本。当您签出主线时,可能会包括其他分支的版本。因此,这不是您签出路径的修订版本。 - Nux

5
只需使用一个awk命令,这样更简单。
var=$(svn info http://svn-repository/trunk | awk '/^Revision:/{print $2}')

使用 awk 进行行内搜索... 火箭筒式 - Sandburg

1
svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '

输出版本号 在您的shell脚本中使用反引号执行此操作,并将结果分配给变量:

REVISION=`svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '`

0

这将给你头部修订号码

svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"

egrep 是扩展的 grep。


0
REVISION=$(svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //p')
echo $REVISION

0

可能有十几种不同的方法来实现这个,但我会选择一些简单的东西,比如:

revision="$(svn info http://svn-repository/trunk | grep "^Revision:" | cut -c 11-)"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接