git tag をセマンティックバージョニングでソートする方法
はじめに
Gitのタグは、特定のコミットに名前を付けるための仕組みであり、特にリリースポイントを示すためによく利用されます。しかし、git tag
コマンドのデフォルトのソート順は辞書順であるため、セマンティックバージョニング(SemVer)を採用しているプロジェクトでは、タグが期待通りに並ばないことがあります。
例えば、v1.10.0
がv1.2.0
よりも前に来てしまう問題が発生します。
$ git tag
v0.1.0
v1.0.0
v1.0.0-alpha
v1.0.0-beta
v1.10.0
v1.2.0
v2.0.0
これでは、最新のバージョンを把握するのが困難です。本記事では、git tag
の出力をセマンティックバージョニングで正しくソートする方法を紹介します。
sort
コマンドを利用する方法
git tag
の出力をパイプで sort
コマンドに渡すことで、セマンティックバージョニングに基づいたソートが可能です。sort
コマンドに -V
または --version-sort
オプションを指定すると、バージョン番号として解釈してソートしてくれます。
$ git tag | sort -V
v0.1.0
v1.0.0-alpha
v1.0.0-beta
v1.0.0
v1.2.0
v1.10.0
v2.0.0
このように、-V
オプションを使うことで、v1.10.0
がv1.2.0
よりも後に表示され、期待通りの順序でタグが並び替えられます。
git tag
の --sort
オプションを利用する方法
Git 2.4.0からは、git tag
コマンド自体に --sort
オプションが追加されました。このオプションを使うことで、外部コマンドに頼ることなく、Gitだけで完結できます。
セマンティックバージョニングでソートするには、--sort=v:refname
を指定します。
$ git tag --sort=v:refname
v0.1.0
v1.0.0-alpha
v1.0.0-beta
v1.0.0
v1.2.0
v1.10.0
v2.0.0
v:refname
は version:refname
の略で、タグ名をバージョンとして解釈してソートするという意味です。
逆順(降順)でソートしたい場合は、先頭に -
を付けます。
$ git tag --sort=-v:refname
v2.0.0
v1.10.0
v1.2.0
v1.0.0
v1.0.0-beta
v1.0.0-alpha
v0.1.0
これにより、最新のバージョンが一番上に表示されるため、最新のリリースをすぐに確認できます。
まとめ
本記事では、git tag
の出力をセマンティックバージョニングでソートする2つの方法を紹介しました。
-
sort -V
を利用する方法 -
git tag --sort=v:refname
を利用する方法
Gitのバージョンが古い環境でなければ、--sort
オプションを利用するのが最も手軽で直感的な方法でしょう。日々の開発で git tag
を利用する際に、ぜひ活用してみてください。
Discussion