打标签是对某一次的提交做一个标记。最常见的就是标记版本号。
1. 版本管理
1.1. 版本管理的“依赖地狱”
在软件管理的领域里存在着被称作“依赖地狱”的死亡之谷,系统规模越大,加入的套件越多,你就越有可能在未来的某一天发现自己已深陷绝望之中。
在依赖高的系统中发布新版本套件可能很快会成为恶梦。如果依赖关系过高,可能面临版本控制被锁死的风险(必须对每一个相依套件改版才能完成某次升级)。而如果依赖关系过于松散,又将无法避免版本的混乱(假设兼容于未来的多个版本已超出了合理数量)。当你专案的进展因为版本相依被锁死或版本混乱变得不够简便和可靠,就意味着你正处于依赖地狱之中。
GitHub起草了一套指导版本号的规则,称之为语义化的版本管理(详细的规则参考官网:Semantic Versioning)。
1.2. 版本号的规范
简要来说,在语义化的版本控制规范中,一个版本号分为三部分:主版本号.次版本号.修订号。例如:V1.0.0。版本号递增规则如下:
- 主版本号:发布中包含了不兼容的 API 修改
- 次版本号:发布中包含了向下兼容的功能性新增
- 修订号:发布中包含了向下兼容的问题修正
在发布重要的版本时,除了版本号之外还会带有表示特殊意义的词:
- alpha: 内部版本
- beta: 公开测试版
- rc: 即Release Candicate,即将作为正式版发布
- lts: 即Long time support,长期维护
2. 打标签
2.1. 创建标签
Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。打附注标签时会记录Tagger、日期等信息。一般推荐使用附注标签。
创建标签的常见用法:git tag [-a] <tagname> [-m <message>] [<commit>]
我们先用实际的例子来看下这轻量标签和附注标签的区别。首先创建一个轻量标签:
$ git tag v0.1.0-alpha
再来创建一个附注标签:
$ git tag -a v0.1.0 -m "release v0.1.0"
然后通过git tag
(也可以指定-l “tagname”
参数用特殊的模式查看)命令查看标签:
$ git tag -l "v0.1.0*"
v0.1.0
v0.1.0-lw
可以看到刚才打的两个标签都列出来了,但是看不出来有什么不同。别急,再来运行git show <tagname>
命令查看标签详情:
$ git show v0.1.0-alpha
commit 3ff21324fd4ce00d991097ed9b5159738efa7e39 (HEAD -> master, tag: v0.1.0-alpha, tag: v0.1.0, tag: show)
...
$ git show v0.1.0
tag v0.1.0
Tagger: Efrey Kong <efreykong@outlook.com>
Date: Mon Aug 19 22:31:10 2019 +0800
release v0.1.0
commit 3ff21324fd4ce00d991097ed9b5159738efa7e39 (HEAD -> master, tag: v0.1.0-alpha, tag: v0.1.0)
...
可以给历史的提交打标签。在git log中找到对应提交的commit id,然后打标签时指定这个commit id即可。在不指定commit的情况下运行创建的标签命令,会在标签打在版本库最后一次提交上面。
2.3. 移除标签
运行git tag -d <tagname>…
可以删除指定的一个或多个标签
$ git tag -d v0.1.0-lw
Deleted tag 'v0.1.0-lw' (was 3ff2132)
$ git tag
v0.1.0