我正在设置一个持续集成作业,该作业修补外部库并在本地发布修补版本。
但是,外部库使用TRUNK进行开发,我希望我的CI作业能够自动选择最新的发布标签进行结帐。
SVN是否具有该功能?
(bash Shell Scripts可以)
答案 0 :(得分:12)
嗯......以下内容如何:
svn log URL/tags --limit 1
将打印出最后一个标签。
答案 1 :(得分:10)
如果找不到更好的东西,这将有效:
svn log -v <tagsurl> | awk '/^ A/ { print $2 }' | grep -v RC | head -1
(grep -v RC部分剥离候选人)
答案 2 :(得分:2)
这是一个更通用的解决方案。有时我们不仅需要最新的标签,还需要尊重模式的最新标签:
last_tag=$(svn ls http://svn_rep/XXX/tags/ | egrep '^MySpecialProject_V([0-9].)+[0-9]+[a-zA-Z_0-9]*' | sort --reverse | head -1 2>&1)
这里我们将获得项目的最新标签,其名称以 MySpecialProject_V 开头。 如果我们有这些标签:
Koko_V3.1.0.0
MySpecialProject_V1.1.0.0
MySpecialProject_V1.2.0.0
MySpecialProject_V2.1.0.0
MySpecialProject_V2.2.0.0
结果:
echo $last_tag
......将是:
MySpecialProject_V2.2.0.0
我希望这会对某人有所帮助。
答案 3 :(得分:0)
对于Windows,您可以使用powershell:
$path = (([Xml] (svn log --xml $Url --verbose --username $Username --password $Password)).Log.LogEntry.Paths.Path |
? { $_.action -eq 'A' -and $_.kind -eq 'dir' -and $_.InnerText -like '*tags*'} |
Select -Property @(
@{N='date'; E={$_.ParentNode.ParentNode.Date}},
@{N='path'; E={$_.InnerText}} )|
Sort Date -Descending |
Select -First 1).path
$ url是你标记的网址
答案 4 :(得分:-3)
Svn没有标签的定义。我猜你的意思是 revision 。符号修订 HEAD 指向树的最新版本。
e.g。
svn export -rHEAD ...