版本编号 - 我可以让 git 以合理的顺序打印 x.y.z 样式标签名称吗?



请考虑以下版本号列表:

0.3.0
0.3.1
...
0.3.8
0.3.9
0.3.10
0.3.11

git tag将按以下顺序打印它们:

0.3.0
0.3.1
0.3.10
0.3.11
0.3.2
...

我有什么办法git tag按"数字"顺序而不是字母顺序打印它们?或者一种解决方法 - 也许我可以通过管道传输输出以按照我想要的方式对它们进行排序?

serv ~: echo -e "1.1.1n1.3.2n1.1.10n1.1.2" | sort -n -t. -k1,1 -k2,2 -k3,3
1.1.1
1.1.2
1.1.10
1.3.2

此处使用sort选项的细分:

  • -n - 使用数字字符串顺序排序(因此101之后)
  • -t. - 使用句点作为字段分隔符
  • -k1,1第一个字段(并且仅第一个字段)上定义排序键
  • -k2,2第二个字段(并且仅第二个字段)上定义排序键
  • -k3,3第三个字段(并且仅第三个字段)上定义排序键

更简单的解决方案:

serv ~: echo -e "1.1.1n1.3.2n1.1.10n1.1.2" | sort -V
1.1.1
1.1.2
1.1.10
1.3.2

此处使用sort选项的细分:

  • -V 按版本排序

您很快(使用 Git 1.9.x/2.0,2014 年第 2 季度)将能够仅使用 git 来获取正确的排序输出:

参见 commit b6de0c6,来自 commit 9ef176b,作者:Nguyễn Thái Ngọc Duy ( pclouds):

 --sort=<type>

按特定顺序排序
支持的类型为:

  • "refname"(词典顺序),
  • "version:refname"或"v:refname"(标签名称被视为版本)。

在前面加上"-"以颠倒排序顺序。


在您的情况下:

 git tag -l --sort=version: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*" >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

相关内容

  • 没有找到相关文章

最新更新