106

作業ツリーで実行するgit ls-remoteと、コマンドはオリジン リポジトリのリビジョンのリストを出力します。何らかの理由で、すべてのタグで 2 つのリビジョンを取得し、同じタグの 2 番目のリビジョンでは、タグ名に含まれています^{}

git ls-remote
From git@github.com: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 マニュアルページの例から、そのような重複したタグはありませんので、何か間違っているのでしょうか?

4

1 に答える 1

165

タグには次の 2 種類があります。

  • 軽量- あるオブジェクト (コミットなど) を指す単なる参照。
  • 注釈付き- それ自体が別個の git オブジェクトであり、作成者、コミッター、コミット メッセージなどのより多くの情報を保存します。

タグを作成していた場合git tag -a、git は注釈付きのタグを作成します。

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

  • タグ オブジェクトで使用すると、git は非タグ オブジェクトが見つかるまでタグを再帰的に逆参照します。

  • 非タグ オブジェクトで使用すると、何も実行されず、^{}

refs/tags/v0.1.6あなたのレポジトリのref は tag object を指しています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 リポジトリの 1 つからの情報です。

$ 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.
于 2013-03-18T08:19:36.710 に答える