最後のバージョン付けコミットを取得するには、Gitコマンドでget/find last tag with with 'v'を取得する必要があります(次のアプリケーションバージョンをタグ付けするために、最初にv文字のタグを使用しています(例: v0.9.1beta)。
それを行う方法はありますか?
これには次のコマンドを使用しています。
git describe --match "v[0-9]*" --abbrev=4 HEAD
最後にバージョン管理されたタグ以降にソースツリーで何かを行った場合も、バージョンを変更します。
これはnot正規表現ですが、グロブですが、提供されている例では機能します。
git tag -l -n v*
KARASZIIstvánの回答 は、globに一致するタグを見つける方法をすでに説明しています。ただし、本当のRegExが必要な場合:
for tag in $(git tag | grep YOURREGEX); do
git describe --tags --long --match="$tag" 2>/dev/null
done | sort -k2 -t"-" | head -n1
--abrev=0
が達成すること)だけが必要な場合は、| cut -d"-" -f1
を追加します--long
部分を含むexactlyマッチングタグも出力する-0-hash
の動作が不要な場合は、| sed -e's/-0-.*$//'
代わりに。質問のタグの例では、おそらく正規表現^v\d+\.\d+\.\d+\D*$
を使用します(\D*$
はオプションの場合があります)。
また、git describeを使用すると、HEADから到達可能なだけでなく、
git describe --match "v*" --abbrev=0 --tags $(git rev-list --tags --max-count=1)
ここでは単一の正規表現_--match "v[0-9]*"
_で十分ですが、Git 2.13(2017年第2四半期)によって改善されることがわかっています。
" _
git describe
_ "および " _git name-rev
_ "は、複数のrefnameパターンを使用して、参照のセットを制限し、それらの命名出力をベースにするように教えられていますオンになり、「_--exclude
_」オプションを介した命名に使用されないように、参照に名前を付けるために否定的なパターンをとることを学びました。
commit 77d21f2 、 commit 43f808 、 commit 96415b4 、 commit 290be66 、 commit 4a68748 を参照してください(2017年1月18日) Jacob Keller(_jacob-keller
_) による。
( Junio C Hamano-gitster
- によってマージ commit 1b32498 、2017年2月27日)
複数の一致パターン を持つことができます:
_--match <pattern>:
_
"refs/tags /"プレフィックスを除いて、指定された
glob(7)
パターンに一致するタグのみを考慮します。
これは、リポジトリからプライベートタグが漏洩するのを防ぐために使用できます。複数回指定すると、パターンのリストが蓄積され、パターンのいずれかに一致するタグが考慮されます。
パターンのリストをクリアしてリセットするには、_--no-match
_を使用します。
そして、あなたは exclude pattern(またはいくつか)now も持っています!
_--exclude <pattern>::
_
「refs/tags /」接頭辞を除いて、指定された
glob(7)
パターンに一致するタグを考慮しないでください。これを使用して、タグスペースを狭め、いくつかの意味のある基準に一致するタグのみを見つけることができます。
複数回指定すると、パターンのリストが蓄積され、いずれかのパターンに一致するタグが除外されます。
_--match
_と組み合わせると、タグは、少なくとも1つの_--match
_パターンに一致し、どの_--exclude
_パターンにも一致しない場合に考慮されます。
パターンのリストをクリアしてリセットするには、_--no-exclude
_を使用します。
git describe --match v*
これを使って。
他の回答と同様にgit describe
を使用する場合の問題は、git describe
にHEAD(または指定したコミット)から到達可能なタグが表示されることです。)
V1、v2、v3の3つのタグがあるとします。 HEADがv2とv3の間のポイントにある場合、git describe
はv3ではなくv2を返します。
実際に最新のタグが必要な場合は、軽量タグには日付メタデータがないため、最初に注釈付きタグが必要です。
次に、このコマンドはそれを行います:
git for-each-ref --sort=-taggerdate --count=1 refs/tags/v*
私が使う
git tag -l --format "%(objecttype) %(refname:short)" --sort=-version:refname --merged HEAD "v*"
git tag
は、パターンをグロブとして解釈します。したがって、完全な正規表現を指定することはできません。最小限のグロブ(v *)を使用するか、グロブをまったく使用しないでください。ソートされた順序で複数の一致するタグのみを受け取り(最も高いタグバージョンを最初に)、後で出力を正規表現することができます。