获取git标签的时间和日期


87

我有一个正在使用git的项目,并使用标签标记了所有发行版。

$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0

我的目标是在Web界面中列出发行和发行日期(标签/提交日期=发行日期)。目前,我们使用列出所有发行版git tag

如何获得标记制作的时间和日期(或标记指向的提交)?


2
在此精确说明一下,这是您要遵循的标签的提交日期。由于标签没有日期。
jobwat


Answers:


71

使用自--format变量git log

git log -1 --format=%ai MY_TAG_NAME

3
提示-用标签名称替换“ TAG”。例如,git log -1 --format=%ai v0.2.3
Tobias

5
如果您想要ISO8601,请执行--format=%aI(大写“ I”)
Chaim Eliyah,

git log -1 --format=%ai MY_TAG_NAME | cat禁用页面视图
elinx

“ -1”在做什么?
Blademaster

@Blademaster它告诉git log仅显示一个提交,该提交与该标记有关。默认行为是显示所有从指定的回溯到存储库中的第一次提交的提交。
user4815162342

82

这总是对我有用:

git log --tags --simplify-by-decoration --pretty="format:%ci %d"

如果需要其他日期格式,请查阅git-log联机帮助页的“ PRETTY FORMATS”部分,以获取格式字符串的详细信息。


13
需要警告的是,它将列出提交的日期/时间,但未列出带注释的标签的日期/时间。
WiSaGaN 2014年

4
只需taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'在您的.gitconfig文件的[alias]部分中放入(请注意单引号,而不是双引号),现在您有了git taglog命令:)
Lambart

39

另一种选择:

git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"

有关格式选项,请参见https://git-scm.com/docs/git-for-each-ref#_field_names

%(creatordate) 给出所指向的提交日期,以查看使用时创建标记的日期 %(taggerdate)

您可以直接合并外壳:

$> 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'

3
这是获取标签日期的最佳答案。
Joseph K. Strauss

另外,您也可以git for-each-ref --format="%(taggerdate:unix)" refs/tagsgit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD

1
谢谢!所有其他答案仅给出提交日期,而不是标签日期。
山姆

是的,因为它仅显示实际的标签,而不是所有的提交,所以最好的答案是,可耻的cr脚所以其他答案的评分更高。
samthebest,

2
打字少的结果相同:git tag --format "%(refname:short) %(creatordate:short)"
Andrew Spencer

27

请注意,上述两种解决方案都可以为您提供提交日期,这与为该发布标记了要发布的提交日期可能大不相同。要获取标签本身的日期,您必须使用查找标签本身,然后使用rev-parse读取标签cat-file,然后对其进行解析。一些管道:

git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'


好,唯一的问题是结果未格式化(1419372909 -0300)
Jose_GD 2014年

一旦有了rev-parse的提交ID,我相信您可以做到:git rev-parse v1.0.0 | xargs git show -s --pretty =%aI
Keith

@Keith现在你又回到了展示的承诺,而不是被标记的日期,至少附注的标签作者日期

3

git tag命令中没有简单的选项可以做到这一点。我发现最方便的跑步

git log --decorate=full

列出所有提交,包括标签(如果有的话)。对于仅列出已标记使用的提交

git log --decorate=full --simplify-by-decoration

有关详细信息,请使用

git help log

2

可以使用gawk(not awk)将“ tagger”行中的日期转换为易于理解的格式:

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

和示例(dnsmasqgit 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

你会从你身边尝试吗?
维沙尔·帕特尔

一定。它可以正常工作,dnsmasq例如git repo: $ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }' Wed May 18 16:52:12 CEST 2016
vladis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.