我想用最新的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
命令是你的朋友.无需解析输出,无需先更新,只需完成工作.
单程.查看代码时,请查看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)
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}'
这个问题重复一遍.当我在那里发布时,svnversion
命令是你的朋友.无需解析输出,无需先更新,只需完成工作.