如何在创建日期之前列出我的Git存储库中的所有标记?

时间:2011-06-07 18:30:50

标签: git

我需要一些方法来列出系统中所有标签的创建日期,但我不确定是否可以通过git-log获取该数据。想法?

9 个答案:

答案 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

  

对于提交和标记对象,特殊creatordatecreator   字段将对应于相应的日期或名称 - 电子邮件日期元组   来自committertagger字段,具体取决于对象类型   这些用于处理带注释和轻量级标签的混合

因此使用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 }'