?
This document uses PHP Chinese website manual Release
git-tag - 創(chuàng)建,列出,刪除或驗(yàn)證用 GPG 簽名的標(biāo)簽對象
git tag [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>] <tagname> [<commit> | <object>]git tag -d <tagname>… git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>] [--points-at <object>] [--column[=<options>] | --no-column] [--create-reflog] [--sort=<key>] [--format=<format>] [--[no-]merged [<commit>]] [<pattern>…]git tag -v [--format=<format>] <tagname>…
除非-d/-l/-v
給予刪除,列出或驗(yàn)證標(biāo)簽,否則添加標(biāo)簽引用refs/tags/。
除非-f
給出,否則指定的標(biāo)記不能存在。
如果-a
,-s
或-u <keyid>
其中之一通過,該命令將創(chuàng)建一個tag
對象,并且需要標(biāo)記消息。除非-m <msg>
或者-F <file>
給出,否則啟動編輯器以供用戶輸入標(biāo)簽消息。
如果-m <msg>
或者-F <file>
被給予,并且-a
,-s
和-u <keyid>
不存在,-a
則暗示。
否則,只會創(chuàng)建提交對象的SHA-1對象名稱的標(biāo)記引用(即輕量級標(biāo)記)。
GnuPG 簽名標(biāo)簽對象將在使用-s
或創(chuàng)建時創(chuàng)建-u <keyid>
。當(dāng)-u <keyid>
不使用時,當(dāng)前用戶的提交者身份用于查找用于簽名的 GnuPG 密鑰。配置變量gpg.program
用于指定自定義 GnuPG 二進(jìn)制文件。
標(biāo)記對象(用-a
,,-s
或創(chuàng)建-u
)稱為“注釋”標(biāo)記; 它們包含創(chuàng)建日期,標(biāo)記名稱和電子郵件,標(biāo)記消息以及可選的 GnuPG 簽名。而“輕量級”標(biāo)簽只是一個對象的名稱(通常是一個提交對象)。
帶注釋的標(biāo)簽用于發(fā)布,而輕量級標(biāo)簽則用于私人或臨時對象標(biāo)簽。出于這個原因,一些命名對象的git命令(如git describe
)會默認(rèn)忽略輕量級標(biāo)記。
-a --annotate
制作一個未簽名的帶注釋的標(biāo)簽對象
-s --sign
使用默認(rèn)的電子郵件地址密鑰創(chuàng)建一個 GPG 簽名的標(biāo)簽。
-u <keyid> --local-user=<keyid>
使用給定的密鑰創(chuàng)建一個 GPG 簽名的標(biāo)簽。
-f --force
用給定名稱替換現(xiàn)有標(biāo)簽(而不是失敗)
-d --delete
用給定名稱刪除現(xiàn)有標(biāo)簽。
-v --verify
驗(yàn)證給定標(biāo)簽名稱的 GPG 簽名。
-n<num>
<num> 指定在使用 -l 時打印多少行(如果有)。意味著--list
。
默認(rèn)不打印任何注釋行。如果沒有編號-n
,只打印第一行。如果標(biāo)簽沒有注釋,則會顯示提交消息。
-l --list
列表標(biāo)簽。使用可選項(xiàng)<pattern>...
,例如git tag --list 'v-*'
,僅列出與模式匹配的標(biāo)簽。
運(yùn)行不帶參數(shù)的“git tag”也會列出所有標(biāo)簽。該模式是一個 shell 通配符(即,使用 fnmatch(3)匹配)。可能會給出多種模式; 如果它們中的任何一個匹配,則顯示該標(biāo)簽。
如果提供了任何其他類似列表的選項(xiàng),則隱式提供此選項(xiàng)--contains
。有關(guān)詳細(xì)信息,請參閱每個選項(xiàng)的文檔。
--sort=<key>
根據(jù)給定的關(guān)鍵字進(jìn)行排序。前綴-
按值的降序進(jìn)行排序。您可以多次使用--sort = <key>選項(xiàng),在這種情況下,最后一個鍵變?yōu)橹麈I。還支持“版本:refname”或“v:refname”(標(biāo)簽名稱被視為版本)。“version:refname”排序順序也可能受“versionsort.suffix”配置變量影響。支持的密鑰與中的密鑰相同git for-each-ref
。排序順序默認(rèn)為tag.sort
變量配置的值(如果存在),否則按字典順序排列。請參閱 git-config [1]。
--color = <when>:尊重--format
選項(xiàng)中指定的任何顏色。該<when>
字段必須是中的一個always
,never
或者auto
(如果<when>
不存在,表現(xiàn)得好像always
給予)。
-i --ignore-case
排序和過濾標(biāo)簽不區(qū)分大小寫。
--column=<options> --no-column
在列中顯示標(biāo)簽列表。有關(guān)選項(xiàng)語法,請參閱配置變量column.tag。--column
與--no-column
不帶選項(xiàng)相當(dāng)于always
和never
分別。
此選項(xiàng)僅適用于列出不帶注釋行的標(biāo)簽時。
--contains <commit>
只列出包含指定提交的標(biāo)簽(如果未指定,則為HEAD)。意味著--list
。
--no-contains <commit>
只列出不包含指定提交的標(biāo)簽(如果未指定,則為HEAD)。意味著--list
。
--merged <commit>
僅列出可從提交的提交(HEAD
如果未指定)可訪問的列表標(biāo)記,與之不兼容--no-merged
。
--no-merged <commit>
僅列出其提交無法從指定提交(HEAD
如果未指定)到達(dá)的標(biāo)記,與--merged
不兼容。
--points-at <object>
只列出給定對象的標(biāo)簽(HEAD,如果未指定)。意味著--list
。
-m <msg> --message=<msg>
使用給定的標(biāo)簽消息(而不是提示)。如果-m
給出了多個選項(xiàng),則它們的值被連接為單獨(dú)的段落。意味著-a
沒有如果-a
,-s
或-u <keyid>
給出。
-F <file> --file=<file>
從給定的文件中獲取標(biāo)簽消息。用于-
從標(biāo)準(zhǔn)輸入讀取消息。意味著-a
沒有如果-a
,-s
或-u <keyid>
給出。
--cleanup=<mode>
該選項(xiàng)設(shè)置標(biāo)簽消息的清理方式。該<mode>
可以是一個verbatim
,whitespace
和strip
。該strip
模式是默認(rèn)的。該verbatim
模式根本不會改變消息,whitespace
僅刪除前導(dǎo)/尾隨空白行并strip
刪除空白和注釋。
--create-reflog
為標(biāo)簽創(chuàng)建一個 reflog。要全局啟用標(biāo)記 reflogs,請參閱core.logAllRefUpdates
git-config [1]。否定形式--no-create-reflog
只會覆蓋較早的形式--create-reflog
,但目前并不否定這種core.logAllRefUpdates
設(shè)置。
<tagname>
要創(chuàng)建,刪除或描述的標(biāo)記的名稱。新的標(biāo)簽名稱必須通過由git-check-ref-format [1]定義的所有檢查。其中一些檢查可能會限制標(biāo)簽名稱中允許的字符。
<commit> <object>
新標(biāo)簽將引用的對象,通常是提交。默認(rèn)為HEAD。
<format>
%(fieldname)
從顯示的標(biāo)記ref和指向的對象中插入一個字符串。格式與 git-for-each-ref [1] 的格式相同。未指定時,默認(rèn)為%(refname:strip=2)
。
默認(rèn)情況下,git tag
在符號默認(rèn)模式下(-s)將使用提交者身份(表單Your Name <your@email.address>
)來查找密鑰。如果您想使用其他默認(rèn)密鑰,則可以在存儲庫配置中指定它,如下所示:
[user] signingKey = <gpg-keyid>
pager.tag
只有在列出標(biāo)簽時才受到尊重,即何時-l
使用或暗示。默認(rèn)是使用尋呼機(jī)。請參閱git-config [1]。
當(dāng)你標(biāo)記錯誤提交并且你想要重新標(biāo)記時,你應(yīng)該怎么做?
如果你從未推出任何東西,只需重新標(biāo)記即可。用“-f”替換舊的。你完成了。
但是如果你推出了一些東西(或者其他人可能會直接讀取你的存儲庫),那么其他人就會看到舊的標(biāo)簽。在這種情況下,您可以執(zhí)行以下兩件事之一:
理智的事情。只要承認(rèn)你搞砸了,并使用不同的名字。其他人已經(jīng)看到一個標(biāo)簽名稱,如果你保持相同的名稱,你可能會遇到兩個人都擁有“版本X”的情況,但他們實(shí)際上有different
“X”。所以把它叫做“X.1”,并且用它來完成。
瘋狂的事情。你真的想叫新版本“X”,even though
其他人已經(jīng)看到了舊版本。所以git tag -f
再次使用,就好像你還沒有發(fā)布舊版本。
但是,Git不會(也不應(yīng)該)更改用戶背后的標(biāo)簽。所以如果有人已經(jīng)拿到了舊標(biāo)簽,那么git pull
在樹上做一個不應(yīng)該讓它們覆蓋舊標(biāo)簽。
如果有人從您那里獲得發(fā)布標(biāo)簽,您不能只更新自己的標(biāo)簽來更改標(biāo)簽。這是一個很大的安全問題,因?yàn)槿藗儽仨毮軌蛐湃嗡麄兊臉?biāo)簽名稱。如果你真的想要做這個瘋狂的事情,你只需要付諸行動,并告訴人們你搞砸了。你可以通過發(fā)表一個非常公開的聲明來說明:
Ok, I messed up, and I pushed out an earlier version tagged as X. I then fixed something, and retagged the *fixed* tree as X again.If you got the wrong tag, and want the new one, please deletethe old one and fetch the new one by doing: git tag -d X git fetch origin tag X to get my updated tag.You can test which tag you have by doing git rev-parse X which should return 0123456789abcdef.. if you have the new version.Sorry for the inconvenience.
這看起來有點(diǎn)復(fù)雜嗎?它應(yīng)該是。沒有辦法自動“修復(fù)”它是不正確的。人們需要知道他們的標(biāo)簽可能已被更改。
如果你跟隨別人的樹,你很可能使用遠(yuǎn)程跟蹤分支(例如。refs/remotes/origin/master
)。您通常需要從另一端的標(biāo)簽。
另一方面,如果您正在提取,因?yàn)槟M麖钠渌艘淮涡院喜?,您通常不希望從那里獲取標(biāo)簽。這種情況通常發(fā)生在靠近頂層的人群,但不限于他們。僅僅是凡人在互相拉扯時不一定要自動獲得來自其他人的私人定位點(diǎn)標(biāo)簽。
通常,郵件列表中的“請拉”郵件只提供兩條信息:回購網(wǎng)址和分行名稱; 這被設(shè)計(jì)成在git fetch
命令行末尾很容易剪切和粘貼:
Linus, please pull from git://git..../proj.git master to get the following updates...
變?yōu)椋?/p>
$ git pull git://git..../proj.git master
在這種情況下,您不希望自動關(guān)注其他人的標(biāo)簽。
Git 的一個重要方面是其分布式特性,主要意味著系統(tǒng)中沒有固有的“上游”或“下游”。從表面上看,上面的例子似乎表明標(biāo)簽名稱空間是由上層人員擁有的,標(biāo)簽只向下流動,但事實(shí)并非如此。它只顯示使用模式?jīng)Q定誰對哪些標(biāo)簽感興趣。
一次性拉動表明提交歷史現(xiàn)在正跨越一圈人群之間的邊界(例如“主要對內(nèi)核的網(wǎng)絡(luò)部分感興趣的人”),他們可能擁有自己的一組標(biāo)簽(例如“這是來自聯(lián)網(wǎng)小組的第三個發(fā)布候選版本,被推薦用于 2.6.21 發(fā)行版的一般消費(fèi)“)給另一個圈子的人(例如”整合各種子系統(tǒng)改進(jìn)的人“)。后者通常對前一組內(nèi)部使用的詳細(xì)標(biāo)簽不感興趣(這就是“內(nèi)部”的含義)。這就是為什么在這種情況下不要自動跟隨標(biāo)簽的原因。
很可能在網(wǎng)絡(luò)人員中,他們可能想要將標(biāo)簽內(nèi)部交換到他們的組,但在該工作流程中,他們很可能通過具有遠(yuǎn)程跟蹤分支來跟蹤彼此的進(jìn)度。同樣,啟發(fā)式自動遵循這樣的標(biāo)簽是一件好事。
如果您從其他VCS導(dǎo)入了一些更改,并且希望為主要版本添加標(biāo)簽,則可以指定嵌入標(biāo)簽對象內(nèi)的日期; 例如,標(biāo)簽對象中的這些數(shù)據(jù)會影響gitweb界面中標(biāo)簽的排序。
要設(shè)置未來標(biāo)記對象中使用的日期,請?jiān)O(shè)置環(huán)境變量GIT_COMMITTER_DATE(請參閱稍后對可能值的討論;最常見的形式是“YYYY-MM-DD HH:MM”)。
例如:
$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1
GIT_AUTHOR_DATE
,GIT_COMMITTER_DATE
環(huán)境變量支持以下日期格式:
Git內(nèi)部格式
這是<unix timestamp> <time zone offset>
,在這里<unix timestamp>
是從unix新紀(jì)元的秒數(shù)。<time zone offset>
是UTC的正數(shù)或負(fù)數(shù)偏移量。例如CET(比UTC早1小時)是+0100
。
RFC 2822
例如,RFC 2822 所描述的標(biāo)準(zhǔn)電子郵件格式Thu, 07 Apr 2005 22:13:13 +0200
。
ISO 8601
例如,ISO 8601 標(biāo)準(zhǔn)規(guī)定的時間和日期2005-04-07T22:13:13
。解析器也接受一個空格而不是T
字符。
注意 | 另外,日期部分被接受為以下格式:YYYY.MM.DD,MM / DD / YYYY和DD.MM.YYYY。 |
---|