找到最新的SVN标签

时间:2011-03-09 10:15:10

标签: svn version-control continuous-integration

我正在设置一个持续集成作业,该作业修补外部库并在本地发布修补版本。

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

SVN是否具有该功能?

(bash Shell Scripts可以)

5 个答案:

答案 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部分剥离候选人)

来源: this answer to a previous question

答案 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 ...