我可以让git以合理的顺序打印x.y.z样式的标记名吗?
考虑以下版本号列表:我可以让git以合理的顺序打印x.y.z样式的标记名吗?,git,version-numbering,Git,Version Numbering,考虑以下版本号列表: 0.3.0 0.3.1 ... 0.3.8 0.3.9 0.3.10 0.3.11 git标签将按以下顺序打印它们: 0.3.0 0.3.1 0.3.10 0.3.11 0.3.2 ... 我想知道有什么方法可以让git标签以“数字”顺序而不是字母顺序打印出来?或者是一个解决方案——也许是一个我可以通过管道将输出按我想要的方式排序的程序 serv ~: echo -e "1.1.1\n1.3.2\n1.1.10\n1.1.2" | sort -n -t. -k1,1 -
0.3.0
0.3.1
...
0.3.8
0.3.9
0.3.10
0.3.11
git标签
将按以下顺序打印它们:
0.3.0
0.3.1
0.3.10
0.3.11
0.3.2
...
我想知道有什么方法可以让git标签以“数字”顺序而不是字母顺序打印出来?或者是一个解决方案——也许是一个我可以通过管道将输出按我想要的方式排序的程序
serv ~: echo -e "1.1.1\n1.3.2\n1.1.10\n1.1.2" | sort -n -t. -k1,1 -k2,2 -k3,3
1.1.1
1.1.2
1.1.10
1.3.2
此处使用的排序
选项的明细:
-使用数字字符串顺序进行排序(因此-n
位于10
之后)1
-使用句点作为字段分隔符-t.
在第一个字段(且仅在第一个字段)上定义排序键-k1,1
在第二个字段(且仅在第二个字段)上定义排序键-k2,2
在第三个字段(并且仅在第三个字段)上定义排序键-k3,3
serv ~: echo -e "1.1.1\n1.3.2\n1.1.10\n1.1.2" | sort -V
1.1.1
1.1.2
1.1.10
1.3.2
此处使用的排序
选项的明细:
- -V按版本排序
一些测试用例:
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*" >actual &&
foo1.3
foo1.6
foo1.10
# reverse version sort
git tag -l --sort=-version:refname "foo*" >actual &&
foo1.10
foo1.6
foo1.3
# reverse lexical sort
git tag -l --sort=-refname "foo*" >actual &&
foo1.6
foo1.3
foo1.10
很好的解决方案和很好的解释。谢谢并非所有的
sort
s都支持-V
.True,但如果您的支持,它将是一个更好的解决方案,因为它还可以处理任何级别的版本控制和混合文本。甚至更好!适合在命令行和脚本上键入。我通常这样做:git tag-n9 | sort-Vgit tag
将很快支持--sort
选项。请看可能的重复事实上,这是一个很小的子集,因为它没有前缀,但答案是相同的。
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*" >actual &&
foo1.3
foo1.6
foo1.10
# reverse version sort
git tag -l --sort=-version:refname "foo*" >actual &&
foo1.10
foo1.6
foo1.3
# reverse lexical sort
git tag -l --sort=-refname "foo*" >actual &&
foo1.6
foo1.3
foo1.10