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