在VS 專案中利用Git自動生成編譯版本資訊

2021-08-18 22:26:09 字數 1840 閱讀 6566

對於源**一直在迭代更新的專案,希望在每次生成專案的時候,都能自動地更新**中的版本資訊,以便測試發現問題的時候,能跟蹤到對應版本的源**。此處以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()

3. 專案生成前自動執行指令碼。

這是實現自動化的關鍵一步。vs 2015 允許設定在生成專案前要執行的命令,在「專案屬性→生成事件→預先生成事件」中:

這裡新增了兩條命令,先是將當前目錄切換到專案目錄,然後執行 python 程式。

至此,每次生成專案的話都會自動地更新版本資訊了。

git 子模組在專案中的使用

在公司的專案中,經常會遇到一些公共的內容,多個專案中間通用的,不可能每次都將整個 複製一遍,遇到這種情況有很多不同的解決方案,一般來說,專案是通過 git 來管理的,巧了,git 也同樣支援子模組.git submodule add git gitee.com hujingnb submodule ...

在專案中利用Map實現資料快取功能

在專案開發中,對於資料庫中不經常更改,但需要經常查詢的資料,可以使用map將資料快取,減少資料庫io次數,提公升效能。一下 是實現過去12個月,按月份查詢每個月的進出廠數量,每個月的數量不會改變。首先定義乙個全域性私有變數map private map map new hashmap 業務方法 pu...

利用GIT的HOOK機制,為程式自動生成版本資訊

利用git的hook機制,為程式自動生成版本資訊 1.git init.建立git倉庫,可以發現.git hooks目錄下有一堆 sample 2.找到post commit.sample,post commit表示提交 後觸發的命令,把字尾去掉 3.在檔案最後加入命令,用於在提交之後自動生成包括h...