リポジトリで複数のタグ識別子を使用しています。例えば。ABC-1.3.5.234 および DEF-1.2.1.25。describe コマンドは、私が望むほとんどのものを提供します。
git describe --long
ABC-1.3.5.234-33-デッドビーフ
しかし、私の履歴の最新の DEF タグと比較した値を知りたかったのです。相対距離を計算するためのベースとして使用するタグを指定する方法はありますか? 正規表現でそれを行うことはできますか?
リポジトリで複数のタグ識別子を使用しています。例えば。ABC-1.3.5.234 および DEF-1.2.1.25。describe コマンドは、私が望むほとんどのものを提供します。
git describe --long
ABC-1.3.5.234-33-デッドビーフ
しかし、私の履歴の最新の DEF タグと比較した値を知りたかったのです。相対距離を計算するためのベースとして使用するタグを指定する方法はありますか? 正規表現でそれを行うことはできますか?
git describe
manページは明確です:
完全に一致するものが見つからなかった場合、git describe はコミット履歴をさかのぼって、タグ付けされた祖先コミットを見つけます。祖先のタグは、入力された committish の SHA-1 の省略形とともに出力されます。
ウォーク中に複数のタグが見つかった場合、入力コミットとは異なるコミットが最も少ないタグが選択され、出力されます。
ここで、異なるコミット数の最小値は、表示さgit log tag..input
れるコミット数が可能な限り最小のコミット数になるように定義されています。
したがって、次のスクリプトを作成する必要がある場合があります。
git describe
git describe
そのコミットを取るn
そのループ中に見つかったタグ付きオブジェクトの上にある追加のコミットの数 ' ' をすべて合計しますDEF-xxx-n-DEF_SHA1
.2013 年以降、Hendrikの回答に示されているように、これはより適切に機能します。
git describe --all --match <tagPattern>
ただし、「git describe を使用して非表示の参照を照合する方法」で説明したように、Git 2.15 (2017 年第 3 四半期) を使用している場合に限ります。
2.15 より前で--all
は、無視されていました。
注: Git 2.15では、複数のパターンを使用することもできます。git describe --match
これにより、次のようなさらに高度な検索が可能になります。
たとえば、特定のコミットを含む最初の公式リリース タグを見つけたいとします。公式リリース タグの形式が " " で、プレリリース候補の名前に " " が含まれ
ていると仮定すると、コミットを導入する最初のリリース タグを見つけることができます。v*
*rc*
abcdef
git describe --contains --match="v*" --exclude="*rc*" abcd