web-dev-qa-db-ja.com

「git describe」はタグを無視します

次の行で:

$ git tag -n1
v1.8        Tagged the day before yesterday
v1.9        Tagged yesterday
v2.0        Tagged today
$ git describe
v1.9-500-ga6a8c67
$ 

誰もがv2.0タグが「git describe」で使用されない理由と、これを修正する方法を説明できますか? v2.0タグはすでにプッシュされているので、削除して再度追加することはできないと思います。

62
knipknap

git describe はデフォルトで注釈付きタグのみを使用します。 --tagsオプションで軽量タグも使用する

正しいコミットをチェックアウトしたことを確認してください(git rev-parse HEAD)。注釈付きタグはgit tag -a。もしあなたがそうするなら git show <tagname>およびコミットのみが表示されます。これは軽量タグです。追加のタグメッセージが表示される場合は、注釈付きタグです。

72
knittl

これが起こったとき、2つのタグが同じコミットに適用されたケースでした。これが当てはまるかどうかは、

# git log --oneline --decorate=short
deba4b4 (tag: v1.1.0.20.0, tag: v1.1.0.19.0) 001 New buildnumber

ここには、バージョン19用と20用の2つのタグがあります。20は19以降にタグ付けされましたが、同じコミット用です。この場合、返された説明

# git describe --tags
v1.1.0.19.0

なぜこれが行われたのかはわかりませんが、これが重複タグで動作するように見える方法です。

これが発生する可能性のあるもう1つのケースは、ブランチ内の自分に「より近い」タグがある場合です。そのケースは このブログ投稿 で説明されています。

18
eis

問題はgit tagがすべてのブランチでallタグを表示するのに対し、git describeは現在のbranchで使用可能なコミットでのみタグを使用します。

ここに例があります(私が実際にここに来た理由):

 $ git tag | tail -n3
v0.4.0
v0.4.1
v0.4.2

利用可能な最新のタグがv0.4.2であることを示していますが、これはgit describeの私の出力です。

 $ git describe --tags
v0.4.0-2-acd334c

私はブランチを開発しています。ログを詳しく調べたところ、最新のタグが現在のブランチで使用できないことがわかりました。

 $ git log --oneline --decorate=short | grep '\(tag\:' | head -n3
acd334c (tag: v0.4.0) Merge pull request #1061
988fe5e (tag: v0.3.6) Merge pull request #859
5f97274 (tag: v0.3.5) Merge pull request #646

したがって、私の場合、開発者はリリースのタグ付け専用に新しいreleaseブランチを作成することを決定しました。その結果、開発ブランチはタグで最新ではなくなりました。

ログをチェックするアイデアに@eisがお役に立てば幸いです。

16
Waqar Lim

おそらくあなたの例から、v1.9はマージコミットのタグです。

デフォルトではgitの動作が予想されます。詳細については、こちらをご覧ください https://git.kernel.org/pub/scm/git/git.git/commit/?id=80dbae

現在のブランチで最新のものを探すときにマージタグを無視するには、--first-parentオプション。

git describe --tags --first-parent --abbrev=0

-first-parent

マージコミットが表示されたら、最初の親コミットのみを追跡します。これは、ターゲットコミットの履歴にマージされたブランチのタグと一致させたくない場合に便利です。

参照: https://git-scm.com/docs/git-describe

0
Haris D.