我可以让 git print xyz 样式标签名称以合理的顺序吗?

发布于 2024-11-09 09:31:27 字数 292 浏览 0 评论 0原文

考虑这个版本号列表:

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以“数字”顺序而不是字母顺序打印它们命令?或者一个解决方法 - 也许是一个程序,我可以通过管道输出以按照我想要的方式对它们进行排序?

Consider this list of version numbers:

0.3.0
0.3.1
...
0.3.8
0.3.9
0.3.10
0.3.11

git tag would print them in the following order:

0.3.0
0.3.1
0.3.10
0.3.11
0.3.2
...

I there any way to make git tag print them in 'numeric' order as opposed to alphabetical order? Or a workaround - perhaps a program I can pipe the output through to order them how I want?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

血之狂魔 2024-11-16 09:31:28

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

请参阅 提交 b6de0c6,来自 提交 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

You will soon (with Git 1.9.x/2.0, Q2 2014) be able to use git only for getting the right sorted output:

See commit b6de0c6, from commit 9ef176b, authored by Nguyễn Thái Ngọc Duy (pclouds):

 --sort=<type>

Sort in a specific order.
Supported type is:

  • "refname" (lexicographic order),
  • "version:refname" or "v:refname" (tag names are treated as versions).

Prepend "-" to reverse sort order.


In your case:

 git tag -l --sort=version:refname 

A few test cases:

git tag foo1.3 &&
git tag foo1.6 &&
git tag foo1.10

Here is what you would get:

# 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
纵山崖 2024-11-16 09:31:27
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

此处使用的 sort 选项细分:

  • -n - 使用数字字符串顺序排序(因此 10 位于 1 之后>)
  • -t. - 使用句点作为字段分隔符
  • -k1,1 在第一个字段(且仅第一个字段)上定义排序键
  • -k2, 2 在第二个字段上定义排序键(并且仅第二个字段) field)
  • -k3,3 在第三个字段上定义排序键(并且仅第三个字段)
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

Breakdown of the sort options being used here:

  • -n - sort using numerical string order (thus 10 comes after 1)
  • -t. - use periods as field separators
  • -k1,1 define a sort key on the first field (and only the first field)
  • -k2,2 define a sort key on the second field (and only the second field)
  • -k3,3 define a sort key on the third field (and only the third field)
此岸叶落 2024-11-16 09:31:27

更简单的解决方案:

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

此处使用的 sort 选项的详细信息:

  • -V 按版本排序

Easier solution:

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

Breakdown of the sort options being used here:

  • -V sort by version
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文