从Subversion获取最新的标签

有没有一种方法来确定颠覆中的最新标签?

对于我已部署的应用程序,客户端需要有另一台服务器,以便在活动服务器closures的情况下可以访问它们。 已经有一个自动化系统将数据库复制到备份服务器。 应用程序代码位于Subversion版本库中,我想编写一个脚本,将代码从Subversion自动复制到备份服务器。 我有一个脚本,但是,我需要手动告诉它要检索的标签。 有没有办法使这完全自动化。

服务器正在运行Redhat。

如果您的标签在sorting时按顺序列出,则可以沿着以下几行获取最新的名称:

svn ls .../path/to/repo/tags | tail -n 1 

如果你的项目的标签结构不那么严格,那么svn ls的结果将需要传递-v (verbose)选项,并根据输出中的date进行sorting。

这个shell命令输出tags目录中最近创build的标签。

 svn log -v --limit 1 tagsURL | awk '/^ A/ { print $2 }' 

如果您正在从签出的存储库中调用该命令,则可以使用相对的svnpath令牌^

 svn log -v --limit 1 ^/tags | awk '/^ A/ { print $2 }' 

我的理解是,标签只是您使用“svn copy”命令创build的主分支的副本。 所以,如果你这样做,是不是给这些标签版本号? 只要抓住最高的数字?

也许你的意思是回购的最新版本号? 在这种情况下,它只会是这样的:

 svn info https://www.myDomain.com/svn/myRepo | grep Revision | awk '{print $2}' 

或者,也许你想要:

 svn ls https://www.myDomain.com/svn/myRepo/tags 

然后你可以在每个目录上做一个svn信息,而最后修改版本号最高的是最新的标签。

  svn list --xml $REPO/tags | grep 'revision="' | cut -d '"' -f2 | tr -d ' ' | sort -bnu | tail -1 

如果你的标签不能自然地sorting(如果你遵循语义版本控制,1.1.0.0会在1.1.0之后列出,而不是在svn ls输出1.9.0之后),你可以使用保证的sorting版本ID您的标签目录:

  svn ls -v --config-dir=/root/.subversion https://svn/project/tags | sort -n | awk '{ field = $NF }; END{ print field }' 1.10.0 

如果你有好的版本号

 svn ls https://www.myDomain.com/svn/myRepo | sort -V | tail -n 1 

我喜欢Jim Huang的解决scheme,就像一个魅力。 如果你得到错误“Broken Pipe”(我在Ubuntu和Mac上得到它),试着围绕如下的命令:

 exec 6>&2 2>/dev/null; svn log -v tagsURL | awk '/^ A/ { print $2 }' | head -1; exec 2>&6 6>&- 

这将简单地抑制错误消息。 我查了一些邮件列表,显然没有人知道为什么会出现这个错误。