2010-11-15 73 views
18

到目前爲止,我有:如何從git標籤中讀取標籤信息?

git rev-parse <tagname> | xargs git cat-file -p 

但這不是解析最簡單的事情。我希望能有類似git-log--pretty選項,這樣我就可以抓取我需要的信息。

任何想法?謝謝

回答

21

更直接的方式得到相同的信息是:

git cat-file tag <tagname> 

這使用一個單一的命令,並避免管道。

我在bash腳本中使用此如下:

if git rev-parse $TAG^{tag} -- &>/dev/null 
then 
    # Annotated tag 
    COMMIT=$(git rev-parse $TAG^{commit}) 
    TAGGER=($(git cat-file tag $TAG | grep '^tagger')) 
    N=${#TAGGER} # Number of fields 
    DATE=${TAGGER[@]:$N-2:2} # Last two fields 
    AUTHOR=${TAGGER[@]:1:$N-3} # Everything but the first and last two 
    MESSAGE=$(git cat-file tag $TAG | tail -n+6) 
elif git rev-parse refs/tags/$TAG -- &>/dev/null 
then 
    # Lightweight tag - just a commit, basically 
    COMMIT=$(git rev-parse $TAG^{commit}) 
else 
    echo "$TAG: not a tag" >&2 
fi 
+0

這太好了,謝謝!很好的例子。 – quornian 2014-04-10 16:37:53

17

git show $TAG將向您顯示標記的信息以及它指向的提交。

如果你有一些已經爲你工作,但笨重的打字,你總是可以設置一個別名:

[alias] 
     showtag = !sh -c 'git rev-parse $1 | xargs git cat-file -p' - 

裏調用:

$ git showtag my-tag-name 
+1

謝謝。我應該提到,我還設法達到'git show --quiet --pretty =「的格式:」$ TAG「,但是大部分與上面相同。 – quornian 2010-11-15 15:35:23

+0

@quornian:你可以使用Git的別名功能。我在答案中提供了一個例子。 – mipadi 2010-11-15 18:09:35

4

這已經是很久以前回答,但仍然是即使它不是最好的解決辦法頂部的搜索結果了,所以這裏有雲:

命令:

git for-each-ref refs/tags/$TAG --shell --format=' 
TAG=%(refname) 
COMMIT=%(objectname) 
TAGGER=%(tagger) 
EMAIL=%(taggeremail) 
DATE=%(taggerdate) 
CONTENTS=%(contents) 
' 

--shell d oes引用Shell腳本。還有- perl,--python- tcl。 如果你不想寫全格式與命令行選項,你也可以把它放在一個file.txt的和做到這一點:

git for-each-ref refs/tags/<tag> --shell --format="$(cat file.txt)" 

輸出:

TAG='refs/tags/4.1.0-RC1' 
COMMIT='973cc103f942330550866588177fe53ea5765970' 
TAGGER='ml_' 
EMAIL='<[email protected]>' 
DATE='Fri Sep 16 14:14:50 2016 +0200' 
CONTENTS='Release 3: 
* INSTALL.md added. 
* GIT.md modified. 
' 

更多的信息在這裏: https://git-scm.com/docs/git-for-each-ref