git 2.7(Q4 2015)将直接使用分支排序git branch
:
请参见commit aa3bc55,commit aedcb7d,commit 1511b22,commit f65f139,...(2015年9月23日),commit aedcb7d,commit 1511b22,commit ca41799(2015年9月24日)和由Karthik Nayak()提交f65f139,...(2015年9月23日)。(由Junio C Hamano合并--在commit 7f11b48中,2015年10月15日)KarthikNayak
gitster
特别是,提交aedcb7d:
branch.c
:使用' ref-filter
'API
使' branch.c
' ref-filter
use''API遍历引用排序。这将删除在' branch.c
'中使用的大多数代码,以对' ref-filter
'库的调用来替换它。
它添加了选项--sort=<key>
:
根据给定的键排序。
前缀-
以值的降序排序。
您可以--sort=<key>
多次使用该选项,在这种情况下,最后一个键成为主键。
支持的键与中git for-each-ref
的键相同。
排序顺序默认为基于完整的refname(包括refs/...
前缀)进行排序。这首先列出了分离的HEAD(如果存在),然后列出了本地分支,最后列出了远程跟踪分支。
这里:
git branch --sort=-committerdate
或者(请参阅下面的Git 2.19)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
另请参见Karthik Nayak()的commit 9e46833(2015年10月30日)。
帮助:Junio C Hamano()。(通过合并JUNIOÇ滨野- -在提交415095f,2015年11月3日)KarthikNayak
gitster
gitster
当按数值排序时(例如--sort=objectsize
),当两个引用保持相同的值时,就没有回退比较。如Johannes Sixt($ gmane / 280117)所指出的,这可能会导致意外结果(即无法预先确定具有相同值的引用的排列顺序)。
因此,只要其他条件相等,就退回到基于refname的字母比较。
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
使用Git 2.19,可以默认设置排序顺序。
git branch
支持已经有一个配置的branch.sort
像这样git tag
的配置tag.sort
。
参见Samuel Maftoul(``)提交560ae1c(2018年8月16日)。
(由Junio C gitster
Hamano合并--在commit d89db6f中,2018年8月27日)
branch.sort:
当显示时,此变量控制分支的排序顺序git-branch
。
如果没有--sort=<value>
提供“ ”选项,则此变量的值将用作默认值。
要列出远程分支,请使用git branch -r --sort=objectsize
。该-r
标志使它列出远程分支而不是本地分支。
在Git 2.27(2020年第二季度)中,“ git branch
”和其他“ for-each-ref
”变体--sort=<key>
按优先级从高到低的顺序接受了多个选项,但是在--ignore-case
处理“ ”以及使用refname进行平局方面存在一些缺陷,这些问题已得到修复。
参见Jeff King()提交7c5045f和76f9e56(2020年5月3日)。(由Junio C Hamano合并--在6de1630提交中,2020年5月8日)peff
gitster
ref-filter
:仅在所有用户排序后才应用后备refname排序
签字人:杰夫·金
提交9e468334b4(“ ref-filter
:按字母比较的后备”,2015-10-30,Git v2.7.0-rc0- 批号10中列出的合并)教导了ref-filter的后备排序以比较refname。
但这是在错误的级别上完成的,它覆盖了用户对单个“ ”键的比较结果,而不是在用尽所有排序键之后。
--sort
这对于单个“ --sort
”选项正确运行,但对多个选项无效。
我们将打破第一个键与refname的联系,并且永远不会评估第二个键。
为了使事情变得更加有趣,我们有时仅应用此后备!
对于taggeremail
需要字符串比较的
“ ”之类的字段strcmp()
,即使它为0 ,我们也将真正返回结果。
但是对于“ value
”之类的数字“ ”字段taggerdate
,我们确实应用了后备。这就是为什么我们的多重排序测试没有做到这一点:它taggeremail
用作主要比较。
因此,让我们从添加更严格的测试开始。我们将进行一组提交,以表达两个标记器电子邮件,日期和引用名的每种组合。然后,我们可以确认我们的排序以正确的优先级应用,并且将同时击中字符串和值比较器。
那确实显示了错误,并且解决方法很简单:compare_refs()
在所有ref_sorting
键都用完之后,将后备功能移到外部函数。
请注意,在外部函数中,我们没有"ignore_case"
标志,因为它是每个单独ref_sorting
元素的一部分。由于我们没有使用用户的键来进行匹配,因此应该如何回退,这值得商bat。
但是直到现在,我们一直在尝试尊重该标志,因此,侵入性最小的事情就是尝试继续这样做。
由于当前代码中的所有调用者都为所有键设置了标志,也没有为所有键设置标志,因此我们只需从第一个键中拉出标志即可。在一个假设的世界中,用户确实可以单独翻转键的大小写不敏感状态,我们可能需要扩展代码以区分该情况与“ --ignore-case
”一词。