我需要一些方法来列出系统中所有标签的创建日期,但我不确定是否可以通过git-log获取该数据。想法?
答案 0 :(得分:141)
如果是带注释的标签,您可以使用标签日期:
git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags
但如果它是一个轻量级标签,则没有关于它何时被创建的信息(它只是命名一个对象)。
答案 1 :(得分:41)
Git 2。8(2016年3月)记录了另一个选项dating back to git 1.4.4 (Oct2006)
请commit e914ef0查看Eric Wong (ele828
)(2016年1月5日)
(由Junio C Hamano -- gitster
--合并于commit 108cb77,2016年1月20日)
查看新的Documentation/git-for-each-ref.txt
对于提交和标记对象,特殊
creatordate
和creator
字段将对应于相应的日期或名称 - 电子邮件日期元组 来自committer
或tagger
字段,具体取决于对象类型 这些用于处理带注释和轻量级标签的混合。
因此使用creatordate
可以使用标记:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
或者:
git tag --sort=-creatordate
正如我在“How to sort git tags by version string order of form rc-X.Y.Z.W?”中详述的那样,您可以向git tag
添加排序顺序(自2014年6月Git 2.0起)。
该排序顺序包括field name (listed in git for-each-ref
) taggerdate 。这允许git tag --sort=taggerdate
(由DarVar below提及)
例如,在git/git
repo中,它会列出最后的v2.10.0
标记:
v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0
默认顺序不会是{git tag
):
v2.1.2
v2.1.3
v2.1.4
v2.10.0
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.2.0
答案 2 :(得分:30)
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
来自(没有日期字段)的输出也很好:
git log --tags --decorate --simplify-by-decoration --oneline
要查看包含依赖项和条带线性提交的完整历史记录(仅限基本事件,如标记和分支/合并):
git log --graph --decorate --simplify-by-decoration --oneline --all
答案 3 :(得分:11)
要根据提交日期对已注释的标签和轻量级标签进行排序,我使用:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
此命令将按时间顺序列出每个标记和关联的提交对象ID。
答案 4 :(得分:10)
这个单行显示日期&标签没有任何大惊小怪。
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
输出:
2015-04-01 storaged-2.0.0
2015-06-11 storaged-2.1.0
2015-08-06 storaged-2.1.1
...
如果您不喜欢默认情况下标记的排序方式,则可以使用选项--sort=creatordate
按日期排序。有关详细信息,请参阅VonC answer。
答案 5 :(得分:8)
git tag --sort=-taggerdate
根据手册页,"前缀 - 按值的降序排序。 "
git tag
使用与git-for-each-ref
相同的排序键,这是键记录的位置。
答案 6 :(得分:6)
使用Git version 2.10.0.windows.1
git tag --sort=taggerdate
答案 7 :(得分:4)
以下内容依赖于提交,因此它是否具有提交日期信息无关紧要:
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
Josh Lee的上述答案依赖于标签日期来确保订单正确。
答案 8 :(得分:3)
在前面提到的方法的基础上,我还希望在列表中看到实际的标签日期,因此我的使用版本是:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'