到目前爲止,我有:如何從git標籤中讀取標籤信息?
git rev-parse <tagname> | xargs git cat-file -p
但這不是解析最簡單的事情。我希望能有類似git-log
的--pretty
選項,這樣我就可以抓取我需要的信息。
任何想法?謝謝
到目前爲止,我有:如何從git標籤中讀取標籤信息?
git rev-parse <tagname> | xargs git cat-file -p
但這不是解析最簡單的事情。我希望能有類似git-log
的--pretty
選項,這樣我就可以抓取我需要的信息。
任何想法?謝謝
更直接的方式得到相同的信息是:
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
git show $TAG
將向您顯示標記的信息以及它指向的提交。
如果你有一些已經爲你工作,但笨重的打字,你總是可以設置一個別名:
[alias]
showtag = !sh -c 'git rev-parse $1 | xargs git cat-file -p' -
裏調用:
$ git showtag my-tag-name
這已經是很久以前回答,但仍然是即使它不是最好的解決辦法頂部的搜索結果了,所以這裏有雲:
命令:
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.
'
這太好了,謝謝!很好的例子。 – quornian 2014-04-10 16:37:53