到目前为止,我有:
git rev-parse <tagname> | xargs git cat-file -p
Run Code Online (Sandbox Code Playgroud)
但这不是解析最容易的事情.我希望有类似git-log的--pretty选项,所以我可以抓住我需要的信息.
有任何想法吗?谢谢
Nei*_*hew 31
获得相同信息的更直接方法是:
git cat-file tag <tagname>
Run Code Online (Sandbox Code Playgroud)
这使用单个命令并避免管道.
我在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
Run Code Online (Sandbox Code Playgroud)
mip*_*adi 26
git show $TAG 将显示标记的信息,以及它指向的提交.
如果你有一些已经适合你的东西,但是输入不方便,你可以随时设置一个别名:
[alias]
showtag = !sh -c 'git rev-parse $1 | xargs git cat-file -p' -
Run Code Online (Sandbox Code Playgroud)
并称之为:
$ git showtag my-tag-name
Run Code Online (Sandbox Code Playgroud)
小智 8
这已经很久以前就已经得到了解答,但仍然是最好的搜索结果,即使它不再是最好的解决方案,所以这里有:
命令:
git for-each-ref refs/tags/$TAG --shell --format='
TAG=%(refname)
COMMIT=%(objectname)
TAGGER=%(tagger)
EMAIL=%(taggeremail)
DATE=%(taggerdate)
CONTENTS=%(contents)
'
Run Code Online (Sandbox Code Playgroud)
--shell为Shell脚本引用.还有--perl, - python和--tcl.如果您不想将整个格式写为命令行选项,您也可以将其放在file.txt中并执行以下操作:
git for-each-ref refs/tags/<tag> --shell --format="$(cat file.txt)"
Run Code Online (Sandbox Code Playgroud)
输出:
TAG='refs/tags/4.1.0-RC1'
COMMIT='973cc103f942330550866588177fe53ea5765970'
TAGGER='ml_'
EMAIL='<ml@example.org>'
DATE='Fri Sep 16 14:14:50 2016 +0200'
CONTENTS='Release 3:
* INSTALL.md added.
* GIT.md modified.
'
Run Code Online (Sandbox Code Playgroud)
更多信息请访问:https: //git-scm.com/docs/git-for-each-ref
| 归档时间: |
|
| 查看次数: |
20338 次 |
| 最近记录: |