我可以让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 1.9.x/2.0,2014年第二季度)能够仅使用Git获得正确的排序输出:

参见、来自、作者:


一些测试用例:

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-V
git 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