获取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