2005-12-28 01:10:56 +01:00
|
|
|
git-describe(1)
|
|
|
|
===============
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
2015-06-16 15:16:38 +02:00
|
|
|
git-describe - Describe a commit using the most recent tag reachable from it
|
2005-12-28 01:10:56 +01:00
|
|
|
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
2009-11-10 23:06:41 +01:00
|
|
|
[verse]
|
describe --contains: default to HEAD when no commit-ish is given
'git describe --contains' doesn't default to HEAD when no commit is
given, and it doesn't produce any output, not even an error:
~/src/git ((v2.5.0))$ ./git describe --contains
~/src/git ((v2.5.0))$ ./git describe --contains HEAD
v2.5.0^0
Unlike other 'git describe' options, the '--contains' code path is
implemented by calling 'name-rev' with a bunch of options plus all the
commit-ishes that were passed to 'git describe'. If no commit-ish was
present, then 'name-rev' got invoked with none, which then leads to the
behavior illustrated above.
Porcelain commands usually default to HEAD when no commit-ish is given,
and 'git describe' already does so in all other cases, so it should do
so with '--contains' as well.
Pass HEAD to 'name-rev' when no commit-ish is given on the command line
to make '--contains' behave consistently with other 'git describe'
options. While at it, use argv_array_pushv() instead of the loop to
pass commit-ishes to 'git name-rev'.
'git describe's short help already indicates that the commit-ish is
optional, but the synopsis in the man page doesn't, so update it
accordingly as well.
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-08-24 18:15:18 +02:00
|
|
|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]
|
2009-10-21 15:35:22 +02:00
|
|
|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
|
2005-12-28 01:10:56 +01:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
|
|
|
The command finds the most recent tag that is reachable from a
|
2008-05-14 20:30:55 +02:00
|
|
|
commit. If the tag points to the commit, then only the tag is
|
|
|
|
shown. Otherwise, it suffixes the tag name with the number of
|
|
|
|
additional commits on top of the tagged object and the
|
|
|
|
abbreviated object name of the most recent commit.
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2008-10-13 16:39:46 +02:00
|
|
|
By default (without --all or --tags) `git describe` only shows
|
|
|
|
annotated tags. For more information about creating annotated tags
|
|
|
|
see the -a and -s options to linkgit:git-tag[1].
|
2005-12-28 01:10:56 +01:00
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-------
|
2013-09-04 21:04:31 +02:00
|
|
|
<commit-ish>...::
|
describe --contains: default to HEAD when no commit-ish is given
'git describe --contains' doesn't default to HEAD when no commit is
given, and it doesn't produce any output, not even an error:
~/src/git ((v2.5.0))$ ./git describe --contains
~/src/git ((v2.5.0))$ ./git describe --contains HEAD
v2.5.0^0
Unlike other 'git describe' options, the '--contains' code path is
implemented by calling 'name-rev' with a bunch of options plus all the
commit-ishes that were passed to 'git describe'. If no commit-ish was
present, then 'name-rev' got invoked with none, which then leads to the
behavior illustrated above.
Porcelain commands usually default to HEAD when no commit-ish is given,
and 'git describe' already does so in all other cases, so it should do
so with '--contains' as well.
Pass HEAD to 'name-rev' when no commit-ish is given on the command line
to make '--contains' behave consistently with other 'git describe'
options. While at it, use argv_array_pushv() instead of the loop to
pass commit-ishes to 'git name-rev'.
'git describe's short help already indicates that the commit-ish is
optional, but the synopsis in the man page doesn't, so update it
accordingly as well.
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-08-24 18:15:18 +02:00
|
|
|
Commit-ish object names to describe. Defaults to HEAD if omitted.
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2009-10-21 15:35:22 +02:00
|
|
|
--dirty[=<mark>]::
|
2017-03-21 23:57:18 +01:00
|
|
|
--broken[=<mark>]::
|
|
|
|
Describe the state of the working tree. When the working
|
|
|
|
tree matches HEAD, the output is the same as "git describe
|
|
|
|
HEAD". If the working tree has local modification "-dirty"
|
|
|
|
is appended to it. If a repository is corrupt and Git
|
|
|
|
cannot determine if there is local modification, Git will
|
|
|
|
error out, unless `--broken' is given, which appends
|
|
|
|
the suffix "-broken" instead.
|
2009-10-21 15:35:22 +02:00
|
|
|
|
2005-12-28 01:10:56 +01:00
|
|
|
--all::
|
|
|
|
Instead of using only the annotated tags, use any ref
|
2012-08-06 22:36:47 +02:00
|
|
|
found in `refs/` namespace. This option enables matching
|
2010-11-02 16:31:24 +01:00
|
|
|
any known branch, remote-tracking branch, or lightweight tag.
|
2005-12-28 01:10:56 +01:00
|
|
|
|
|
|
|
--tags::
|
|
|
|
Instead of using only the annotated tags, use any tag
|
2012-08-06 22:36:47 +02:00
|
|
|
found in `refs/tags` namespace. This option enables matching
|
2008-10-13 16:39:46 +02:00
|
|
|
a lightweight (non-annotated) tag.
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2007-05-21 09:20:25 +02:00
|
|
|
--contains::
|
|
|
|
Instead of finding the tag that predates the commit, find
|
|
|
|
the tag that comes after the commit, and thus contains it.
|
|
|
|
Automatically implies --tags.
|
|
|
|
|
2005-12-28 01:10:56 +01:00
|
|
|
--abbrev=<n>::
|
2009-01-22 19:26:25 +01:00
|
|
|
Instead of using the default 7 hexadecimal digits as the
|
2009-10-29 22:29:35 +01:00
|
|
|
abbreviated object name, use <n> digits, or as many digits
|
|
|
|
as needed to form a unique object name. An <n> of 0
|
|
|
|
will suppress long format, only showing the closest tag.
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2007-01-13 23:30:53 +01:00
|
|
|
--candidates=<n>::
|
|
|
|
Instead of considering only the 10 most recent tags as
|
2013-09-04 21:04:31 +02:00
|
|
|
candidates to describe the input commit-ish consider
|
2007-01-13 23:30:53 +01:00
|
|
|
up to <n> candidates. Increasing <n> above 10 will take
|
|
|
|
slightly longer but may produce a more accurate result.
|
2008-02-24 09:07:31 +01:00
|
|
|
An <n> of 0 will cause only exact matches to be output.
|
|
|
|
|
|
|
|
--exact-match::
|
|
|
|
Only output exact matches (a tag directly references the
|
|
|
|
supplied commit). This is a synonym for --candidates=0.
|
2007-01-13 23:30:53 +01:00
|
|
|
|
|
|
|
--debug::
|
|
|
|
Verbosely display information about the searching strategy
|
|
|
|
being employed to standard error. The tag name will still
|
|
|
|
be printed to standard out.
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2008-02-25 10:43:33 +01:00
|
|
|
--long::
|
|
|
|
Always output the long format (the tag, the number of commits
|
|
|
|
and the abbreviated commit name) even when it matches a tag.
|
|
|
|
This is useful when you want to see parts of the commit object name
|
|
|
|
in "describe" output, even when the commit in question happens to be
|
|
|
|
a tagged version. Instead of just emitting the tag name, it will
|
2009-10-29 22:29:35 +01:00
|
|
|
describe such a commit as v1.2-0-gdeadbee (0th commit since tag v1.2
|
|
|
|
that points at object deadbee....).
|
2008-02-25 10:43:33 +01:00
|
|
|
|
2007-12-21 22:49:54 +01:00
|
|
|
--match <pattern>::
|
2013-02-25 06:29:01 +01:00
|
|
|
Only consider tags matching the given `glob(7)` pattern,
|
|
|
|
excluding the "refs/tags/" prefix. This can be used to avoid
|
2017-01-19 00:06:07 +01:00
|
|
|
leaking private tags from the repository. If given multiple times, a
|
|
|
|
list of patterns will be accumulated, and tags matching any of the
|
|
|
|
patterns will be considered. Use `--no-match` to clear and reset the
|
|
|
|
list of patterns.
|
2007-12-21 22:49:54 +01:00
|
|
|
|
2017-01-19 00:06:08 +01:00
|
|
|
--exclude <pattern>::
|
|
|
|
Do not consider tags matching the given `glob(7)` pattern, excluding
|
|
|
|
the "refs/tags/" prefix. This can be used to narrow the tag space and
|
|
|
|
find only tags matching some meaningful criteria. If given multiple
|
|
|
|
times, a list of patterns will be accumulated and tags matching any
|
|
|
|
of the patterns will be excluded. When combined with --match a tag will
|
|
|
|
be considered when it matches at least one --match pattern and does not
|
|
|
|
match any of the --exclude patterns. Use `--no-exclude` to clear and
|
|
|
|
reset the list of patterns.
|
|
|
|
|
2008-06-08 03:36:11 +02:00
|
|
|
--always::
|
|
|
|
Show uniquely abbreviated commit object as fallback.
|
|
|
|
|
2013-05-17 22:56:18 +02:00
|
|
|
--first-parent::
|
|
|
|
Follow only the first parent commit upon seeing a merge commit.
|
|
|
|
This is useful when you wish to not match tags on branches merged
|
|
|
|
in the history of the target commit.
|
|
|
|
|
2005-12-28 01:10:56 +01:00
|
|
|
EXAMPLES
|
|
|
|
--------
|
|
|
|
|
|
|
|
With something like git.git current tree, I get:
|
|
|
|
|
2008-06-30 08:09:04 +02:00
|
|
|
[torvalds@g5 git]$ git describe parent
|
2007-01-27 08:24:07 +01:00
|
|
|
v1.0.4-14-g2414721
|
2005-12-28 01:10:56 +01:00
|
|
|
|
|
|
|
i.e. the current head of my "parent" branch is based on v1.0.4,
|
2009-01-12 21:02:07 +01:00
|
|
|
but since it has a few commits on top of that,
|
2007-01-27 08:24:07 +01:00
|
|
|
describe has added the number of additional commits ("14") and
|
|
|
|
an abbreviated object name for the commit itself ("2414721")
|
|
|
|
at the end.
|
|
|
|
|
|
|
|
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`).
|
2010-03-22 21:45:33 +01:00
|
|
|
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.
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2010-01-10 00:33:00 +01:00
|
|
|
Doing a 'git describe' on a tag-name will just show the tag name:
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2008-06-30 08:09:04 +02:00
|
|
|
[torvalds@g5 git]$ git describe v1.0.4
|
2005-12-28 01:10:56 +01:00
|
|
|
v1.0.4
|
|
|
|
|
|
|
|
With --all, the command can use branch heads as references, so
|
|
|
|
the output shows the reference path as well:
|
|
|
|
|
|
|
|
[torvalds@g5 git]$ git describe --all --abbrev=4 v1.0.5^2
|
2007-01-27 08:24:07 +01:00
|
|
|
tags/v1.0.0-21-g975b
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2009-10-29 22:29:35 +01:00
|
|
|
[torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^
|
2007-01-27 08:24:07 +01:00
|
|
|
heads/lt/describe-7-g975b
|
|
|
|
|
|
|
|
With --abbrev set to 0, the command can be used to find the
|
|
|
|
closest tagname without any suffix:
|
|
|
|
|
|
|
|
[torvalds@g5 git]$ git describe --abbrev=0 v1.0.5^2
|
|
|
|
tags/v1.0.0
|
2005-12-28 01:10:56 +01:00
|
|
|
|
2009-10-29 22:29:35 +01:00
|
|
|
Note that the suffix you get if you type these commands today may be
|
2009-11-04 22:57:46 +01:00
|
|
|
longer than what Linus saw above when he ran these commands, as your
|
2013-01-21 20:17:53 +01:00
|
|
|
Git repository may have new commits whose object names begin with
|
2009-10-29 22:29:35 +01:00
|
|
|
975b that did not exist back then, and "-g975b" suffix alone may not
|
|
|
|
be sufficient to disambiguate these commits.
|
|
|
|
|
|
|
|
|
2007-01-13 23:30:53 +01:00
|
|
|
SEARCH STRATEGY
|
|
|
|
---------------
|
|
|
|
|
2013-09-04 21:04:31 +02:00
|
|
|
For each commit-ish supplied, 'git describe' will first look for
|
2007-01-13 23:30:53 +01:00
|
|
|
a tag which tags exactly that commit. Annotated tags will always
|
|
|
|
be preferred over lightweight tags, and tags with newer dates will
|
|
|
|
always be preferred over tags with older dates. If an exact match
|
|
|
|
is found, its name will be output and searching will stop.
|
|
|
|
|
2010-01-10 00:33:00 +01:00
|
|
|
If an exact match was not found, 'git describe' will walk back
|
2007-01-13 23:30:53 +01:00
|
|
|
through the commit history to locate an ancestor commit which
|
|
|
|
has been tagged. The ancestor's tag will be output along with an
|
2016-06-28 13:40:11 +02:00
|
|
|
abbreviation of the input commit-ish's SHA-1. If `--first-parent` was
|
2013-05-17 22:56:18 +02:00
|
|
|
specified then the walk will only consider the first parent of each
|
|
|
|
commit.
|
2007-01-13 23:30:53 +01:00
|
|
|
|
|
|
|
If multiple tags were found during the walk then the tag which
|
2013-09-04 21:04:31 +02:00
|
|
|
has the fewest commits different from the input commit-ish will be
|
2007-01-13 23:30:53 +01:00
|
|
|
selected and output. Here fewest commits different is defined as
|
2008-06-30 20:56:34 +02:00
|
|
|
the number of commits which would be shown by `git log tag..input`
|
2007-01-13 23:30:53 +01:00
|
|
|
will be the smallest number of commits possible.
|
|
|
|
|
2005-12-28 01:10:56 +01:00
|
|
|
GIT
|
|
|
|
---
|
2008-06-06 09:07:32 +02:00
|
|
|
Part of the linkgit:git[1] suite
|