8

このバージョン番号のリストを検討してください。

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アルファベット順ではなく「数字」順に印刷する方法はありますか?または回避策-おそらく、出力をパイプでつなぎ、希望どおりに並べ替えることができるプログラムですか?

4

3 に答える 3

15
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,22番目のフィールド(および2番目のフィールドのみ)にソートキーを定義します
  • -k3,33番目のフィールド(および3番目のフィールドのみ)にソートキーを定義します
于 2011-05-22T22:54:03.793 に答える
4

より簡単な解決策:

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ソート
于 2011-05-23T00:11:22.710 に答える
4

間もなく(Git 1.9.x / 2.0、2014年第2四半期)、適切にソートされた出力を取得するためにのみgitを使用できるようになります。

NguyễnTháiNgọcDuy(によって作成されたcommit9ef176bのcommitb6de0c6を参照してください。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
于 2014-03-25T12:53:53.813 に答える