当我输入命令时:
git tag -l
Run Code Online (Sandbox Code Playgroud)
我得到了这样的结果:
rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9
Run Code Online (Sandbox Code Playgroud)
而不是我想要的:
rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12
Run Code Online (Sandbox Code Playgroud)
如何对当前列表进行排序以获得此类结果?
Rob*_*tke 128
使用版本排序
git tag -l | sort -V
Run Code Online (Sandbox Code Playgroud)
或者对于git版本> = 2.0
git tag -l --sort=v:refname
git tag -l --sort=-v:refname # reverse
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 74
使用Git 2.0(2014年6月),您将能够指定排序顺序!
请参阅提交b6de0c6,来自提交9ef176b,由NguyễnTháiNgọcDuypclouds撰写():
--sort=<type>
Run Code Online (Sandbox Code Playgroud)
按特定顺序排序.
支持的类型是:
- "
refname"(词典顺序),- "
version:refname"或"v:refname"(标签名称被视为版本).前置"
-"以反转排序顺序.
所以,如果你有:
git tag foo1.3 &&
git tag foo1.6 &&
git tag foo1.10
Run Code Online (Sandbox Code Playgroud)
这是你会得到的:
# 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
Run Code Online (Sandbox Code Playgroud)
自提交b150794(由Jacob Keller,git 2.1.0,2014年8月)以来,您可以具体说明该默认顺序:
tag.sort
Run Code Online (Sandbox Code Playgroud)
此变量控制显示时标记的排序顺序
git-tag.
如果未--sort=<value>提供" "选项,则此变量的值将用作默认值.
现在可以将版本排序顺序(Git 2.1+)配置为默认值:
git config --global tag.sort version:refname
Run Code Online (Sandbox Code Playgroud)
使用Git 2.4(2015年第2季度),配置变量可用于指定之前的versionsort.prerelease配置变量v1.0-pre1v1.0.
看看提交f57610a通过JUNIOÇ滨野(gitster).
注意(见下文)versionsort.prereleaseSuffix现在是(2017)一个不推荐使用的别名versionsort.suffix.
git 2.7.1(2016年2月)将提高git tag自身的产量.
请参阅提交0571979(2016年1月26日),并由Jeff King()提交1d094db(2016年1月24日).(由Junio C Hamano合并- -在提交8bad3de,2016年2月1日)peff
gitster
tag:不要将不明确的标签名称显示为"tags/foo"由于b7cc53e(
tag.c:使用'ref-filter'API,2015-07-11),git tag已经开始显示带有模糊名称的标签(即,当"heads/foo"和"tags/foo"存在时)为"tags/foo"而不仅仅是"foo".
这两个都是:
- 无意义; "
git tag" 的输出仅包括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)变成refs/tags/foo成foo.
<N>必须是一个正整数.
如果所显示的参考具有比更少的组件<N>,该命令与一个错误终止.
对于git tag,未指定时,默认为%(refname:strip=2).
更新Git 2.12(2017年第1季度)
见提交c026557,提交b178464,提交51acfa9,提交b823166,提交109064a,提交0c1b487,提交9ffda48,提交eba286e(2016年12月8日)由SZEDER伽柏(szeder).
(由Junio C gitsterHamano合并- -在提交1ac244d,2017年1月23日)
versionsort.prereleaseSuffix是一个弃用的别名versionsort.suffix.
该
prereleaseSuffix是在"使用的版本比较的功能,git tag -l"没有正确的当两个或多个prereleases为同一发行人存在(例如,当2.0,2.0-beta1和2.0-beta2在那里,代码需要比较2.0-beta1和2.0-beta2).
结合这里的答案:
git -c 'versionsort.suffix=-' tag --list --sort=-v:refname
Run Code Online (Sandbox Code Playgroud)
suffix=-将阻止2.0-rc"后"2.0--sort=- 将最高版本号放在顶部.git -c 'versionsort.suffix=-' ls-remote -t --exit-code --refs --sort=-v:refname "$repo_url" \
| sed -E 's/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/g'
Run Code Online (Sandbox Code Playgroud)
这样做的好处是不会从远程下载任何对象.
有关详细信息,请参阅此答案.
| 归档时间: |
|
| 查看次数: |
28271 次 |
| 最近记录: |