一、简介
1、发布一个版本时,通常需要先在版本库打一个标签(tag),这样就唯一确定了打标签时刻的版本。将来无论什么时候取某个标签的版本,就是把那个打标签时刻的历史版本取出来,所以,标签也是版本库的一个快照
2、Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
3、
Git有commit,为什么还要引入tag?
“请把上周一的那个版本打包发布,commit号是6a5819e...”
“一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是v1.2”
“好的,按照tag v1.2查找commit就行!”
所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
二、创建标签
1、首先切换到需要打标签的分支上
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/e09dfaef-ccc2-4c49-96fb-cda5db31e592.png)
2、然后敲击命令:
git tag <tagname>(v1.0是名称,可更改)
,git tag查看所有标签
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/25d95fc9-75b0-4f75-bd8d-56a260afd94a.png)
3、默认标签是打在最新的commit上的,如果今天周五,想要在周一的提交上打tag,则
【1】
git tag v0.9 <commit-id>
【2】git tag -a v0.8 -m "测试tag" <commit-id>(-a指定名称,-m说明文字)
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/36516868-4316-4d44-815c-a9493c447a90.png)
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/d6dd4fc7-ca8b-4e53-9952-6c569fd65c33.png)
4、注意:标签不是按时间顺序列出,是按照字母顺序列出的,可以用
git show <tagname>查看标签信息
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/6465ddc3-3c98-4032-b7db-5e8fae0a4116.png)
5、其他命令
还可以通过
-s
用私钥签名一个标签:
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a
签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:
gpg: signing failed: secret key not available
error: gpg failed to sign the data
error: unable to sign the tag
如果报错,请参考GnuPG帮助文档配置Key。
用命令git show <tagname>
可以看到PGP签名信息:
$ git show v0.2
tag v0.2
Tagger: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 26 07:28:33 2013 +0800
signed version 0.2 released
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (Darwin)
iQEcBAABAgAGBQJSGpMhAAoJEPUxHyDAhBpT4QQIAKeHfR3bo...
-----END PGP SIGNATURE-----
commit fec145accd63cdc9ed95a2f557ea0658a2a6537f
Author: Michael Liao <askxuefeng@gmail.com>
Date: Thu Aug 22 10:37:30 2013 +0800
branch test
用PGP签名的标签是不可伪造的,因为可以验证PGP签名。验证签名的方法比较复杂,这里就不介绍了。
三、操作标签
1、删除标签
git tag -d <tagname>
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/d3741cbf-f1a8-40fd-860a-fee3f254d54f.png)
2、推送某个标签到远程库:
git push origin <tagname>
推送全部标签到远程库:git push origin --tags
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/95823bb2-2cde-4338-a290-34a2ec93b5b2.png)
3、推送后可以在github上查看到:
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/b475b33a-d91f-4065-b10d-9018f1f296e7.png)
![](https://note.wiz.cn/api/document/files/unzip/0a7eafd0-7f2d-4fb4-9f8e-5e465a5dc1d4/4c688b0b-09c7-4f38-a6ce-d94303183cfa.8164/index_files/75ab29ac-2359-4ebb-be05-7031d62b50a7.png)
4、删除远程仓库的标签
【1】先删除本地:git tag -d v0.8
【2】再删除远程库:git push origin :refs/tags/v0.8