How can I list all tags in my Git repository by the date they were created?
我需要某种方式在创建它们的日期之前列出系统中的所有标记,但是不确定是否可以通过git-log获得该数据。想法?
如果是带注释的标签,则可以使用标签日期:
1 | git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags |
但是,如果它是轻量级标签,则没有有关何时创建的信息(它所做的只是命名一个对象)。
Git 2.8(2016年3月)记录了另一个可追溯到git 1.4.4(Oct2006)的选项。
请参见Eric Wong(
(由Junio C Hamano合并-
查看新的
For commit and tag objects, the special
creatordate andcreator
fields will correspond to the appropriate date or name-email-date tuple
from thecommitter ortagger fields depending on the object type.
These are intended for working on a mix of annotated and lightweight tags.
因此,使用
1 2 | git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \ sort -n | awk '{ print $4, $3; }' |
要么:
1 | git tag --sort=-creatordate |
正如我在"如何按rc-X.Y.Z.W形式的版本字符串顺序对git标签进行排序"中所详述的那样,您可以向
该排序顺序包括作为字段名称(在
例如,在
1 2 3 4 5 6 7 | v2.9.1 v2.9.2 v2.9.3 v2.10.0-rc0 v2.10.0-rc1 v2.10.0-rc2 v2.10.0 |
默认顺序不会(
1 2 3 4 5 6 7 8 | 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 |
1 | git log --tags --simplify-by-decoration --pretty="format:%ci %d" |
也很好的输出(没有日期字段):
1 | git log --tags --decorate --simplify-by-decoration --oneline |
要查看具有依赖项和条带化线性提交的完整历史记录(仅重要事件,如标记和分支/合并):
1 | git log --graph --decorate --simplify-by-decoration --oneline --all |
这种单线显示日期和标签,没有大惊小怪。
1 | git tag --format='%(creatordate:short)%09%(refname:strip=2)' |
输出:
1 2 3 4 | 2015-04-01 storaged-2.0.0 2015-06-11 storaged-2.1.0 2015-08-06 storaged-2.1.1 ... |
如果您不喜欢默认标签的排序方式,则可以使用选项
要根据提交日期对带注释的标签和轻量级标签进行完全排序,我在使用:
1 2 | git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \ sort -n | awk '{ print $4, $3; }' |
该命令将按时间顺序列出每个标签和关联的提交对象ID。
1 | git tag --sort=-taggerdate |
根据手册页,"前缀-以值的降序排序。"
使用Git
<5233>
以下内容取决于提交,因此,提交是否包含日期信息并不重要:
1 | git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac |
乔什·李(Josh Lee)的上述答案取决于标签日期,以使订单正确无误。
在前面提到的方法的基础上,我还希望在列表上看到实际的标签日期,因此我的使用版本是:
1 | git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }' |