如何从 GIT 标签读取标签信息?

问题描述 投票:0回答:4

到目前为止我已经:

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

但这并不是最容易解析的事情。我希望有类似于

git-log
--pretty
选项的东西,这样我就可以获取我需要的信息。

有什么想法吗?

git git-tag
4个回答
44
投票

获取相同信息的更直接方法是:

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

35
投票

git show $TAG
将向您显示标签的信息以及它指向的提交。

如果您有一些已经适合您的东西,但难以输入,您可以随时设置别名:

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

并调用它:

$ git showtag my-tag-name

14
投票

这个问题很久以前就已经得到了回答,但仍然是最热门的搜索结果,尽管它不再是最好的解决方案,所以这里是:

命令:

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

--shell 对 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'
TYPE='tag'
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


0
投票

git tag --format
知道与 `git for-each-ref 字段名称 相同的格式,因此可以编写例如:

git tag -l --format='%(tag) (taggername) %(taggeremail:mailmap,trim) %(taggerdate:iso-strict) %(contents)' <tagname>

或仅列出带注释的标签及其详细信息:

git tag -l --omit-empty --format='%(if)%(tag)%(then)%(tag) %(taggername) %(taggeremail:mailmap,trim) %(taggerdate:iso-strict) %(contents:subject)%(end)'
© www.soinside.com 2019 - 2024. All rights reserved.