将当前的svn版本写入文本文件

我有一个铁路网站。 我想,在mongrel重新启动时,将当前的svn版本写入public / version.txt,以便我可以将其放入页眉中的注释中。

问题是获得当前本地版本的svn – 我有点困惑。

例如,如果我对一段时间没有更新的文件进行svn更新,我会得到“修订版4571”。 但是,如果我做svn信息,我得到

路径:。
url: http://my.url/trunk
存储库根目录: http://my.url/lesson_planner
存储库UUID:#########
修订版:4570
节点种类:目录
时间表:正常
最后更改作者:最大
Last Changed Rev:4570
最后更改日期:2009-11-30 17:14:52 +0000(星期一,2009年11月30日)

请注意,这表示修订版4570,比上一个命令低1。

任何人都可以直截了当地告诉我如何简单地获取当前版本号?

谢谢,最大

Subversion附带了一个完成此操作的命令: SVNVERSION.EXE 。

用法:svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]

为工作副本路径WC_PATH生成紧凑的“版本号”。 TRAIL_URL是URL的尾部,用于确定WC_PATH本身是否已切换(检测WC_PATH中的开关不依赖于TRAIL_URL)。 版本号写入标准输出。 例如:

$ svnversion . /repos/svn/trunk 4168 

如果工作副本是单个修订版,未修改,未切换且具有与TRAIL_URL参数匹配的URL,则版本号将是单个数字。 如果工作副本不正常,版本号将更复杂:

4123:4168混合修订工作副本
4168M修改后的工作副本
4123S切换工作副本
4123:4168MS混合修订,修改,切换工作副本

如果在不是工作副本的目录上调用,导出的目录说,程序将输出’exported’。

如果不带参数调用,WC_PATH将是当前目录。

有效选项:-n [ – no-newline]:不输出尾随换行符-c [–committed]:最后更改而不是当前版本-h [–help]:显示此帮助–version:show version信息

我使用以下shell脚本片段创建一个头文件svnversion.h ,它定义了我在编译代码中使用的一些常量字符串。 你应该能够有类似的东西:

 #!/bin/sh -e svnversion() { svnrevision=`LC_ALL=C svn info | awk '/^Revision:/ {print $2}'` svndate=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'` now=`date` cat < svnversion.h // Do not edit! This file was autogenerated // by $0 // on $now // // svnrevision and svndate are as reported by svn at that point in time, // compiledate and compiletime are being filled gcc at compilation #include  static const char* svnrevision = "$svnrevision"; static const char* svndate = "$svndate"; static const char* compiletime = __TIME__; static const char* compiledate = __DATE__; EOF } test -f svnversion.h || svnversion 

这假设您将删除创建的头文件以触发新的头文件的构建。

如果您只想打印存储库的最新版本,可以使用以下内容:

 svn info  -rHEAD | grep '^Revision: ' | awk '{print $2}' 

您可以使用capistrano进行部署,它会创建REVISION文件,您可以将其复制到public / version.txt

您似乎正在该目录上运行svn info ,但svn update特定文件。 如果您将目录更新为修订版4571,则应打印svn info

路径:。

url: http://my.url/trunk

存储库根目录: http://my.url/lesson%5Fplanner

存储库UUID:#########

修订版:4571

[…]

Last Changed Rev:4571

请注意,“上次更改的修订版”不一定与存储库的最新版本一致。

感谢所有建议使用capistrano和svninfo的人。

我们确实使用了capistrano,它确实制作了这个REVISION文件,我想我之前看过但是没有注意。 但事实上,这并不是我所需要的,因为它只在部署时得到更新,而有时我们可能偷偷地更新几个文件然后重新启动,而不是进行完全部署。

我最终使用svninfo,grep和awk做了我自己的文件,正如许多人在这里建议的那样,并把它公之于众。 这是在mongrel start上创建的,这是部署过程和重启过程的一部分,因此两次完成。

谢谢大家!