输出git tag按字母顺序排序.我希望它按时间顺序排序(它们被分配的提交日期,而不是它们被创建的日期),否则输出应该保持不变.
我已经尝试过来自http://networkadmin20.blogspot.de/2010/08/howto-list-git-tags-by-date.html的建议,但订单仍然相同.
为了确保它不是我的存储库的错误,我尝试使用干净的存储库:
soeren@ubuntu ~/Projects/sandbox % mkdir chronogit
soeren@ubuntu ~/Projects/sandbox % cd chronogit
soeren@ubuntu ~/Projects/sandbox/chronogit % git init
Initialized empty Git repository in /home/soeren/Projects/sandbox/chronogit/.git/
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % touch a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git add a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'a'
[master (root-commit) f88e0e9] a
0 files changed
create mode 100644 a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'A-first'
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git mv a b
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'c'
[master ecc0c08] c
1 file changed, 0 insertions(+), 0 deletions(-)
rename a => b (100%)
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'C-second'
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git mv b c
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'b'
[master e72682d] b
1 file changed, 0 insertions(+), 0 deletions(-)
rename b => c (100%)
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'B-third'
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag
A-first
B-third
C-second
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git for-each-ref refs/tags --sort=taggerdate --format="%(refname:short)"
A-first
B-third
C-second
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
A-first
C-second
B-third
Run Code Online (Sandbox Code Playgroud)
或者,因为反转它不应该太难:
B-third
C-second
A-first
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论中指出的,这个问题非常相似,所以我尝试了以下内容:
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%ai %d"
2013-09-06 16:08:43 +0200 (HEAD, B-third, master)
2013-09-06 16:08:21 +0200 (C-second)
2013-09-06 16:07:42 +0200 (A-first)
Run Code Online (Sandbox Code Playgroud)
订单很好,但现在我正在格式化......
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%(refname:short)"
%(refname:short)
%(refname:short)
%(refname:short)
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --format="%(refname:short)"
%(refname:short)
%(refname:short)
%(refname:short)
Run Code Online (Sandbox Code Playgroud)
rra*_*val 45
刚用git 2.8.0测试:
git tag --sort=committerdate
Run Code Online (Sandbox Code Playgroud)
有关您可以使用的完整字段名称列表,请参阅https://git-scm.com/docs/git-for-each-ref#_field_names
对于提交和标记对象,特殊字段
creatordate和creator字段将对应于提交者或标记器字段中的相应日期或名称 - 电子邮件日期元组,具体取决于对象类型.这些用于处理带注释和轻量级标签的混合.有名字的电子邮件最新的元组作为其值的字段(
author,committer,和tagger)可以与后缀name,date提取命名组件.
ops*_*dao 24
在git 2.3.3中我可以这样做以按日期排序:
git tag --sort version:refname
Run Code Online (Sandbox Code Playgroud)
PS:为了记录,我在一个重复的问题上也回答了同样的事情
soe*_*ace 19
git tag | xargs -I@ git log --format=format:"%ai @%n" -1 @ | sort | awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)
rfr*_*ebe 13
有关信息,要以相反的顺序获取它,请在其前面加上“-”
git tag --sort=-taggerdate
Run Code Online (Sandbox Code Playgroud)
git log --date-order --tags --simplify-by-decoration --pretty=format:"%ci %d"
Run Code Online (Sandbox Code Playgroud)
正如亚历山大指出的那样应该是
git tag --sort=taggerdate
Run Code Online (Sandbox Code Playgroud)
为了正确的时间顺序。
编辑:*如果您对推送标签的日期感兴趣,如果您对提交日期感兴趣,则应该是“commiterdate”
其他方式:
git log --no-walk --tags --decorate --oneline
Run Code Online (Sandbox Code Playgroud)
例子:
$ git log --no-walk --tags --decorate --oneline | head -n5
e214a28f (tag: v4.20.0, origin/4-stable) Release 4.20.0
519512ae (tag: v4.19.0) Release 4.19.0
a201a5ca (tag: v4.18.0) Release 4.18.0
c5037e4a (tag: v4.17.0) Release 4.17.0
9f19351d (tag: v4.16.0) Release 4.16.0
Run Code Online (Sandbox Code Playgroud)
参考:
| 归档时间: |
|
| 查看次数: |
17917 次 |
| 最近记录: |