2010-11-11 146 views
37

在下面幾行:「混帳形容」忽略標籤

$ git tag -n1 
v1.8  Tagged the day before yesterday 
v1.9  Tagged yesterday 
v2.0  Tagged today 
$ git describe 
v1.9-500-ga6a8c67 
$ 

任何人都可以解釋爲什麼V2.0標籤不使用「git的描述」,以及如何解決這一問題? v2.0標籤已被推送,所以我猜測我不能只是刪除並重新添加它。

+0

另請參閱https://stackoverflow.com/questions/33851344/git-describe-fails-to-return-most-recent-annotated-tag – caw 2017-07-03 19:13:04

回答

48

git describe默認情況下僅使用帶註釋的標籤。指定--tags選項以使其使用輕量級代碼

確保您簽出了正確的提交(git rev-parse HEAD)。帶註釋的標籤使用git tag -a創建。如果你做git show <tagname>,你只看到提交,它是一個輕量級標記,如果你看到一個附加標記消息它是一個帶註釋的標記。

+5

「git describe --tags」產生與上面相同的輸出。 – knipknap 2010-11-11 12:54:19

+0

你也可以嘗試使用'--all'來使其全部使用。是由標籤描述的HEAD? (只是爲了確保) – knittl 2010-11-11 12:55:39

+0

「git describe --all」打印「頭像/主人」。 v2.0標籤應用於主分支。 (我想這意味着它描述了HEAD?) – knipknap 2010-11-11 13:06:37

13

當這發生在我們身上時,這是兩個標籤應用於相同提交的情況。你可以發現,如果這是通過運行

# git log --oneline --decorate=short 
deba4b4 (tag: v1.1.0.20.0, tag: v1.1.0.19.0) 001 New buildnumber 

的情況下,這裏有兩個標籤,一個是19版和其他的20 20 19後標籤,但相同的承諾。在這種情況下,描述返回

# git describe --tags 
v1.1.0.19.0 

我不知道它爲什麼這樣做,但這是它似乎如何處理重複標籤。

可能發生這種情況的另一種情況是,如果您在分支中有更接近您的標籤。該案例已在this blog post中解釋。

+0

我有類似的問題,所以我想最好的辦法是防止創建重複的註釋標籤。你知道我能做到嗎? – 2015-11-22 05:49:21

+0

@jbucaran我想你需要運行一個檢查,然後標記或不標記的基礎上。這可能是另一個問題的話題 – eis 2016-11-22 15:34:39

6

的問題是git tag顯示所有分支都標籤而git describe只有在提交這在目前分支都可以使用標籤。

下面是一個例子(爲什麼我竟然來到這裏的原因):

$ git tag | tail -n3 
v0.4.0 
v0.4.1 
v0.4.2 

它顯示可用的最新標籤是v0.4.2,但是這是我的git describe輸出:

$ git describe --tags 
v0.4.0-2-acd334c 

我在開發分支上。當我深入到日誌中,我看到的確是最近的標籤不可在當前分支:

$ git log --oneline --decorate=short | grep '\(tag\:' | head -n3 
acd334c (tag: v0.4.0) Merge pull request #1061 
988fe5e (tag: v0.3.6) Merge pull request #859 
5f97274 (tag: v0.3.5) Merge pull request #646 

所以在我的情況下,開發商決定專門創建一個新的發佈分行標記發佈其導致開發分支不再符合標籤的日期。

希望幫助和感謝@eis的想法與檢查日誌。