web-dev-qa-db-ja.com

rc-X.Y.Z.W形式のバージョン文字列順でgitタグをソートするにはどうすればよいですか?

コマンドを入力すると:

git tag -l

私はそのような結果を得る:

rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9

これの代わりに私が欲しい:

rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12

そのような結果を得るために現在のリストをソートする方法は?

89

バージョンの並べ替えを使用する

git tag -l | sort -V

またはgitバージョン> = 2.0の場合

git tag -l --sort=v:refname
git tag -l --sort=-v:refname # reverse
114
Robert Mutke

これによると answer 、サポートしていないプラットフォームではsort -V WindowsやOSXのように、使用できます

git tag -l | sort -n -t. -k1,1 -k2,2 -k3,3 -k4,4

12
Cédric

すでにここに答えを組み合わせます:

ローカルリポジトリ

git -c 'versionsort.suffix=-' tag --list --sort=-v:refname
  • suffix=-2.0-rc「後」に来る2.0
  • --sort=-は、最上位に最大のバージョン番号を付けます。

リモートリポジトリ

git -c 'versionsort.suffix=-' ls-remote -t --exit-code --refs --sort=-v:refname "$repo_url" \
    | sed -E 's/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/g'

これの利点は、リモートからオブジェクトがダウンロードされないことです。

詳細については、 この回答 を参照してください。

6
Tom Hale

sort -Vアプローチで逆ソートを取得するには:

git tag -l | sort -V --reverse
2
modle13

このタスクを簡素化するために、単純なシェルスクリプトを作成することになりました。

#!/usr/bin/env bash

TAGS=$(git tag)
CODE=$?

if [ $CODE = 0 ]; then
    echo "$TAGS" | sort -V
fi

exit $CODE

それをgit-tagsとして$PATHとして保存し、タグをリストする必要があるときはいつでもgit tagsを実行します。

1
Kevin Herrera

Adapt このPerlスクリプトclient_release/7.2/7.2.25のようなタグを特定のタグ付けスキームにソートします。

1
David Tonhofer