threads / discuss / 23056

meaning of "-g" in git-describe output

Subject: meaning of "-g" in git-describe output

## tl;dr

4 messages between Mar 17, 2010 and Mar 22, 2010.

replies: 3people: 3as markdown or json

Markus Heidelberg· Mar 17, 2010, 22:20 UTC · lore
Hello,

what is the meaning of the character 'g' in output like v1.0.4-14-g2414721 ? Is it simply the first letter, which isn't used in hexadecimal numbers or has it a deeper sense?

Markus
Jay Soffian· Mar 17, 2010, 23:14 UTC · re: Markus Heidelberg · lore

Re: meaning of "-g" in git-describe output

On Wed, Mar 17, 2010 at 6:20 PM, Markus Heidelberg <markus.heidelberg@web.de> wrote:

Show 5 quoted lines
> Hello,
>
> what is the meaning of the character 'g' in output like v1.0.4-14-g2414721 ?
> Is it simply the first letter, which isn't used in hexadecimal numbers
> or has it a deeper sense?

My guess, from 908e531 (Add a "git-describe" command, 2005-12-24), is that it's short for "git":

    IOW, with something like Junios current tree, I get:
        [torvalds@g5 git]$ git-describe parent
        refs/tags/v1.0.4-g2414721b
    ie the current head of my "parent" branch (ie Junio) is based on v1.0.4,
    but since it has a few commits on top of that, it has added the git hash
    of the thing to the end: "-g" + 8-char shorthand for the commit
    2414721b194453f058079d897d13c4e377f92dc6.
    -- http://marc.info/?t=113546113600001
But I think only Linus (+cc) knows. :-)
j.
Linus Torvalds· Mar 18, 2010, 01:19 UTC · re: Jay Soffian · lore

Re: meaning of "-g" in git-describe output

On Wed, 17 Mar 2010, Jay Soffian wrote:
> 
> My guess, from 908e531 (Add a "git-describe" command, 2005-12-24), is
> that it's short for "git":

Indeed. I actually wanted to make it possible to use other SCM's, even if it's stupid. And git is not the only one that uses hashes for versioning, so the "g" prefix is there to allow others that use -hg or monotone or similar to work.

For the kernel, if you use mercurial, the kernel version prefix will be "hg", for example. For SVN, it will be "svn" (but the numbers won't be a hex number, they'll be the SVN revno). See 'scripts/setlocalversion' in the kernel tree for an example.

So 'git describe' tries to match this kind of "multi-SCM model", where you can describe versions of your software in an environment where people may well use different SCMs.

Of course, if you use "git describe", you'll always get the "g" thing, and it is entirely redundant within the settign of just git. But in a bigger setting, the point is that I can do this:

	[torvalds@i5 linux]$ git describe; uname -r
	v2.6.34-rc1-997-ga3d3203
	2.6.34-rc1-00959-gbca14dd

and they have basically the same format (not 100% identical, but the "-g<sha1>" part is similar - the SHA1's obviously don't match in this case, because the kernel I'm running is ~40 commits away from my current tip of tree, but you can see the pattern).

			Linus
Markus Heidelberg· Mar 22, 2010, 20:45 UTC · re: Linus Torvalds · lore

[PATCH] Documentation: explain the meaning of "-g" in git-describe output

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
Linus Torvalds, 2010-03-18 02:19:
Show 10 quoted lines
> 
> On Wed, 17 Mar 2010, Jay Soffian wrote:
> > 
> > My guess, from 908e531 (Add a "git-describe" command, 2005-12-24), is
> > that it's short for "git":
> 
> Indeed. I actually wanted to make it possible to use other SCM's, even if 
> it's stupid. And git is not the only one that uses hashes for versioning, 
> so the "g" prefix is there to allow others that use -hg or monotone or 
> similar to work
I really hadn't thought of this obvious explanation.
 Documentation/git-describe.txt |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt
index 6fc5323..d9311dd 100644
--- a/Documentation/git-describe.txt
+++ b/Documentation/git-describe.txt
@@ -105,6 +105,9 @@ The number of additional commits is the number
 of commits which would be displayed by "git log v1.0.4..parent".
 The hash suffix is "-g" + 7-char abbreviation for the tip commit
 of parent (which was `2414721b194453f058079d897d13c4e377f92dc6`).
+The "g" prefix stands for "git" and is used to allow describing the version of
+a software depending on the SCM the software is managed with. This is useful
+in an environment where people may use different SCMs.
 
 Doing a 'git describe' on a tag-name will just show the tag name:
 
-- 
1.7.0.3.257.gcd709

← back to recent threads