从SVN检索最新的subversion标签最简单的方法是什么?

时间:2012-12-21 00:44:28

标签: svn version-control

当我们标记时,我们使用以下格式。 YYYYMMDD_SPRINTNAME

我们有多个环境,每个环境应该只安装特定的sprint(电视节目名称)。例如,我们的UAT环境正在处理FRIENDS代码库。我们的QA环境正在处理LAWORDER代码库。

当我们标记时,它们都进入同一个存储库(与我们的分支不同)。因此,运行svn ls <PATH_TO_REPO> | tail -n1将无效。我想要发生的是为每个sprint名称运行相同的命令并获取该特定sprint的最新标记。

例如,svn ls http://devbox/repos/projectname/tags将显示以下内容。最新的标签位于底部(尾部-n1可以工作但不总是)。

20121210_CHOPPED
20121219_FRIENDS
20121220_MASH
20121220_FRIENDS
20121220_LAWORDER

所以可能有一个我们想要获取FRIENDS冲刺的最新标签的实例?

3 个答案:

答案 0 :(得分:2)

而不是盲目地依赖尾巴的结果,与@msell代码相反,我会建议手工制作的逻辑和ls的小变化

svn ls -v ROOT-OF-TAGS

在这种情况下,每个标签的第一列将是创建的修订版,并且可以根据数字检测grep最高版本,而不是

答案 1 :(得分:2)

Subversion标签就像分支一样只是目录。这种设计存在一些争议,因为标签可以很容易地修改(就像分支和目录一样),而不需要太多注意。我做的第一件事就是创建一个预提交钩子,允许人们创建一个标签,但防止标签被修改。

然而,这个设计的一个好处是标签具有附加到它们的Subversion的全部功能。您可以看到谁创建了标记,时间和原因。您可以看到标记的位置,修订版本以及修改者的位置。

这意味着如果您的所有代码都直接位于代码目录下,则只需使用svn log查看/tags目录中的更改:

$ svn log -v $REPO/tags

第一个条目将是最后创建的标记。如果你使用Python或Perl,你可以拥有一个可以在PC和(U | li)nix系统上运行的脚本,它将返回最后创建的标签。

答案 2 :(得分:1)

也许使用svn log会给你你想要的东西,例如:

$ svn log http://some/repos/tags
------------------------------------------------------------------------
r4443 | joe | 2012-12-18 15:35:27 -0800 (Tue, 18 Dec 2012) | 1 line
Changed paths:
   A /tags/release-2.2.3.1-ga (from /branches/release-2.2:4442)

------------------------------------------------------------------------
r4345 | joe | 2012-11-21 17:40:11 -0800 (Wed, 21 Nov 2012) | 1 line
Changed paths:
   A /tags/release-1.7.4.1-ga (from /branches/release-1.7.4:3872)

Create tag for 1.1.4.1

...

因此,你可以使用一些shell工具来挑选你的sprint名称,或者读入XML格式的日志输出(svn log --xml)并从那里选择它。无论你哪种方法更擅长。