用SVN的SubWCRev管理同步项目版本号

使用svn进行项目代码管理过程中,都有这么个问题,发布版本的时候,几下了svn的版本号,然后出现bug后,根据记录去查找对应的svn版本的代码进行定位和解决bug,但是大部分时候我们希望,在日志里面,或者在软件中编译进去svn号,这样就可以快速的定位到是哪个svn的版本出现问题,下面通过在vs2008中实现

1.首先新建一个模板,比如叫version_template.h,内容如下:

#ifndef _TMPVERSION_H_
#define _TMPVERSION_H_

#define VER_MAJOR 1
#define VER_MINOR 0
#define VER_REVISION $WCREV$ //注意这个,查看svn帮助文档可以看到会进行svn号的替换
#endif //!_TMPVERSION_H_

2.新建一个批处理文件(windows)或者shell脚本文件(linux),此处以windows做示例,svnupdate.bat,内容如下:
setlocal

::设置svn客户端安装目录
set SVN_PATH=C:\Program Files\TortoiseSVN\bin

::设置工作目录,即工程目录
set WORK_DIR=F:\SvnCode\DemoClient

::设置版本模版文件,对应第一步中新建的模板文件
set VERSION_TEMPLATE=F:\SvnCode\DemoClient\version_template.h

::设置版本号生成文件,生成的文件就是我们需要使用的版本文件
set VERSION_RELEASE=F:\SvnCode\DemoClient\version.h

::进入svn客户端安装目录
cd %SVN_PATH%
::执行更新版本号操作
SubWCRev.exe “%WORK_DIR%” “%VERSION_TEMPLATE%” “%VERSION_RELEASE%”
local

3.以管理员权限执行批处理文件,可以看到version.h文件在VERSION_RELEASE中生成了,里面内容与新建的模板文件基本一样,除了#define VER_REVISION $WCREV$
version.h内容:

#ifndef _TMPVERSION_H_
#define _TMPVERSION_H_

#define VER_MAJOR 1
#define VER_MINOR 0
#define VER_REVISION 1617
#endif //!_TMPVERSION_H_

4.我们将新生成的version.h文件加入VS工程,然后在代码里面我们就可以组成一个版本号如:
1.0.1617,通过这个版本号,就可以快速的定位到是什么svn号的代码出现的bug,然后通过svn的log就能查看是否已经解决

5.当然,可能你会说,每次都要手动去执行这个批处理文件来更新version.h文件还是比较麻烦,那么,你可以再工程属性中配置预生成事件,设置命令行中内容为:svupdate.bat,那么每次你执行生成编译的时候都可以自动帮你更新,然后再编译进软件中,若使用的linux环境,这可以在makefie中加入shell脚本的执行,也是可以自动生成文件,并编译进去软件中,同时,如果是对后台进行开发的可能只有日志输出,那么你可以在每个日志的开头都先写入我们得到的版本号来进行快速定位日志文件对应的svn版本号

你可能感兴趣的:(用SVN的SubWCRev管理同步项目版本号)