有没有一种方法来确定颠覆中的最新标签?
对于我已部署的应用程序,客户端需要有另一台服务器,以便在活动服务器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>&-
这将简单地抑制错误消息。 我查了一些邮件列表,显然没有人知道为什么会出现这个错误。