• L
    Add a "git-describe" command · 908e5310
    Linus Torvalds 提交于
    It shows you the most recent tag that is reachable from a particular
    commit is.
    
    Maybe this is something that "git-name-rev" should be taught to do,
    instead of having a separate command for it. Regardless, I find it useful.
    
    What it does is to take any random commit, and "name" it by looking up the
    most recent commit that is tagged and reachable from that commit. If the
    match is exact, it will just print out that ref-name directly. Otherwise
    it will print out the ref-name, followed by the 8-character "short SHA".
    
    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
    2414721b.
    
    Doing a "git-describe" on a tag-name will just show the full tag path:
    
    	[torvalds@g5 git]$ git-describe v1.0.4
    	refs/tags/v1.0.4
    
    unless there are _other_ tags pointing to that commit, in which case it
    will just choose one at random.
    
    This is useful for two things:
    
     - automatic version naming in Makefiles, for example. We could use it in
       git itself: when doing "git --version", we could use this to give a
       much more useful description of exactly what version was installed.
    
     - for any random commit (say, you use "gitk <pathname>" or
       "git-whatchanged" to look at what has changed in some file), you can
       figure out what the last version of the repo was. Ie, say I find a bug
       in commit 39ca371c45b04cd50d0974030ae051906fc516b6, I just do:
    
    	[torvalds@g5 linux]$ git-describe 39ca371c45b04cd50d0974030ae051906fc516b6
    	refs/tags/v2.6.14-rc4-g39ca371c
    
       and I now know that it was _not_ in v2.6.14-rc4, but was presumably in
       v2.6.14-rc5.
    
    The latter is useful when you want to see what "version timeframe" a
    commit happened in.
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    Signed-off-by: NJunio C Hamano <junkio@cox.net>
    908e5310
describe.c 2.4 KB