1

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

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

当我们标记时,它们都进入同一个存储库(与我们的分支不同)。所以运行 an 是svn ls <PATH_TO_REPO> | tail -n1行不通的。我希望为每个 sprint 名称运行相同的命令并获取该特定 sprint 的最新标签。

例如,svn ls http://devbox/repos/projectname/tags将显示以下内容。最新的标签位于底部(tail -n1 会起作用,但并非总是如此)。

20121210_CHOPPED
20121219_FRIENDS
20121220_MASH
20121220_FRIENDS
20121220_LAWORDER

那么可能存在我们想要获取FRIENDSsprint 的最新标签的情况?

4

3 回答 3

2

与其一味依赖tail的结果,相反@msell代码,我会建议手工逻辑和ls的小改动

svn ls -v ROOT-OF-TAGS

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

于 2012-12-21T17:07:44.177 回答
2

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

然而,这种设计的一大优点是标签具有 Subversion 的全部功能。您可以查看标签的创建者、创建时间和原因。您可以查看标签的来源、修订版本以及可能修改过标签的人。

这意味着如果你所有的标签都直接在 tags 目录下,你可以简单地使用svn log来查看/tags目录中的变化:

$ svn log -v $REPO/tags

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

于 2012-12-21T19:44:18.000 回答
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) 并从中挑选出来。无论您更擅长哪种方法。

于 2012-12-21T05:58:03.370 回答