Git项目自动更新Git版本信息
我们的目标是,从git仓库pull之后,在生成项目时可以自动更新git版本信息。但是目前存在尚未解决的问题,在push项目之后仓库中保存的git版本信息仍然是上一个版本。该问题留作后续研究,问题流程如下图所示:
注意:下面所有文件都必须放在项目目录下,而不能放在解决方案目录下,否则执行sh文件时无法找到version文件(对sh文件不太了解,不知道为什么)
一、version.h文件
定义保存了版本信息的头文件,保存了(1)git版本号(2)最近一次提交时间(3)最近一次编译时间(即当前时间),此处我们定义为:
#ifndef GIT_VERSION
#define GIT_VERSION "f384194"
#define COMMIT_TIME "2022-01-04 15:58:24"
#define BUILD_TIME "2022-01-04 15:59:45"
#endif
为了生成该格式的头文件,我们定义模板文件version.h.tmp,通过替换字符完成版本信息的更新
#ifndef GIT_VERSION
#define GIT_VERSION "MYVERSION"
#define COMMIT_TIME "MYCOMMITTIME"
#define BUILD_TIME "MYBUILDTIME"
#endif
二、sh文件
创建sh文件,计算三个版本信息,通过sed命令将指定字符替换为计算出的版本信息,VersionUpdate.sh文件内容如下:
#!/bin/sh
commit_ts=`git log -1 --format="%ct"`
commit_time=`date -d@$commit_ts +"%Y-%m-%d %H:%M:%S"`
current_time=`date +"%Y-%m-%d %H:%M:%S"`
git_version=`git log -1 --pretty=format:"%h"`
sed s/MYVERSION/"${git_version}"/g version.h.tmp>version.h
sed -i s/MYCOMMITTIME/"${commit_time}"/g version.h
sed -i s/MYBUILDTIME/"${current_time}"/g version.h
三、VS生成事件
打开 项目属性》》生成事件 可以看到三类事件:生成前事件、链接前事件、生成后事件。我们此处以链接前事件为例。其语法与cmd命令行类似,我们添加命令行"VersionUpdate.sh"。
四、生成项目
点击生成项目,没有显示错误(可以在sh文件中添加echo命令进行测试),查看version.h文件,更新成功,如下:
#ifndef GIT_VERSION
#define GIT_VERSION "f384194"
#define COMMIT_TIME "2022-01-04 15:58:24"
#define BUILD_TIME "2022-01-06 20:02:51"
#endif
项目资源链接: