標籤是 Git 的一個簡單方面,讓您可以識別程式碼的特定版本釋出。您可以將標籤視為一個不會改變的分支。一旦它被創建,就失去了改變提交歷史的能力。
在 Git 中有兩種標籤: 註解標籤 和 輕量標籤。它們都可以讓您參考儲存庫中的特定提交,但在可以存儲的元數據量上有所不同。
註解標籤會將額外的元數據(例如作者名稱、版本說明、標籤消息和日期)作為完整對象存儲在 Git 數據庫中。所有這些數據對於您的專案的 公開發行 都非常重要。
標籤還可以包括更具描述性的標籤消息或註解,就像 合併時的提交消息 一樣。通常,這是透過使用(-a
表示註解)來實現的:
$ git tag -a v1.0.0
執行此命令會創建一個新的註解標籤,標識版本 v1.0.0。然後該命令會打開您的提交編輯器,以便您可以填寫元數據。
若您想要添加標籤消息,可以傳遞 -m
選項,這是一種類似於 git commit -m
的方法。
$ git tag -a v1.0.0 -m "釋出版本 v1.0.0"
輕量標籤是為 Git 儲存庫添加標籤的最簡單方式,因為它們僅存儲所指向的提交的哈希值。它們是在沒有 -a、-s 或 -m 選項的情況下創建的,並且不包含任何額外信息。
輕量標籤本質上是指向提交的“書籤”,它們只是名稱和指向提交的指針,方便創建指向相關提交的快速鏈接。 來自 Bitbucket 的教學
要創建新的輕量標籤,請執行以下命令:
$ git tag v1.0.0
列出標籤 - git tag
當您想列出所有現有標籤時,可以使用此命令,或者您可以使用 git tag -l 'v1.1.*'
過濾列表,*
充當通配符。它將返回標有 v1.1
的標籤列表。
您會注意到當您調用 git tag
時,您無法看到註解的內容。要預覽它們,您必須在命令中添加 -n
:git tag -n3
。
$ git tag -l -n3
v1.0 釋出版本 1.0
v1.1 釋出版本 1.1
v1.2 釋出版本 1.2
該命令列出了所有現有標籤,最多顯示 3 行其標籤消息。預設情況下,-n
僅顯示第一行。
標籤詳情 - git show <tag_identifier>
該命令會顯示您所標記的標籤詳情和信息。
$ git show v1.0
tag v1.0
Tagger: Kolosek
Date: Fri May 11 10:45:33 2018 +0100
釋出版本 1.0
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iMTvhAA...
-----END PGP SIGNATURE-----
commit 7d44b6bb8abb96dee33f32610f56441496d77e8a
Author: Kolosek
Date: Fri May 11 9:50:13 2018 +0100
編輯登入表單
...
它會打印作者的名稱、創建日期、消息、GnuPG 簽名(如果有)以及有關所引用提交的信息。如果該標籤是輕量標籤,輸出將僅限於引用提交的相關信息。
編輯標籤 - git tag -a -f <tag_identifier> <commit_id>
如果您嘗試創建一個與已有標籤同名的標籤,Git 將會拋出錯誤:fatal: tag 'v1.0' already exists
。
您不必刪除它並重新添加標籤,您可以簡單地替換它,同時保留現有的描述。選擇您提交歷史中的某個位置,使用 <commit_id>
指定要移動標籤的位置,並在命令中添加 -f
或 -force
。
請記得在進行這樣的“強制”更改時通知團隊成員。如果他們仍然擁有“舊”的標籤版本,當他們試圖推送到伺服器時可能會造成衝突!
如果您已經將標籤推送到伺服器並想要修正它,請確保您的本地標籤版本是正確的,然後運行 以下命令: git push origin -f --tags
。
刪除標籤 - git tag -d <tag_identifier>
一般來說,沒有理由刪除標籤,因為它們的成本低且不會佔用任何資源,除非您錯誤地創建了一個指向錯誤提交的標籤。
如果該標籤已經被推送,而您需要從遠端儲存庫中刪除它,請運行:$ git push origin :v1.0
。
發布標籤 - git push <location> <tag_identifier>
標籤只是指向您的本地儲存庫的引用,並且不會自動 與其餘程式碼一起推送到遠端儲存庫。相反,您可以單獨推送標籤,或者運行 git push --tags
,這將一次性推送所有標籤。這可以類似於推送分支的方式進行:
$ git push origin v1.0
排序標籤 - git tag --sort=<type>
當查看具有大量標籤的專案時,使用 排序選項 可以很方便。支持的類型有:
refname
(按字典順序排序),version:refname
或 v:refname
(在這裡標籤名稱被視為版本)。git tag -l --sort=-version:refname "v*"
在這裡,我列出了所有名稱以 "v" 開頭的標籤,按照它們的版本進行排序。
難道git tag不就是社交媒體中的 #tag,只是它有自己的方式?它幫助您返回並列出所有之前的版本釋出!
在您閱讀的同時,請注意 Kolosek 總是樂意提供幫助,讓您的想法變為現實。如果您需要幫助,可以隨時通過社交媒體聯繫 Kolosek。Twitter 也許是個不錯的選擇?
原文出處:https://dev.to/neshaz/a-tutorial-for-tagging-releases-in-git-147e