当我们标记时,我们使用以下格式。 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
冲刺的最新标签的实例?
答案 0 :(得分:2)
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)并从那里选择它。无论你哪种方法更擅长。