在代码中获取SVN版本号


方法1:提交时修改版本
SVN hook功能(钩子)

在项目SVN根目录底下右键->TortoiseSVN->Properties->New...->Local Hook

Hook Type 选择start-commit
内容填       %REPOROOT+%/svn_version.bat
标识执行根目录底下 svn_version.bat文件  linux系统用shell脚本

下面选项选择Wait for the script to finish和Always execute the script


svn_version.bat内容如下
SubWCRev . include/svn_version.version include/svn_version.h
exit 0

将svn_version.version覆盖成svn_version.h

然后svn_version.h右键->TortoiseSVN->Properties->New...->Keyword
选择关键字  这里可以选择Date和Revision(上传SVN号)
svn_version.version内容如下
#ifndef  _SVN_VERSION_H_
#define  _SVN_VERSION_H_

#define SVN_UPDATE_VERSION "$WCRANGE$"
#define SVN_COMMIT_VERSION "$Revision$"
#define SVN_COMMIT_DATE "$Date$"

#endif


其中#define SVN_UPDATE_VERSION "$WCRANGE$"
中WCRANGE为本地更新的最新svn号关键字,执行SubWCRev命令时可获取到
Revision和Date为上传svn号和日期;svn_version.h选择Date和Revision的关键字属性时,上传到SVN时会自动修改;


主要通过SubWCRev触发svn_version.h的修改,然后每次commit前都触发svn_version.h的上传,svn_version.h选择Date和Revision属性,在上传时会获取即将上传的SVN号,上传到服务器

方法二:
编译时命令行获取:适用于jenkins等自动化编译或Linux makefile
svn info | grep Revision | awk '{print $2}'

svn info :
Path: .
Working Copy Root Path: XXX
URL: XXX
Relative URL: XXX
Repository Root: XXX
Repository UUID: XXX
Revision: 17153
Node Kind: directory
Schedule: normal
Last Changed Author: XXX
Last Changed Rev: 13440
Last Changed Date: 2020-08-17 11:33:01 +0800 (Mon, 17 Aug 2020)

makefile示例如下:

svn_rev = $(shell svn info | grep "Revision: " | sed -e "s/Revision: //g")
svn_submiter = $(shell svn info | grep "Last Changed Author: " | sed -e "s/Last Changed Author: //g")
svn_last_rev = $(shell svn info | grep "Last Changed Rev: " | sed -e "s/Last Changed Rev: //g")

CFLAGS += -DSVNVERSION_INT=$(svn_rev) -DSVNVERSION_STR=\"$(svn_rev)\" -DSVNVERSION_LAST=\"$(svn_last_rev)\" -DSVNSUBMITER_STR=\"$(svn_submiter)\"

%.o: %.c
	gcc -c -g $(CFLAGS) $< -o $@
	
all : main.o
	gcc -g -o main main.o 
 
clean:
	rm -f main main.o

main.c

#include <stdio.h>

int main()
{
#ifdef SVNVERSION_INT
	printf("SVNVERSION_INT:%d \n",SVNVERSION_INT);
#endif
#ifdef SVNVERSION_STR
	printf("SVNVERSION_STR:%s \n",SVNVERSION_STR);
#endif
#ifdef SVNVERSION_LAST
	printf("SVNVERSION_LAST:%s \n",SVNVERSION_LAST);
#endif
#ifdef SVNSUBMITER_STR
	printf("SVNSUBMITER_STR:%s \n",SVNSUBMITER_STR);
#endif
	return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值