Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When listing git-ls-remote why there's "^{}" after the tag name? [duplicate]

Tags:

git

When I run git ls-remote in the work tree, the command outputs a list of revisions in the origin repo. For some reason I get 2 revisions with every tag and for the second revision of the same tag, the tag name includes ^{}

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^{} 

I create tags with

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

From the examples of git-ls-remote man page there are no such duplicate tags, so maybe I'm doing something wrong?

like image 362
Andris Avatar asked Mar 18 '13 08:03

Andris


People also ask

What is annotated tag in git?

Annotated tags are stored as full objects in the Git database. To reiterate, They store extra meta data such as: the tagger name, email, and date. Similar to commits and commit messages Annotated tags have a tagging message.

How do I see remote tags in git?

In order to list remote Git tags, you have to use the “git ls-remote” command with the “–tags” option and the name of your remote repository.

Can git tags have slashes?

Other than some exceptions — such as not starting or ending a name with a slash, or having consecutive slashes in the name — Git has very few restrictions on what characters may be used in branch and tag names.

What is LS remote in git?

Displays references available in a remote repository along with the associated commit IDs.


1 Answers

There are 2 types of tags:

  • lightweight - merely refs that point to some object (like a commit).
  • annotated - a separate git object by themselves, and store a lot more information like author, committer, a commit message, etc.

When you used git tag -a to create a tag, git would have created an annotated tag for you.

The ^{} is the syntax used to dereference a tag. It is described in gitrevisions.

  • When used with tag objects, git would recursively dereference the tag until it finds a non-tag object.

  • When used with non-tag objects, it doesn't do anything and is equivalent to skipping the ^{}

The refs/tags/v0.1.6 ref in your repository points to the tag object bb944682f7f65272137de74ed18605e49257356c, which in turn points to 771a930dc0ba86769d6862bc4dc100acc50170fa (a non-tag object) which I'm guesssing is storing the commit information when you created the tag.

So when you do refs/tags/v0.1.6^{}, git is going to dereference the tag and resolve it to 771a930dc0ba86769d6862bc4dc100acc50170fa - the non-tag object.

There is also a git show-ref command that can be used to list only tags, and optionally dereference as follows, and in your case should produce the following output:

$ 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^{} 

To confirm this, you can use git show command to give you more details about the git object.

This is the information from one of my test git repositories.

$ 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. 
like image 91
Tuxdude Avatar answered Oct 22 '22 03:10

Tuxdude