發佈一個版本時,咱們一般先在版本庫中打一個標籤(tag)。這樣,就惟一肯定了打標籤時刻的版本。未來不管何時,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。因此,標籤也是版本庫的一個快照,實質上它就是指向某個commit的指針。因此,建立和刪除標籤都是瞬間完成的。簡而言之,標籤tag就是一個讓人容易記住的有意義的名字,它跟某個commit綁在一塊兒。本文將詳細介紹Git標籤管理git
在Git中打標籤很是簡單,首先,切換到須要打標籤的分支上安全
而後,敲命令git tag <name>就能夠打一個新標籤服務器
能夠用命令git tag
查看全部標籤spa
默認標籤是打在最新提交的commit上的。有時候,若是忘了打標籤怎麼辦呢?方法是找到歷史提交的commit id,而後打上就能夠了.net
比方說要對create b.txt此次提交打標籤,它對應的commit id是7ec9296,敲入命令:3d
再用命令git tag
查看標籤,注意,標籤不是按時間順序列出,而是按字母排序的指針
能夠用git show <tagname>查看標籤信息code
實際上,Git使用的標籤有兩種類型:輕量級的(lightweight)和含附註的(annotated)。上面介紹的就是輕量級標籤,輕量級標籤就像是個不會變化的分支,實際上它就是個指向特定提交對象的引用。而含附註標籤,其實是存儲在倉庫中的一個獨立對象,它有自身的校驗和信息,包含着標籤的名字,電子郵件地址和日期,以及標籤說明,標籤自己也容許使用GNU Privacy Guard(GPG)來簽署或驗證。通常咱們都建議使用含附註型的標籤,以便保留相關信息;固然,若是隻是臨時性加註標籤,或者不須要旁註額外信息,用輕量級標籤也沒問題對象
建立一個含附註類型的標籤很是簡單,用-a(取annotated的首字母,中文意思爲註釋)指定標籤名字便可,而-m選項則指定了對應的標籤說明,Git會將此說明一同保存在標籤對象中。若是沒有給出該選項,Git會啓動文本編輯軟件供你輸入標籤說明blog
$ git tag -a v1.4 -m 'my version 1.4'
咱們能夠看到在提交對象信息上面,列出了此標籤的提交者和提交時間,以及相應的標籤說明
若是有本身的私鑰,還能夠用GPG來簽署標籤,只須要把以前的-a改成-s(取signed的首字母,中文意思爲有符號的)便可
$ git tag -s v0.2 -m 'signed version 0.2 released'
簽名採用PGP簽名,所以,必須首先安裝gpg(GnuPG),若是沒有找到gpg,或者沒有gpg密鑰對,就會報錯
如今再運行 git show 會看到對應的 GPG 簽名也附在其內
$ 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簽名
可使用git tag -v [tagname] (取verify的首字母,中文意思爲覈實)的方式驗證已經簽署的標籤。此命令會調用GPG來驗證簽名,因此你須要有簽署者的公鑰,存放在keyring中,才能驗證
$ git tag -v v1.4.2.1 object 883653babd8ee7ea23e6a5c392bb739348b1eb61 type commit tag v1.4.2.1 tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700 GIT 1.4.2.1 Minor fixes since 1.4.2, including git-mv and git-http with alternates. gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A gpg: Good signature from "Junio C Hamano <junkio@cox.net>" gpg: aka "[jpeg image of size 1513]" Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
如果沒有簽署者的公鑰,會報告相似下面這樣的錯誤:
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A gpg: Can't check signature: public key not found error: could not verify the tag 'v1.4.2.1'
若是標籤打錯了,也能夠刪除
$ git tag -d <tagname>
由於建立的標籤都只存儲在本地,不會自動推送到遠程。因此,打錯的標籤能夠在本地安全刪除。
默認狀況下,git push並不會把標籤傳送到遠端服務器上,只有經過顯式命令才能推送標籤到遠端倉庫
$ git push origin <tagname>
或者,一次性推送所有還沒有推送到遠程的本地標籤
$ git push origin --tags
若是標籤已經推送到遠程,要刪除遠程標籤就麻煩一點,先從本地刪除
而後,從遠程刪除。刪除命令也是push,可是格式以下
最後一個問題,如何查看發送到遠程的標籤呢?
點擊Github項目中的release
便可看到遠程標籤的信息