1. ホーム
  2. git

[解決済み] git-ls-remoteをリストアップする際、タグ名の後に"^{}"があるのはなぜですか?重複

2022-11-27 16:10:46

質問

を実行すると git ls-remote を実行すると、オリジンリポジトリのリビジョンのリストが出力されます。なぜか、すべてのタグで2つのリビジョンが表示され、同じタグの2つ目のリビジョンでは、タグ名に ^{}

git ls-remote
From [email protected]:andris9/zzzzzz.git
d69e66d7c915b9682618b7f304b80cc0ae4c7809    HEAD
....
bb944682f7f65272137de74ed18605e49257356c    refs/tags/v0.1.6
771a930dc0ba86769d6862bc4dc100acc50170fa    refs/tags/v0.1.6^{}
a72251d945353a360087eb78ee75287c38a1c0e6    refs/tags/v0.1.7
d69e66d7c915b9682618b7f304b80cc0ae4c7809    refs/tags/v0.1.7^{}

でタグを作成しています。

git tag -a v0.1.8 -m "tag message"
git push --tags

の例から git-ls-remote マンページ のような重複したタグはないので、もしかしたら私のやり方が間違っているのでしょうか?

どのように解決するのですか?

タグは2種類あります。

  • ライトウェイト - は、単に何らかのオブジェクト(コミットなど)を指す参照に過ぎません。
  • 注釈付き - はそれ自体で独立した git オブジェクトであり、著者やコミッター、コミットメッセージなど、より多くの情報を保存します。

を使用した場合 git tag -a を使ってタグを作成すると、git はあなたに代わってアノテーションされたタグを作成するでしょう。

^{} は、タグを参照解除するために使われる構文です。で説明されています。 gitrevisions .

  • タグオブジェクトと共に使用された場合、git はタグでないオブジェクトを見つけるまで再帰的にタグを参照します。

  • タグでないオブジェクトで使われた場合、何もしません。 ^{}

refs/tags/v0.1.6 はタグオブジェクトを指しています。 bb944682f7f65272137de74ed18605e49257356c を指し、それが 771a930dc0ba86769d6862bc4dc100acc50170fa (非タグオブジェクト)を指し、これはタグを作成したときのコミット情報を保存していると推測されます。

ということは refs/tags/v0.1.6^{} を実行すると、git はそのタグをデリファレンスして 771a930dc0ba86769d6862bc4dc100acc50170fa - に解決します。

もあります。 git show-ref コマンドもあります。これはタグだけをリストアップし、オプションで次のように参照解除するために使われます。

$ git show-ref --tags
bb944682f7f65272137de74ed18605e49257356c    refs/tags/v0.1.6
a72251d945353a360087eb78ee75287c38a1c0e6    refs/tags/v0.1.7

$ git show-ref --tags --dereference
bb944682f7f65272137de74ed18605e49257356c    refs/tags/v0.1.6
771a930dc0ba86769d6862bc4dc100acc50170fa    refs/tags/v0.1.6^{}
a72251d945353a360087eb78ee75287c38a1c0e6    refs/tags/v0.1.7
d69e66d7c915b9682618b7f304b80cc0ae4c7809    refs/tags/v0.1.7^{}

これを確認するために git show コマンドを実行すると、git オブジェクトの詳細が表示されます。

これは私のテスト用 git リポジトリの一つからの情報です。

$ git show 43f9a98886ba873c0468c608f24c408b9991414f
tag v0.1
Tagger: Ash <tuxdude@OptimusPrime>
Date:   Sun Jul 15 00:14:43 2012 -0700

Tagging Stable repo 0.1 :)
-----BEGIN PGP SIGNATURE-----
<PGP-SIGNATURE>
-----END PGP SIGNATURE-----

commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <tuxdude@OptimusPrime>
Date:   Sun Jul 15 00:02:44 2012 -0700

    Merge branch 'dev' into 'master' for stable 0.1.

$ git show e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <tuxdude@OptimusPrime>
Date:   Sun Jul 15 00:02:44 2012 -0700

    Merge branch 'dev' into 'master' for stable 0.1.