版本管理主要用于对运行程序的版本追踪,从而能够管理线上服务的运行版本,避免各个版本的服务程序混淆.这里一般的作法为在程序中埋入版本标志,同时该版本号会对应到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