次の行で:
$ 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タグはすでにプッシュされているので、削除して再度追加することはできないと思います。
git describe
はデフォルトで注釈付きタグのみを使用します。 --tags
オプションで軽量タグも使用する
正しいコミットをチェックアウトしたことを確認してください(git rev-parse HEAD
)。注釈付きタグはgit tag -a
。もしあなたがそうするなら git show <tagname>
およびコミットのみが表示されます。これは軽量タグです。追加のタグメッセージが表示される場合は、注釈付きタグです。
これが起こったとき、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つのケースは、ブランチ内の自分に「より近い」タグがある場合です。そのケースは このブログ投稿 で説明されています。
問題は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がお役に立てば幸いです。
おそらくあなたの例から、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
マージコミットが表示されたら、最初の親コミットのみを追跡します。これは、ターゲットコミットの履歴にマージされたブランチのタグと一致させたくない場合に便利です。