打標(biāo)簽
?同大多數(shù) VCS 一樣剥险,Git 也可以對某一時(shí)間點(diǎn)上的版本打上標(biāo)簽聪蘸。人們在發(fā)布某個(gè)軟件版本(比如 v1.0 等等)的時(shí)候,經(jīng)常這么做表制。本節(jié)我們一起來學(xué)習(xí)如何列出所有可用的標(biāo)簽健爬,如何新建標(biāo)簽,以及各種不同類型標(biāo)簽之間的差別么介。
列顯已有的標(biāo)簽
列出現(xiàn)有標(biāo)簽的命令非常簡單娜遵,直接運(yùn)行 git tag 即可:
$ git tag
v0.1
v1.3
顯示的標(biāo)簽按字母順序排列,所以標(biāo)簽的先后并不表示重要程度的輕重壤短。 我們可以用特定的搜索模式列出符合條件的標(biāo)簽设拟。在 Git 自身項(xiàng)目倉庫中,有著超過 240 個(gè)標(biāo)簽鸽扁,如果你只對 1.4.2 系列的版本感興趣蒜绽,可以運(yùn)行下面的命令:
$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4
新建標(biāo)簽
Git 使用的標(biāo)簽有兩種類型:輕量級(jí)的(lightweight)和含附注的(annotated)。
輕量級(jí)標(biāo)簽就像是個(gè)不會(huì)變化的分支桶现,實(shí)際上它就是個(gè)指向特定提交對象的引用。
而含附注標(biāo)簽鼎姊,實(shí)際上是存儲(chǔ)在倉庫中的一個(gè)獨(dú)立對象骡和,它有自身的校驗(yàn)和信息,包含著標(biāo)簽的名字相寇,電子郵件地址和日期慰于,以及標(biāo)簽說明,標(biāo)簽本身也允許使用 GNU Privacy Guard (GPG) 來簽署或驗(yàn)證唤衫。一般我們都建議使用含附注型的標(biāo)簽婆赠,以便保留相關(guān)信息;當(dāng)然佳励,如果只是臨時(shí)性加注標(biāo)簽休里,或者不需要旁注額外信息蛆挫,用輕量級(jí)標(biāo)簽也沒問題。
含附注的標(biāo)簽創(chuàng)建一個(gè)含附注類型的標(biāo)簽非常簡單妙黍,用 -a (譯注:取 annotated 的首字母)指定標(biāo)簽名字即可:
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4
而 -m 選項(xiàng)則指定了對應(yīng)的標(biāo)簽說明悴侵,Git 會(huì)將此說明一同保存在標(biāo)簽對象中。如果沒有給出該選項(xiàng)拭嫁,Git 會(huì)啟動(dòng)文本編輯軟件供你輸入標(biāo)簽說明可免。可以使用 git show 命令查看相應(yīng)標(biāo)簽的版本信息做粤,并連同顯示打標(biāo)簽時(shí)的提交對象浇借。
$ git show v1.4
tag v1.4
Tagger: Scott Chacon
Date: Mon Feb 9 14:45:11 2009 -0800
my version 1.4
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
Merge: 4a447f7... a6b4c97...
Author: Scott Chacon
Date: Sun Feb 8 19:02:46 2009 -0800
??????????????????????????????????????????????????? Merge branch 'experiment'
我們可以看到在提交對象信息上面,列出了此標(biāo)簽的提交者和提交時(shí)間怕品,以及相應(yīng)的標(biāo)簽說明逮刨。
簽署標(biāo)簽
如果你有自己的私鑰,還可以用 GPG 來簽署標(biāo)簽堵泽,只需要把之前的 -a 改為 -s (譯注: 取 signed 的首字母)即可:
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Scott Chacon"
1024-bit DSA key, ID F721C45A, created 2009-02-09
現(xiàn)在再運(yùn)行 git show 會(huì)看到對應(yīng)的 GPG 簽名也附在其內(nèi)修己。
輕量級(jí)標(biāo)簽
輕量級(jí)標(biāo)簽實(shí)際上就是一個(gè)保存著對應(yīng)提交對象的校驗(yàn)和信息的文件。要?jiǎng)?chuàng)建這樣的標(biāo)簽迎罗,一個(gè) -a睬愤,-s 或 -m 選項(xiàng)都不用,直接給出標(biāo)簽名字即可:
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
現(xiàn)在運(yùn)行 git show 查看此標(biāo)簽信息纹安,就只有相應(yīng)的提交對象摘要:
$ git show v1.4-lw
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
Merge: 4a447f7... a6b4c97...
Author: Scott Chacon
Date: Sun Feb 8 19:02:46 2009 -0800
Merge branch 'experiment'
驗(yàn)證標(biāo)簽
可以使用 git tag -v [tag-name] (譯注:取 verify 的首字母)的方式驗(yàn)證已經(jīng)簽署的標(biāo)簽尤辱。此命令會(huì)調(diào)用 GPG 來驗(yàn)證簽名,所以你需要有簽署者的公鑰厢岂,存放在 keyring 中光督,才能驗(yàn)證
后期加注標(biāo)簽
只要在打標(biāo)簽的時(shí)候跟上對應(yīng)提交對象的校驗(yàn)和(或前幾位字符)即可:
$ git tag -a v1.2 9fceb02
分享標(biāo)簽
默認(rèn)情況下,git push 并不會(huì)把標(biāo)簽傳送到遠(yuǎn)端服務(wù)器上塔粒,只有通過顯式命令才能分享標(biāo)簽到遠(yuǎn)端倉庫结借。其命令格式如同推送分支,運(yùn)行 git push origin [tagname] 即可:
$ git push origin v1.5
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5
?如果要一次推送所有本地新增的標(biāo)簽上去卒茬,可以使用 --tags 選項(xiàng):
?$ git push origin --tags
如果打完標(biāo)簽想進(jìn)入這個(gè)標(biāo)簽版本怎么辦呢船老?
查看存在的tag
git tag -l
切換到某個(gè)tag
git checkout tag_name
列出所有tag的創(chuàng)建時(shí)間并排序
git for-each-ref--count=3--sort='-*authordate'--format='%(*authordate) %(*refname)'