使用 Git 2.0(2014 年 6 月),您将能够指定排序顺序!
请参阅提交 b6de0c6,来自提交 9ef176b,由Nguyễn Thái Ngọc Duy ( pclouds
)撰写:
--sort=<type>
按特定顺序排序。
支持的类型是:
- "
refname
" (字典顺序),
- “
version:refname
”或“ v:refname
”(标签名称被视为版本)。
前置“ -
”以反转排序顺序。
所以,如果你有:
git tag foo1.3 &&
git tag foo1.6 &&
git tag foo1.10
这是你会得到的:
# lexical sort
git tag -l --sort=refname "foo*"
foo1.10
foo1.3
foo1.6
# version sort
git tag -l --sort=version:refname "foo*"
foo1.3
foo1.6
foo1.10
# reverse version sort
git tag -l --sort=-version:refname "foo*"
foo1.10
foo1.6
foo1.3
# reverse lexical sort
git tag -l --sort=-refname "foo*"
foo1.6
foo1.3
foo1.10
自提交 b150794(Jacob Keller,git 2.1.0,2014 年 8 月)以来,您可以指定默认顺序:
tag.sort
此变量控制标签在显示时的排序顺序git-tag
。
如果没有--sort=<value>
提供 " " 选项,此变量的值将用作默认值。
罗宾斯特 评论:
现在可以将版本排序顺序(Git 2.1+)配置为默认值:
git config --global tag.sort version:refname
正如Leo Galleguillos在评论中指出的那样:
要将 Git 配置为首先显示最新标签(降序),只需在 version 之前添加一个连字符。
命令变为:
git config --global tag.sort -version:refname
使用Git 2.4 (Q2 2015),配置变量可用于指定之前的versionsort.prerelease
v1.0-pre1
v1.0
.
请参阅Junio C Hamano ( )的提交 f57610a。gitster
注意(见下文)versionsort.prereleaseSuffix
现在(2017 年)已弃用versionsort.suffix
.
git 2.7.1(2016 年 2 月)将提高git tag
自身的输出。
请参阅提交 0571979(2016 年 1 月 26 日)和提交 1d094db(2016 年 1 月 24 日)由Jeff King ( peff
)。
(由Junio C Hamano 合并 -- gitster
--在8bad3de 提交中,2016 年 2 月 1 日)
tag
:不要将模棱两可的标签名称显示为“ tags/foo
”
自b7cc53e ( tag.c
: use ' ref-filter
' APIs, 2015-07-11) 以来,git tag
已经开始将名称不明确的标签(即,当“ heads/foo
”和“ tags/foo
”都存在时)显示为“ tags/foo
”,而不仅仅是“ foo
”。
这是两者:
- 无意义; "" 的输出
git tag
包括 only refs/tags
,所以我们知道 " foo
" 表示" " 中的那个refs/tags
。
- 并且模棱两可;在原始输出中,我们知道“
foo
”行意味着“ refs/tags/foo
”存在。在新的输出中,不清楚我们是指“ refs/tags/foo
”还是“ refs/tags/tags/foo
”。
发生这种情况的原因是提交 b7cc53e 切换git tag
到使用 ref-filter 的“ %(refname:short)
”输出格式,该格式改编自for-each-ref
. 这个更通用的代码不知道我们只关心标签,并用于shorten_unambiguous_ref
获取short-name
.
我们需要告诉它我们只关心“ refs/tags/
”,并且它应该相对于该值缩短。
让我们为格式化语言添加一个新的修饰符“ strip
”,以删除一组特定的前缀组件。
这修复了“ ”,并允许用户从他们自己的自定义格式(对于“ ”或“ ”)git tag
调用相同的行为,同时让“ ”在所有地方都具有相同的一致含义。tag
for-each-ref
:short
如果strip=<N>
被附加,<N>
则从 refname 的前面去除斜杠分隔的路径组件(例如,变成%(refname:strip=2)
.必须是一个正整数。
如果显示的 ref 的组件少于,则命令中止并出现错误。refs/tags/foo
foo
<N>
<N>
对于git tag
,当未指定时,默认为%(refname:strip=2)
。
更新 Git 2.12(2017 年第一季度)
请参阅SZEDER Gábor ( ) 的提交c026557、提交 b178464、提交 51acfa9、提交 b823166、提交 109064a、提交 0c1b487、提交 9ffda48、提交 eba286e(2016 年 12 月 8 日)。(由Junio C Hamano 合并——在提交 1ac244d中,2017 年 1 月 23 日)szeder
gitster
versionsort.prereleaseSuffix
是不推荐使用的别名versionsort.suffix
。
“ ”prereleaseSuffix
中使用的版本比较功能在git tag -l
存在两个或多个相同版本的预发行版时不正确(例如,何时2.0
、、2.0-beta1
和2.0-beta2
存在并且代码需要比较2.0-beta1
和2.0-beta2
)。