2011-03-09 54 views
9

我正在设置一个连续集成作业,用于修补外部库并在本地发布修补版本。查找最新的SVN标签

但是,外部库使用TRUNK进行开发,并且我希望自己的CI作业能够自动选择结帐的最新版本标签。

SVN是否具有该功能?

(bash外壳脚本是OK)

+0

刚发现这个类似的问题:http://serverfault.com/questions/68139/get-latest-tag-from-subversion – 2011-03-09 10:32:11

回答

11

嗯.. 。关于以下内容:

svn log URL/tags --limit 1 

将打印出最后一个标签。

+0

很好,谢谢(+1) – 2011-03-09 12:20:34

-3

SVN没有标签的定义。我假设你的意思是修订。符号修订版HEAD指向树的最新版本。

例如 svn export -rHEAD ...

+0

我知道没有一个标签的真正定义,但我的意思是伪标签thingies在'trunk'旁边的'tags'中 – 2011-03-09 10:42:17

9

这将工作,如果没有更好的可以发现:

svn log -v <tagsurl> | awk '/^ A/ { print $2 }' | grep -v RC | head -1 

(grep的-v RC部分条候选发布版)

来源:this answer to a previous question

+2

这对我更好,因为我需要标签URL而不是信息。 – Bart 2012-06-13 14:45:27

+0

使用--limit 1和log -v以节省时间以获取最新的标签。 'svn log -v --limit 1 | awk'/^A/{print $ 2}'' – 2017-05-05 03:09:01

0

for 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 

其中$链接你的标签

2

的URL这是一个更通用的解决方案。有时候,我们不仅需要最新的标签,但最新的标签,它尊重这样一个规律:

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 

我希望这会帮助别人。