threads / discuss / 51194

Q: git describe --always --tags .. gives "warning: tag 'tag1' is really 'tag2' here"

Subject: Q: git describe --always --tags .. gives "warning: tag 'tag1' is really 'tag2' here"

## tl;dr

4 messages between May 29, 2019 and Jun 3, 2019.

replies: 3people: 3as markdown or json

Ulrich Windl· May 29, 2019, 07:45 UTC · lore
Hi!
I have a project that changed its name some time ago (from "isredir" to "iredir"), so I added another tag for the same commit ID (What's the command to show the commit IDs for tags, BTW?: "git tag -v" does not.

As part of the build process, I run (for example) "git describe --always --tags af467c7". So I got the response: warning: tag 'isredir-0.3.0' is really 'iredir-0.3.0' here isredir-0.3.0-3-gaf467c7

I'm unsure what the message is actually saying: The hash cannot be resolved in a unique way?
I just see two tags remaining in refs:
> ls .git/refs/tags/
iredir-0.3.0  iredir-0.3.1

Regards, Ulrich

Junio C Hamano· May 29, 2019, 18:01 UTC · re: Ulrich Windl · lore

Re: Q: git describe --always --tags .. gives "warning: tag 'tag1' is really 'tag2' here"

"Ulrich Windl" <Ulrich.Windl@rz.uni-regensburg.de> writes:
> So I got the response:
> warning: tag 'isredir-0.3.0' is really 'iredir-0.3.0' here
> isredir-0.3.0-3-gaf467c7
I suspect that "git cat-file tag isredir-0.3.0" would begin like
	$ git cat-file tag iredir-0.3.0
	object .....
	type commit
	tag isredir-0.3.0
	tagger ...

Notice that "tag" line records the true name of that tag, which does not match where you stored that tag in refs/tags/ hierarchy?

While trying to describe af467c7 by following its ancestry and finding the ancestor three generations ago, the command found refs/tags/iredir-0.3.0 and then noticed that discrepancy, which is what the warning is about.

Imagine you have only v1.0.0 (which is with known issues) but somebody did "cd .git/refs/tags && mv v1.0.0 v1.1.0" in an attempt to fool you. The fact that your 'master' is a bit ahead of the commit that was tagged with the tag object (which is v1.0.0 but pretending to be v1.1.0) can be seen with "describe", but the command is careful enough to use the real version number (i.e. v1.0.0) and not the refname (i.e. v1.1.0).

Ulrich Windl· Jun 3, 2019, 06:06 UTC · re: Junio C Hamano · lore

Antw: Re: Q: git describe --always --tags .. gives "warning: tag 'tag1' is really 'tag2' here"

>>> Junio C Hamano <gitster@pobox.com> schrieb am 29.05.2019 um 20:01 in

Nachricht <xmqqd0k1ywal.fsf@gitster-ct.c.googlers.com>:

Show 16 quoted lines
> "Ulrich Windl" <Ulrich.Windl@rz.uni‑regensburg.de> writes:
> 
>> So I got the response:
>> warning: tag 'isredir‑0.3.0' is really 'iredir‑0.3.0' here
>> isredir‑0.3.0‑3‑gaf467c7
> 
> I suspect that "git cat‑file tag isredir‑0.3.0" would begin like
> 
> 	$ git cat‑file tag iredir‑0.3.0
> 	object .....
> 	type commit
> 	tag isredir‑0.3.0
> 	tagger ...
> 
> Notice that "tag" line records the true name of that tag, which does
> not match where you stored that tag in refs/tags/ hierarchy?
Hi!

Sorry for the delay (long weekend): Yes it is as you guessed. The tag is a signed one, BTW.

Show 13 quoted lines
> 
> While trying to describe af467c7 by following its ancestry and
> finding the ancestor three generations ago, the command found
> refs/tags/iredir‑0.3.0 and then noticed that discrepancy, which is
> what the warning is about.
> 
> Imagine you have only v1.0.0 (which is with known issues) but
> somebody did "cd .git/refs/tags && mv v1.0.0 v1.1.0" in an attempt
> to fool you.  The fact that your 'master' is a bit ahead of the
> commit that was tagged with the tag object (which is v1.0.0 but
> pretending to be v1.1.0) can be seen with "describe", but the
> command is careful enough to use the real version number
> (i.e. v1.0.0) and not the refname (i.e. v1.1.0).

Still I'm missing a verbose version of "git tag" that shows the commit IDs along with the tag names. Unfortunately "-v" is not "--verbose" but "--verify" (as opposed to "git remote" for example).

Regards, Ulrich

Jeff King· Jun 3, 2019, 10:55 UTC · re: Ulrich Windl · lore

Re: Antw: Re: Q: git describe --always --tags .. gives "warning: tag 'tag1' is really 'tag2' here"

On Mon, Jun 03, 2019 at 08:06:54AM +0200, Ulrich Windl wrote:
Show 11 quoted lines
> > Imagine you have only v1.0.0 (which is with known issues) but
> > somebody did "cd .git/refs/tags && mv v1.0.0 v1.1.0" in an attempt
> > to fool you.  The fact that your 'master' is a bit ahead of the
> > commit that was tagged with the tag object (which is v1.0.0 but
> > pretending to be v1.1.0) can be seen with "describe", but the
> > command is careful enough to use the real version number
> > (i.e. v1.0.0) and not the refname (i.e. v1.1.0).
> 
> Still I'm missing a verbose version of "git tag" that shows the commit IDs
> along with the tag names. Unfortunately "-v" is not "--verbose" but "--verify"
> (as opposed to "git remote" for example).
You can use for-each-ref format strings with "git tag" these days. E.g.:
  git tag --list --format='%(refname:short) %(tag) %(*objecttype) %(*objectname)'

will show each tag with its refname and tag-object name (which generally match, but would not in the case discussed here), and then the type and oid of the pointed-to thing (the "*" is a "dereference").

-Peff

← back to recent threads