匿名
尚未登入
登入
DILA Wiki
搜尋
檢視 Pro Git 2.6 貼標籤 的原始碼
出自DILA Wiki
命名空間
頁面
討論
更多
更多
頁面操作
閱讀
檢視原始碼
歷史
←
Pro Git 2.6 貼標籤
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
同大多數 VCS 一樣,Git 也可以對某一時間點上的版本打上標籤。人們在發佈某個軟體版本(比如 v1.0 等等)的時候,經常這麼做。本節我們一起來學習如何列出所有可用的標籤,如何新建標籤,以及各種不同類型標籤之間的差別。 =列出已有的標籤= 列出現有標籤的命令非常簡單,直接運行 git tag 即可: <syntaxhighlight lang="XML"> $ git tag v0.1 v1.3 </syntaxhighlight> 顯示的標籤按字母順序排列,所以標籤的先後並不表示重要程度的輕重。 我們可以用特定的搜索模式列出符合條件的標籤。在 Git 自身專案倉庫中,有著超過 240 個標籤,如果你只對 1.4.2 系列的版本感興趣,可以運行下面的命令: <syntaxhighlight lang="XML"> $ git tag -l 'v1.4.2.*' v1.4.2.1 v1.4.2.2 v1.4.2.3 v1.4.2.4 </syntaxhighlight> =新建標籤= Git 使用的標籤有兩種類型:羽量級的(lightweight)和含附注的(annotated)。羽量級標籤就像是個不會變化的分支,實際上它就是個指向特定提交物件的引用。而含附注標籤,實際上是存儲在倉庫中的一個獨立物件,它有自身的校驗(checksum)和資訊,包含著標籤的名字,電子郵寄地址和日期,以及標籤說明,標籤本身也允許使用 GNU Privacy Guard (GPG) 來簽署或驗證。一般我們都建議使用含附注型的標籤,以便保留相關資訊;當然,如果只是臨時性加注標籤,或者不需要旁注額外資訊,用羽量級標籤也沒問題。 =含附注的標籤= 創建一個含附注類型的標籤非常簡單,用 -a (譯注:取 annotated 的首字母)指定標籤名字即可: <syntaxhighlight lang="XML"> $ git tag -a v1.4 -m 'my version 1.4' $ git tag v0.1 v1.3 v1.4 </syntaxhighlight> 而 -m 選項則指定了對應的標籤說明,Git 會將此說明一同保存在標籤物件中。如果在此選項後沒有給出具體的說明內容,Git 會啟動文本編輯軟體供你輸入。 可以使用 git show 命令查看相應標籤的版本資訊,並連同顯示打標籤時的提交物件。 <syntaxhighlight lang="XML"> $ git show v1.4 tag v1.4 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 14:45:11 2009 -0800 my version 1.4 commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment' </syntaxhighlight> 我們可以看到在提交物件資訊上面,列出了此標籤的提交者和提交時間,以及相應的標籤說明。 =簽署標籤= 如果你有自己的私密金鑰,還可以用 GPG 來簽署標籤,只需要把之前的 -a 改為 -s (譯注: 取 Signed 的首字母)即可: <syntaxhighlight lang="XML"> $ git tag -s v1.5 -m 'my signed 1.5 tag' You need a passphrase to unlock the secret key for user: "Scott Chacon <schacon@gee-mail.com>" 1024-bit DSA key, ID F721C45A, created 2009-02-09 </syntaxhighlight> 現在再執行 git show 會看到對應的 GPG 簽名也附在其內: <syntaxhighlight lang="XML"> $ git show v1.5 tag v1.5 Tagger: Scott Chacon <schacon@gee-mail.com> 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----- commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment' </syntaxhighlight> 稍後我們再學習如何驗證已經簽署的標籤。 =羽量級標籤= 羽量級標籤實際上就是一個保存著對應提交物件的校驗和資訊的檔。要創建這樣的標籤,一個 -a,-s 或 -m 選項都不用,直接給出標籤名字即可: <syntaxhighlight lang="XML"> $ git tag v1.4-lw $ git tag v0.1 v1.3 v1.4 v1.4-lw v1.5 </syntaxhighlight> 現在運行 git show 查看此標籤資訊,就只有相應的提交物件摘要: <syntaxhighlight lang="XML"> $ git show v1.4-lw commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment' </syntaxhighlight> =驗證標籤= 可以使用 git tag -v [tag-name] (譯注:取 verify 的首字母)的方式驗證已經簽署的標籤。此命令會調用 GPG 來驗證簽名,所以你需要有簽署者的公開金鑰,存放在 keyring 中,才能驗證: <syntaxhighlight lang="XML"> $ 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 </syntaxhighlight> 若是沒有簽署者的公開金鑰,會報告類似下面這樣的錯誤: <syntaxhighlight lang="XML"> 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' </syntaxhighlight> =後期加注標籤= 你甚至可以在後期對早先的某次提交加注標籤。比如在下面展示的提交歷史中: <syntaxhighlight lang="XML"> $ 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 </syntaxhighlight> 我們忘了在提交 “updated rakefile” 後為此項目打上版本號 v1.2,沒關係,現在也能做。只要在打標籤的時候跟上對應提交物件的校驗和(或前幾位元字元)即可: <syntaxhighlight lang="XML"> $ git tag -a v1.2 9fceb02 </syntaxhighlight> 可以看到我們已經補上了標籤: <syntaxhighlight lang="XML"> $ git tag v0.1 v1.2 v1.3 v1.4 v1.4-lw v1.5 $ git show v1.2 tag v1.2 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 15:32:16 2009 -0800 version 1.2 commit 9fceb02d0ae598e95dc970b74767f19372d61af8 Author: Magnus Chacon <mchacon@gee-mail.com> Date: Sun Apr 27 20:43:35 2008 -0700 updated rakefile ... </syntaxhighlight> =分享標籤= 預設情況下,git push 並不會把標籤傳送到遠端伺服器上,只有通過顯式命令才能分享標籤到遠端倉庫。其命令格式如同推送分支,運行 git push origin [tagname] 即可: <syntaxhighlight lang="XML"> $ 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 </syntaxhighlight> 如果要一次推送所有(本地新增的)標籤上去,可以使用 --tags 選項: <syntaxhighlight lang="XML"> $ git push origin --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 git@github.com:schacon/simplegit.git * [new tag] v0.1 -> v0.1 * [new tag] v1.2 -> v1.2 * [new tag] v1.4 -> v1.4 * [new tag] v1.4-lw -> v1.4-lw * [new tag] v1.5 -> v1.5 </syntaxhighlight> 現在,其他人克隆共用倉庫或拉取資料同步後,也會看到這些標籤。
返回到「
Pro Git 2.6 貼標籤
」。
導覽
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
wiki工具
wiki工具
特殊頁面
頁面工具
頁面工具
使用者頁面工具
更多
連結至此的頁面
相關變更
頁面資訊
頁面日誌