在VS 项目中利用Git自动生成编译版本信息

原创 2018年04月17日 18:52:49

对于源代码一直在迭代更新的项目,希望在每次生成项目的时候,都能自动地更新代码中的版本信息,以便测试发现问题的时候,能跟踪到对应版本的源代码。此处以VS C/C++项目为例,看怎么利用git自动生成版本信息。

1. 获取版本信息,保存到 h 文件。

利用git log命令获取当前工作目录的版本信息.

git log -1 --pretty=format:"%cd hash:%h"

结果:

Tue Apr 17 11:51:45 2018 +0800 hash:4d2bc3e

其中 -1 表示仅获取当前分支最近的一条提交信息,--pretty=format 用于指定输出的字符格式,%cd表示提交日期,%h表示提交对象的简短哈希字串,详细使用方法参考《Git 基础 - 查看提交历史》。

将上面输出的结果保存为 h 文件,这里利用 python3 来实现,当然也可以用批处理器脚本来做。

此处需要用到 GitPython 库,使用pip安装:

pip install GitPython

安装好GitPython后,将下面 python 程序保存到 git 工作目录下的 getver.py 文件中。

# -*- coding: utf-8 -*-
from git import Repo
import tkinter
import tkinter.messagebox

# 有未提交更改时提示
repo = Repo('.')
verstr = repo.git.log('-1','--pretty=format:%cd hash:%h')
if repo.is_dirty():
    a=tkinter.messagebox.askokcancel('提示', '有未提交修改, 确定更新版本信息?')
    if not a:
        print("取消更新")
        raise
    verstr += ' modified'

fi = open('./gitver.h', 'w', encoding='utf-8')
fstr = '#ifndef _GITVER_H\n#define _GITVER_H\n#define GIT_VER "' + verstr + '"\n#endif'
fi.write(fstr)
fi.close()

print('成功更新git信息')
print(verstr)

运行上面python程序,则会生成如下的 gitver.h 文件:

#ifndef _GITVER_H
#define _GITVER_H
#define GIT_VER "Tue Apr 17 11:51:45 2018 +0800 hash:4d2bc3e"
#endif
2. 在项目中包含 gitver.h 头文件,引用版本信息。

示例:

#include "gitver.h"
char* getVersion()
{
    static char verstr[] = GIT_VER;
    return verstr;
}
3. 项目生成前自动运行脚本。

这是实现自动化的关键一步。VS 2015 允许设置在生成项目前要运行的命令,在“项目属性→生成事件→预先生成事件”中:


这里添加了两条命令,先是将当前目录切换到项目目录,然后运行 python 程序。

至此,每次生成项目的话都会自动地更新版本信息了。

git基础教程

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理,在工作以及日常开发中Git是程序员协同开发必备知识。
  • 2017年03月06日 09:58

前端开发静态文件自动添加版本号解决方案

web开发时经常遇到这种情况:开发人员修改了静态资源,浏览器缓存过该静态资源,用户再次访问时,js css修改了,用户客户端乱了。其实只要清一下缓存就好了,但是我们不能要求用户去清缓存。那么就需要开发...
  • sun_nan_vip
  • sun_nan_vip
  • 2017-07-31 17:31:24
  • 420

使用gulp为项目中的文件自动添加版本号之实践思路

关于gulp中在html文件自动添加版本号需要Gulp插件:1、gulp-rev2、gulp-rev-format3、gulp-rev-replace要实现html中增加版本号的效果: 把gulp...
  • itpinpai
  • itpinpai
  • 2016-11-02 20:37:07
  • 6593

gulp自动添加静态文件版本号方案

系统发版后客户端缓存更新方案一。解决思路: 1. 利用gulp根据静态文件(JS,CSS,图片)内容生成对应的HASH值作为它的版本号,文件内容变化则版本号跟着变(需处理生成版本号的位置,不同路径下...
  • wangwei249
  • wangwei249
  • 2017-03-21 13:33:35
  • 1421

HTML页面自动清理js、css文件的缓存(自动添加版本号)

web项目开发过程中,经常引用css、js文件,更新文件后经常会出现缓存问题(明明更改了代码,在浏览器上访问的时候却没有发生变化)。本人收集了自动添加版本号的方法用以解决html的js、css文件缓存...
  • sinat_29740819
  • sinat_29740819
  • 2017-06-06 10:46:40
  • 2702

GIT服务器实现web代码自动部署

之前在一台vps服务器上面搭建了git服务器,用来做代码管理,方便团队开发。但是问题也就相应的来了,使用git可以轻松的上传代码,而由于做的是web开发,每次还都得到服务器上把代码手动pull或者复制...
  • hsany330
  • hsany330
  • 2015-11-17 15:45:45
  • 11461

使用gulp实现静态资源版本号替换

静态版本号替换的由来项目中js、css文件与页面分离,如遇到了浏览器缓存问题,修改了a.js后,浏览器使用的是以前缓存的a.js导致功能或者样式不能与页面匹配,只能手动添加版本号,如...
  • wangjun5159
  • wangjun5159
  • 2017-07-14 22:34:21
  • 1487

git添加文件到版本库的步骤

添加文件到版本库的步骤 创建(修改)文件 往工作区中添加/修改文件 添加到暂存区:git add 把修改存放到暂存区 提交到版本库:git commit -m "备注" ...
  • zt_vicky
  • zt_vicky
  • 2017-02-03 09:22:57
  • 496

git webhook 代码自动部署

echo exec("cd /data/airenwen/ && /usr/local/git/bin/git pull");
  • kongdeqian1988
  • kongdeqian1988
  • 2016-09-08 15:50:26
  • 1146

搭建git私有服务器及同步更新自己网站的文件

一、搭建git私有服务器 下面以ubuntu为例 1.安装git(如果没有安装的话) sudo apt-get install git 2.新建一个git用户组 sudo groupadd git...
  • u012763794
  • u012763794
  • 2016-03-29 19:06:59
  • 2888
收藏助手
不良信息举报
您举报文章:在VS 项目中利用Git自动生成编译版本信息
举报原因:
原因补充:

(最多只允许输入30个字)