天天看點

git 使用詳解-- tag打标簽

列出git中現有标簽

要想列出git中現有的所有标簽,輸入’git tag’指令運作即可:

$ git tag v0.1 v1.3

這個清單是按照字母表順序給出的,其實排名先後跟重要程度沒有直接聯系。

當然,你也可以按照特定表達式搜尋某些标簽。假如在一個 git 倉庫中有超過 240 個标簽,而你隻想得到 1.4.2 序列的标簽,那麼你可以:

$ git tag -l v1.4.2.* v1.4.2.1 v1.4.2.2 v1.4.2.3 v1.4.2.4

建立标簽

在 git 中有兩種最主要的标簽–輕量級标簽(lightweight)和帶注釋的标簽(annotated)。輕量級标簽跟分枝一樣,不會改變。它就是針對某個特定送出的指針。然而,帶注釋的标簽是git倉庫中的對象。它是一組校驗和,包含标簽名、email、日期,标簽資訊,GPG簽名和驗證。一般情況下,建議建立帶注釋的标簽,這樣就會保留這些資訊,但是如果你隻是需要臨時性标簽或者某些原因你不想在标簽中附帶上面說的這些資訊,lightweight标簽更合适些。

帶注釋的标簽

在git中建立帶注釋的标簽非常簡單,在運作’tag’指令時加上-a就可以了。

$ git tag -a v1.4 -m ‘version 1.4′ v1.4

‘-m’指明标簽資訊,跟标簽一起存儲。如果你不使用-m指明标簽資訊,git會自動啟動文本編輯器讓你輸入。

可以使用 git show 指令檢視相應标簽的版本資訊,并連同顯示打标簽時的送出對象。

$ 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’

我們可以看到,在送出對象資訊上面,列出了此标簽的送出者和送出時間,以及相應的标簽資訊。

有簽名的标簽。

如果你有GPG私鑰的話,你也可以用GPG來給你的标簽簽名,把-a換成-s就可以了:

[master]$ 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

然後,如果你對某個标簽運作’git show’的話,你就會看到你的GPG前面附加上去了。

[master]$ git show v1.5 tag v1.5 Date: Mon Feb 9 15:22:20 2009 -0800 my signed 1.5 tag —–BEGIN PGP SIGNATURE—– Version: GnuPG v1.4.8 (Darwin) iEYEABECAAYFAkmQurIACgkQON3DxfchxFr5cACeIMN+ZxLKggJQf0QYiQBwgySN Ki0An2JeAVUCAiJ7Ox6ZEtK+NvZAj82/ =WryJ —–END PGP SIGNATURE—–

稍後,我們會介紹如何驗證簽名标簽。

輕量級标簽

輕量級标簽實際上就是存在一個檔案中的送出校驗和–沒有附加任何其他資訊。建立輕量級标簽的方法就是把上面’-a’,'-s’,'-m’這些選項都去掉。

$ git tag v1.4-lw v1.4-lw v1.5

如果現在對這個标簽使用’git show’指令,不會看到像上面那種标簽顯示的那麼多内容,僅僅顯示這次送出的有關資訊。

$ git show v1.4-lw

驗證标簽

使用’git tag -v (tag)’就可以驗證一個簽名标簽了。這個指令會用到GPG來驗證簽名。前提是:你必須在密鑰環中存放着簽名者的公鑰。

$ git tag -v v1.4.2.1 object 883653babd8ee7ea23e6a5c392bb739348b1eb61 type commit tag v1.4.2.1 tagger Junio C Hamano 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 ” gpg: aka “[jpeg image of size 1513]” Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A

如果你沒有這個公鑰的話,你會看到這樣的資訊:

gpg: Can’t check signature: public key not found error: could not verify the tag ‘v1.4.2.1′

後期貼标簽

這種情況是說你想對以前的某次送出貼個标簽,如果整個送出曆史是這樣的:

$ git log –pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch ‘experiment’ a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch ‘experiment’ 0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function 4682c3261057305bdd616e23b64b0857d832627b added a todo file 166ae0c4d3f420721acbb115cc33848dfcc2121a started write support 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

忘記在那個送出資訊為’updated rakefile’的點上貼一個’v1.2′的标簽了,我可以現在貼一個上去。你可以在執行建立标簽的語句後面跟上那次送出的校驗和(或者部分校驗和)。

$ git tag -a v1.2 9fceb02

現在我們可以列出所有的标簽:

v1.2 $ git show v1.2 tag v1.2 Date: Mon Feb 9 15:32:16 2009 -0800 version 1.2 commit 9fceb02d0ae598e95dc970b74767f19372d61af8 Author: Magnus Chacon  Date: Sun Apr 27 20:43:35 2008 -0700 updated rakefile …

共享标簽

預設情況下,<code>git push</code> 并不會把标簽傳送到遠端伺服器上,隻有通過顯式指令才能分享标簽到遠端倉庫。其指令格式如同推送分支,運作<code>git push origin [tagname]</code> 即可:

[master]$ git push –tags 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 [email protected]:schacon/simplegit.git * [new tag] v0.1 -&gt; v0.1 * [new tag] v1.2 -&gt; v1.2 * [new tag] v1.4 -&gt; v1.4 * [new tag] v1.4-lw -&gt; v1.4-lw * [new tag] v1.5 -&gt; v1.5

現在,如果有人克隆或者線上同步你的git倉庫的話,标簽也會一并同步了。

删除tag這麼用:

切換到tag曆史記錄會處在分離頭指針狀态,這個是的修改是很危險的,在切換回主線時如果沒有合并,之前的修改送出基本都會丢失,如果需要修改可以嘗試git checkout -b branch tag建立一個基于指定tag的分支,例如:git checkout -b tset v0.1.0 這個時候就會在分支上進行開發,之後可以切換到主線合并

本文轉自莫水千流部落格園部落格,原文連結:http://www.cnblogs.com/zhoug2020/p/6479365.html,如需轉載請自行聯系原作者