当前位置:  开发笔记 > 运维 > 正文

如何确定以目录为根的最新SVN修订版号?

如何解决《如何确定以目录为根的最新SVN修订版号?》经验,为你挑选了3个好方法。

我想用最新的SVN版本号开始标记我已部署的二进制文件.

但是,因为SVN是基于文件而不是基于目录/项目的,所以我需要扫描所有目录和子目录的文件,以确定最高版本号.

svn info在root上使用不起作用(它只报告该目录的版本,而不是子目录中的文件):

我想知道是否有使用该svn命令执行此操作的快捷方式.否则,任何人都可以建议一个网络效率的简单脚本(我更喜欢它根本没有点击远程服务器)?

我也明白,一个可供选择的方法是保持一个版本的文件svn:keywords.这工作(我已经在其他项目上使用过它),但我厌倦了确保文件是脏的并处理不可避免的合并冲突.

回答svn up在调用svn info根目录之前看到我的问题在于没有做正确的事情:

$ svn info
Path: .
...
Last Changed Author: fak
Last Changed Rev: 713
Last Changed Date: 2008-08-29 00:40:53 +0300 (Fri, 29 Aug 2008)

$ svn up
At revision 721.

$ svn info
Path: .
...
Revision: 721
Last Changed Author: reuben
Last Changed Rev: 721
Last Changed Date: 2008-08-31 22:55:22 +0300 (Sun, 31 Aug 2008)

Charles Mill.. 23

单程.查看代码时,请查看svn输出的最后一行:

$ svn up
...stuff...
Updated to revision 66593.

更直接的方式:

$ svn info
Path: .
URL: https://svn.example.com/svn/myproject/trunk
Repository Root: https://svn.example.com/svn/
Repository UUID: d2a7a951-c712-0410-832a-9abccabd3052
Revision: 66593
Node Kind: directory
Schedule: normal
Last Changed Author: bnguyen
Last Changed Rev: 66591
Last Changed Date: 2008-09-11 18:25:27 +1000 (Thu, 11 Sep 2008)


hasseg.. 22

svnversion 似乎是最干净的方法:

svnversion -c /path/to/your-projects-local-working-copy/. | sed -e 's/[MS]//g' -e 's/^[[:digit:]]*://'

上面的命令将清除输出中的任何M和S字母(表示本地修改或切换),以及较小的修订号,以防svnversion返回范围而不是仅一个修订号(有关详细信息,请参阅文档).如果您不想过滤输出,请取出管道和该sed命令的一部分.

如果要使用svn info,则需要使用"recursive"(-R)参数来获取所有子目录中的信息.由于输出变为长列表,您需要进行一些过滤以从最高的所有那些中获取最后更改的修订版号:

svn info -R /path/to/your-projects-local-working-copy/. | awk '/^Last Changed Rev:/ {print $NF}' | sort -n | tail -n 1

该命令的作用是它包含所有包含字符串的行"Last Changed Rev",然后从除最后一个字段(即修订号)之外的每行中删除所有行,然后以数字方式对这些行进行排序并删除除最后一行之外的所有行,只有最高版本号.例如,如果您正在运行Windows,我相信您也可以在PowerShell中轻松完成此操作.

需要明确的是:上述方法可以为您获取本地工作副本所代表的repo中的路径的递归最后更改版本号,而无需访问服务器.因此,如果有人在此路径中将某些内容更新到最后一个存储库服务器之后svn update,则不会在此输出中反映出来.

如果您想要的是服务器上此路径的最后更改版本,您可以执行以下操作:

svn info /path/to/your-projects-local-working-copy/.@HEAD | awk '/^Last Changed Rev:/ {print $NF}'


Sam Stokes.. 7

这个问题重复一遍.当我在那里发布时,svnversion命令是你的朋友.无需解析输出,无需先更新,只需完成工作.



1> Charles Mill..:

单程.查看代码时,请查看svn输出的最后一行:

$ svn up
...stuff...
Updated to revision 66593.

更直接的方式:

$ svn info
Path: .
URL: https://svn.example.com/svn/myproject/trunk
Repository Root: https://svn.example.com/svn/
Repository UUID: d2a7a951-c712-0410-832a-9abccabd3052
Revision: 66593
Node Kind: directory
Schedule: normal
Last Changed Author: bnguyen
Last Changed Rev: 66591
Last Changed Date: 2008-09-11 18:25:27 +1000 (Thu, 11 Sep 2008)



2> hasseg..:

svnversion 似乎是最干净的方法:

svnversion -c /path/to/your-projects-local-working-copy/. | sed -e 's/[MS]//g' -e 's/^[[:digit:]]*://'

上面的命令将清除输出中的任何M和S字母(表示本地修改或切换),以及较小的修订号,以防svnversion返回范围而不是仅一个修订号(有关详细信息,请参阅文档).如果您不想过滤输出,请取出管道和该sed命令的一部分.

如果要使用svn info,则需要使用"recursive"(-R)参数来获取所有子目录中的信息.由于输出变为长列表,您需要进行一些过滤以从最高的所有那些中获取最后更改的修订版号:

svn info -R /path/to/your-projects-local-working-copy/. | awk '/^Last Changed Rev:/ {print $NF}' | sort -n | tail -n 1

该命令的作用是它包含所有包含字符串的行"Last Changed Rev",然后从除最后一个字段(即修订号)之外的每行中删除所有行,然后以数字方式对这些行进行排序并删除除最后一行之外的所有行,只有最高版本号.例如,如果您正在运行Windows,我相信您也可以在PowerShell中轻松完成此操作.

需要明确的是:上述方法可以为您获取本地工作副本所代表的repo中的路径的递归最后更改版本号,而无需访问服务器.因此,如果有人在此路径中将某些内容更新到最后一个存储库服务器之后svn update,则不会在此输出中反映出来.

如果您想要的是服务器上此路径的最后更改版本,您可以执行以下操作:

svn info /path/to/your-projects-local-working-copy/.@HEAD | awk '/^Last Changed Rev:/ {print $NF}'



3> Sam Stokes..:

这个问题重复一遍.当我在那里发布时,svnversion命令是你的朋友.无需解析输出,无需先更新,只需完成工作.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有