我有一个正在使用git的项目,并使用标签标记了所有发行版。
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
我的目标是在Web界面中列出发行和发行日期(标签/提交日期=发行日期)。目前,我们使用列出所有发行版git tag
。
如何获得标记制作的时间和日期(或标记指向的提交)?
我有一个正在使用git的项目,并使用标签标记了所有发行版。
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
我的目标是在Web界面中列出发行和发行日期(标签/提交日期=发行日期)。目前,我们使用列出所有发行版git tag
。
如何获得标记制作的时间和日期(或标记指向的提交)?
Answers:
使用自--format
变量git log
:
git log -1 --format=%ai MY_TAG_NAME
git log -1 --format=%ai v0.2.3
。
--format=%aI
(大写“ I”)
git log -1 --format=%ai MY_TAG_NAME | cat
禁用页面视图
git log
仅显示一个提交,该提交与该标记有关。默认行为是显示所有从指定的回溯到存储库中的第一次提交的提交。
这总是对我有用:
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
如果需要其他日期格式,请查阅git-log联机帮助页的“ PRETTY FORMATS”部分,以获取格式字符串的详细信息。
taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'
在您的.gitconfig文件的[alias]部分中放入(请注意单引号,而不是双引号),现在您有了git taglog命令:)
另一种选择:
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'
git for-each-ref --format="%(taggerdate:unix)" refs/tags
在git for-each-ref --format="%(taggerdate:raw)" refs/tags
git tag --format "%(refname:short) %(creatordate:short)"
请注意,上述两种解决方案都可以为您提供提交日期,这与为该发布标记了要发布的提交日期可能大不相同。要获取标签本身的日期,您必须使用查找标签本身,然后使用rev-parse
读取标签cat-file
,然后对其进行解析。一些管道:
git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
可以使用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
和示例(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
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