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