2012-12-21 71 views
1

当我们标记时,我们使用以下格式。 YYYYMMDD_SPRINTNAME从SVN中检索最新的Subversion标签的最简单方法是什么?

我们有多个环境,每个环境只能安装特定的sprint(电视节目名称)。例如,我们的UAT环境正在关闭FRIENDS代码库。我们的质量保证环境正在使用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 sprint的最新标签?

+1

刚刚'svn ls | grep'_FRIENDS'|尾巴-n1'? – msell

+0

WTF是我的想法,这工作。无论出于何种原因,它在我的笔记本电脑上无法正常工作,但似乎在我的桌面上工作正常去搞清楚。 – luckytaxi

回答

1

也许使用SVN的日志会给你想要的东西,例如:

$ 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工具来挑选出自己冲刺的名字,或在XML格式的日志输出读取(SVN日志--xml)并从那里选择它。无论你更擅长哪种方法。

2

而不是一味依赖尾巴,相反的结果@msell代码,我会建议手工制作的逻辑,在这种情况下,每个标签的第一列LS小的变化

svn ls -v ROOT-OF-TAGS

将修改创建和grep最高版本后可以检测到基于号码,而不是订单

2

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

然而,这种设计的优点之一是标签具有Subversion的全部附加功能。你可以看到谁创建了标签,何时以及为什么。您可以看到标签来自哪里,哪些版本以及谁可能修改了它。

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

$ svn log -v $REPO/tags 

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

相关问题