我有一个rails网站。我想,在mongrel重新启动时,将当前的svn版本写入public / version.txt,以便我可以将其放入页眉中的注释中。
问题是获得当前本地版本的svn - 我有点困惑。
例如,如果我对一段尚未更新的文件进行svn更新,我会得到“修订版4571”。但是,如果我做svn信息,我得到
路径:。
网址:http://my.url/trunk
存储库根目录:http://my.url/lesson_planner
存储库UUID:#########
修订版:4570
节点种类:目录
时间表:正常
最后更改作者:最大
最后更改版本:4570
最后更改日期:2009-11-30 17:14:52 +0000(星期一,2009年11月30日)
请注意,这表示修订版4570,比上一个命令低1。
任何人都可以直截了当地告诉我如何简单地获取当前的版本号吗?
谢谢,最大
答案 0 :(得分:6)
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:显示版本信息
答案 1 :(得分:4)
我使用以下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 <<EOF > 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 <stdlib.h>
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
这假设您将删除创建的头文件以触发构建新头文件。
答案 2 :(得分:2)
如果您只想打印存储库的最新版本,可以使用以下内容:
svn info <repository_url> -rHEAD | grep '^Revision: ' | awk '{print $2}'
您可以使用capistrano进行部署,它会创建REVISION文件,您可以将其复制到public / version.txt
答案 3 :(得分:1)
您似乎在目录上运行svn info
,但在特定文件上运行svn update
。如果您将目录更新为版本4571,则应打印svn info
:
路径:。
存储库根目录:http://my.url/lesson%5Fplanner
存储库UUID:#########
修订版:4571
[...]
Last Changed Rev:4571
请注意,“上次更改的修订版”不一定与存储库的最新版本保持一致。
答案 4 :(得分:0)
感谢所有建议使用capistrano和svninfo的人。
我们确实使用了capistrano,它确实制作了这个REVISION文件,我想我之前看过但是没有注意。但事实上,这并不是我所需要的,因为它只在部署时得到更新,而有时我们可能偷偷地更新几个文件然后重新启动,而不是进行完全部署。
我最终使用svninfo,grep和awk做了我自己的文件,就像很多人在这里建议的那样,并把它公之于众。这是在mongrel start上创建的,这是部署过程和重启过程的一部分,因此两次都会完成。
谢谢大家!