我需要一种方法按创建日期列出系统中的所有标签,但不确定是否可以通过git-log获取该数据。有什么想法吗?
我需要一种方法按创建日期列出系统中的所有标签,但不确定是否可以通过git-log获取该数据。有什么想法吗?
按标签创建日期排序适用于带注释和轻量级标签:
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tags
正好满足我的需求。谢谢! - Jon Ursenbach%(contents)
添加注释,例如:git for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
。请注意,此处仅返回翻译后的文本内容,不进行任何解释。 - Tim Digginsgit for-each-ref --sort=taggerdate --format '%(tag)'
,该命令用于按照标签的创建时间排序并显示标签名。 - Baris Wanschers--sort=creatordate
适用于带注释和不带注释的标签,但是 --sort=taggerdate
只能与带注释的标签一起使用。测试使用的版本是 git version 2.16.3
。 - austinheimanGit 2.8 (2016年3月)文档中又添加了一个选项追溯到git 1.4.4(2006年10月)。
请参见提交e914ef0(2016年1月5日)由Eric Wong (ele828
)提交。
(由Junio C Hamano -- gitster
--在提交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
如我在 "如何按照 rc-X.Y.Z.W 形式的版本字符串顺序对 git 标签进行排序?" 中详细说明的那样,自 2014 年 6 月 Git 2.0 版本以来,你可以给 git tag
添加一个排序方式。
该排序方式包括了 字段名称(在 git for-each-ref
中列出) taggerdate。这允许使用 git tag --sort=taggerdate
(由 DarVar 在下面 提到)进行排序。
例如,在 git/git
存储库 中,它将最后列出 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
creatordate
! - exhumagit 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
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"
,这对我来说是最好的。 - Mateusz这个一行代码可以显示日期和标签:
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
输出:
2015-09-27 v0.1.0
2019-10-22 v0.10.0
2020-07-08 v0.12.0
2015-11-18 v0.2.0
2020-12-08 v1.0.0
默认情况下,标签按字典顺序排序。如果您希望按日期排序:
git tag --format='%(creatordate:short)%09%(refname:strip=2)' --sort=creatordate
输出:
2015-09-27 v0.1.0
2015-11-18 v0.2.0
2019-10-22 v0.10.0
2020-07-08 v0.12.0
2020-12-08 v1.0.0
请查看VonC的回答以获取更多细节。
为了将注释标签和轻量级标签一起按照提交日期排序,我正在使用:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
这个命令会按照时间顺序列出每个标签及其关联的提交对象 ID。
使用Git 2.10.0.windows.1版本
git tag --sort=taggerdate
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
注:我的git --version
是git version 2.25.1
。
要获取所有标签(-l
),每个标签的消息字段最多显示99行(-n99
),按照时间顺序以最新的标签在最后的方式执行以下操作:
git tag -l -n99 --sort=taggerdate
taggerdate
前面添加减号(-
),如下所示:git tag -l -n99 --sort=-taggerdate
进一步说:
要在标签内进行搜索,并且仅显示名称中包含字符串my string
的标签,请在末尾添加'*my string*'
。请注意,星号 (*
) 是搜索模式中的通配符:
git tag -l -n99 --sort=-taggerdate '*my string*'
-n99
部分:git tag -l --sort=-taggerdate '*my string*'
在之前提到的方法的基础上,我还想在列表中看到实际的标签日期,因此我使用的版本是:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'