2

リポジトリで複数のタグ識別子を使用しています。例えば。ABC-1.3.5.234 および DEF-1.2.1.25。describe コマンドは、私が望むほとんどのものを提供します。

git describe --long

ABC-1.3.5.234-33-デッドビーフ

しかし、私の履歴の最新の DEF タグと比較した値を知りたかったのです。相対距離を計算するためのベースとして使用するタグを指定する方法はありますか? 正規表現でそれを行うことはできますか?

4

3 に答える 3

2

git describemanページは明確です:

完全に一致するものが見つからなかった場合、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
于 2013-06-12T07:13:29.510 に答える