版本管理主要用於對運行程序的版本追蹤,從而能夠管理線上服務的運行版本,避免各個版本的服務程序混淆.這裏一般的作法爲在程序中埋入版本標誌,同時該版本號會對應到git上的tag或release版本.從而對線上服務更改有一個更全面的信息說明.這裏將介紹基於GNU風格一種版本命名方式.linux
主版本號 . 子版本號 [. 修正版本號 [. 編譯版本號 ]] Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]] 示例 : 1.2.1, 2.0, 5.0.0 build-13124git
具備相同名稱但不一樣主版本號的程序集不可互換。例如,這適用於對產品的大量重寫,這些重寫使得沒法實現向後兼容性。github
若是兩個程序集的名稱和主版本號相同,而次版本號不一樣,這指示顯著加強,但照顧到了向後兼容性。例如,這適用於產品的修正版或徹底向後兼容的新版本。golang
內部版本號的不一樣表示對相同源所做的從新編譯。這適合於更改處理器、平臺或編譯器的狀況。安全
名稱、主版本號和次版本號都相同但修訂號不一樣的程序集應是徹底可互換的。這適用於修復之前發佈的程序集中的安全漏洞。gitlab
程序集的只有內部版本號或修訂號不一樣的後續版本被認爲是先前版本的修補程序 (Hotfix) 更新。ui
1). 項目第一版本時,版本號能夠爲 0.1 或 0.1.0, 也能夠爲 1.0 或 1.0.0.
2). 當項目在進行了局部修改或 bug 修正時,主版本號和子版本號都不變,修正版本號加 1;
3). 當項目在原有的基礎上增長了部分功能時,主版本號不變,子版本號加 1,修正版本號復位爲 0,於是能夠被忽略掉;
4). 當項目在進行了重大修改或局部修正累積較多,而致使項目總體發生全局變化時,主版本號加 1;
5). 另外,編譯版本號通常是編譯器在編譯過程當中自動生成的,咱們只定義其格式,並不進行人爲控制。
get
針對每一個服務,新建一個version的包用於版本管理,手動更改編譯腳本中的版本號.且該版本號必須和gitlab上的版本號一一對應. 當執行二進制程序的並輸入-v參數時則輸出該程序的版本號,不輸入任何參數時則運行程序.cmd
示例見https://github.com/g4zhuj/ver...
使用時使用build腳本編譯便可生成帶有提交信息的程序,須要根據程序修改build腳本中參數.編譯器
執行後產生的結果以下:
./example -v
Version: 0.0.1
Git commit: de07491
Go version: go version go1.6.2 linux/amd64
Build time: 2017-05-11 16:20:27