获取git标签的时间和date
我有一个使用git的项目,并用一个标签标记了所有的版本。
$ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.3 v1.1.0
我的目标是在Web界面(标签/提交date=发布date)中列出发布和发布date。 目前我们使用git tag
列出所有的版本。
我怎样才能得到标签制作(或提交指向)的时间和date?
使用--format
参数git log
:
git log -1 --format=%ai MY_TAG_NAME
这总是对我有用:
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
如果需要不同的date格式,请参考git-log联机帮助页面的“PRETTY FORMATS”部分以获取格式string的详细信息。
请注意,上述两个解决scheme都会为您提供提交date,与提交标记为发布的时间可能大不相同。 为了得到标签本身的date,你必须用rev-parse
来查找标签,用cat-file
读取它,然后parsing它。 一点pipe道:
git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
还有一个select:
git for-each-ref --format="%(refname:short) | %(creatordate)" refs/tags/*
格式选项见https://git-scm.com/docs/git-for-each-ref#_field_names
%(creatordate)
给出指向的提交date,以查看使用%(taggerdate)
创build标记的date
你可以直接joinshell:
$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" refs/tags/* ref='v1.10' dt='1483807817' ref='v1.11' dt='1483905854' ref='v1.12.0' dt='1483974797' ref='v1.12.1' dt='1484015966' ref='v1.13' dt='1484766542' ref='v1.2' dt='1483414377' ref='v1.3' dt='1483415058' ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'. ref='v1.3.1' dt='1483487085' ref='v1.4' dt='1483730146' ref='v1.9' dt='1483802985'
git tag命令没有简单的选项来做到这一点。 我发现最方便的运行
git log --decorate=full
列出所有提交包括标签,如果有的话。 仅列出使用标记的提交
git log --decorate=full --simplify-by-decoration
详细使用
git help log
人们可以使用gawk
(而不是awk
)将“tagger”行中的date转换为人类可读的:
git rev-parse v4.4-rc1 | xargs git cat-file -p | gawk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }'
如果不喜欢gawk
那么date
可以用来转换unix时间:
git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d
和例子( dnsmasq
git repo):
$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d Wed May 18 16:52:12 CEST 2016