特定のgit commitに関連付けられているタグを見つける方法は?


90

リリースの場合、私は通常v1.1.0のようなタグを付けます。ビルドスクリプトの実行中に、現在のgit情報を含むfwVersion.cファイルを作成しています。現在、ファイルにコミット情報とブランチ情報がありますが、タグを追加したいと思います。

これは可能ですか?

回答:


114

のドキュメントを確認してくださいgit describe。特定のコミットに最も近いタグ(つまり、コミットの祖先を指すタグ)を見つけ、そのコミットをタグで説明します。

コミットがタグによって指されているかどうかだけを知りたい場合は、次の出力を確認できます。

git describe --exact-match <commit-id>

32
git describe --tags <commit-id>注釈なしタグの場合
Aleksandr Levchuk

1
これ大好き。:Spefically、私は現在のリビジョンから人間が読めるを得ることができることを愛するgit describe --all --exact-match `git rev-parse HEAD`
dsummersl

5
新しいバージョンでgit describe --tags --abbrev=0 REVは、タグにジャンクが不要な場合に役立ちます。
クレイグリンガー

1
git describe --all(現在チェックアウトされているコミットの場合)、またはgit describe --all <commit>私が望んでいたすべてのことを常に行っています。
rfay 14

gitからのバージョンを使用する最良の部分は、ソフトウェアがデプロイされたときにソース内のバージョンをハードコーディングしないことです。git describeの最も近いタグを見つける方法を使用して、次のバージョン番号を計算し、タグrefをリポジトリとパッケージ名に追加するだけです。
2016

62

必要なものがコミットを含む最初のタグである場合:

git describe --contains <commit>

最良の答えをIMOに提供します。大きなリポジトリの古いコミットで「git tag --contains」を使用するよりも頻繁にタグを使用している場合は、実行に時間がかかり、そのコミットを含むすべてのタグが表示されます。

この形式のgit describeは非常に高速に実行され、コミットを含む最初のタグである単一の出力値と、コミットがどれだけ遡っているかを示します。


27

これはどう?

git tag --points-at <commit-id>

それはあなたに与えられたコミットが持っているすべてのタグをあなたに与えます(それに対してgit describeあなたに1つだけを与えます)、そして子孫コミットのタグを含みません(git tag --containsそうします)。


エラーメッセージがstderrに書き込まれないため、これが好きです。ありがとう。
Basuke

23

この情報はマニュアルにあります

git tag --contains <commit>

3
これは、指定されたコミットを含むすべてのタグ(つまり、指定されたコミットの子を指すタグ)をリストするので、指定されたコミットの単一のタグや、最も近いタグに関する情報を必ずしも提供するわけではありません。リストには単一のコミットのみが含まれます。
CBベイリー

4
チャールズベイリーが上で言ったように、それは私が探しているものとは正確には異なります。多分あなたはRTFMをすべきです:)
wes

1
まあ、間違った答えてすみません。私が調べたところ、あなたが望んでいたことをしているようでした。私はRTFMを行いましたが、間違った問題を解決していました。ホープベイリーはあなたを助けるソリューションを提供した。
ダルガ2009

6
SOでgitの質問をする前に、gitマニュアル全体を読む必要はないはずですよね?googleインデックスは、どのgit manページよりもはるかに優れています...
aaronstacy

13

私は私が望んでいたものを私に与えるために両方のトップアンサーの組み合わせを見つけました:

git describe --tags --exact-match <commit-id>

これにより、そのコミットと注釈なしのコミットのみに対応するタグが提供されます。タグを見つけたいときや、書式を外す必要がないときに便利です(たとえば、Jenkinsの場合)。

例えば。 $ git describe --tags --exact-match head~2

あなたにあげる:

$ ReleaseBeta

0

答えのいくつかを統合する:

git tag --contains [<ref>]

そして

git tag --points-at [<ref>]

あるいは単に

git tag

同じように動作し、指定されたrefまたは指定されていない場合は現在のコミットのタグを出力します。

git describe --tags [<ref>]

ここで<ref>ないタグが関連付けられていない場合、現在のデフォルト値は、128で終了コミット(パターンがあるように思われない)コミットし、コミットに関連付けられたタグを印刷します。

git describe [<ref>]--tags注釈付きタグのみを出力すること を除いて、と同じように動作します。

オプション--containsdescribe指定すると、指定したコミットの祖先に関連付けられているタグが出力されます。例えば

$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.