While the minimum is 7-char, the unambiguous length can be longer. Signed-off-by: Philip Oakley <philipoakley@iee.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			208 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
git-describe(1)
 | 
						|
===============
 | 
						|
 | 
						|
NAME
 | 
						|
----
 | 
						|
git-describe - Give an object a human readable name based on an available ref
 | 
						|
 | 
						|
SYNOPSIS
 | 
						|
--------
 | 
						|
[verse]
 | 
						|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]
 | 
						|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
 | 
						|
'git describe' <blob>
 | 
						|
 | 
						|
DESCRIPTION
 | 
						|
-----------
 | 
						|
The command finds the most recent tag that is reachable from a
 | 
						|
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. The result
 | 
						|
is a "human-readable" object name which can also be used to
 | 
						|
identify the commit to other git commands.
 | 
						|
 | 
						|
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].
 | 
						|
 | 
						|
If the given object refers to a blob, it will be described
 | 
						|
as `<commit-ish>:<path>`, such that the blob can be found
 | 
						|
at `<path>` in the `<commit-ish>`, which itself describes the
 | 
						|
first commit in which this blob occurs in a reverse revision walk
 | 
						|
from HEAD.
 | 
						|
 | 
						|
OPTIONS
 | 
						|
-------
 | 
						|
<commit-ish>...::
 | 
						|
	Commit-ish object names to describe.  Defaults to HEAD if omitted.
 | 
						|
 | 
						|
--dirty[=<mark>]::
 | 
						|
--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.
 | 
						|
 | 
						|
--all::
 | 
						|
	Instead of using only the annotated tags, use any ref
 | 
						|
	found in `refs/` namespace.  This option enables matching
 | 
						|
	any known branch, remote-tracking branch, or lightweight tag.
 | 
						|
 | 
						|
--tags::
 | 
						|
	Instead of using only the annotated tags, use any tag
 | 
						|
	found in `refs/tags` namespace.  This option enables matching
 | 
						|
	a lightweight (non-annotated) tag.
 | 
						|
 | 
						|
--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.
 | 
						|
 | 
						|
--abbrev=<n>::
 | 
						|
	Instead of using the default 7 hexadecimal digits as the
 | 
						|
	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.
 | 
						|
 | 
						|
--candidates=<n>::
 | 
						|
	Instead of considering only the 10 most recent tags as
 | 
						|
	candidates to describe the input commit-ish consider
 | 
						|
	up to <n> candidates.  Increasing <n> above 10 will take
 | 
						|
	slightly longer but may produce a more accurate result.
 | 
						|
	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.
 | 
						|
 | 
						|
--debug::
 | 
						|
	Verbosely display information about the searching strategy
 | 
						|
	being employed to standard error.  The tag name will still
 | 
						|
	be printed to standard out.
 | 
						|
 | 
						|
--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
 | 
						|
	describe such a commit as v1.2-0-gdeadbee (0th commit since tag v1.2
 | 
						|
	that points at object deadbee....).
 | 
						|
 | 
						|
--match <pattern>::
 | 
						|
	Only consider tags matching the given `glob(7)` pattern,
 | 
						|
	excluding the "refs/tags/" prefix. If used with `--all`, it also
 | 
						|
	considers local branches and remote-tracking references matching the
 | 
						|
	pattern, excluding respectively "refs/heads/" and "refs/remotes/"
 | 
						|
	prefix; references of other types are never considered. 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.
 | 
						|
 | 
						|
--exclude <pattern>::
 | 
						|
	Do not consider tags matching the given `glob(7)` pattern, excluding
 | 
						|
	the "refs/tags/" prefix. If used with `--all`, it also does not consider
 | 
						|
	local branches and remote-tracking references matching the pattern,
 | 
						|
	excluding respectively "refs/heads/" and "refs/remotes/" prefix;
 | 
						|
	references of other types are never considered. 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.
 | 
						|
 | 
						|
--always::
 | 
						|
	Show uniquely abbreviated commit object as fallback.
 | 
						|
 | 
						|
--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.
 | 
						|
 | 
						|
EXAMPLES
 | 
						|
--------
 | 
						|
 | 
						|
With something like git.git current tree, I get:
 | 
						|
 | 
						|
	[torvalds@g5 git]$ git describe parent
 | 
						|
	v1.0.4-14-g2414721
 | 
						|
 | 
						|
i.e. the current head of my "parent" branch is based on v1.0.4,
 | 
						|
but since it has a few commits on top of that,
 | 
						|
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" + unambiguous 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:
 | 
						|
 | 
						|
	[torvalds@g5 git]$ git describe v1.0.4
 | 
						|
	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
 | 
						|
	tags/v1.0.0-21-g975b
 | 
						|
 | 
						|
	[torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^
 | 
						|
	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
 | 
						|
 | 
						|
Note that the suffix you get if you type these commands today may be
 | 
						|
longer than what Linus saw above when he ran these commands, as your
 | 
						|
Git repository may have new commits whose object names begin with
 | 
						|
975b that did not exist back then, and "-g975b" suffix alone may not
 | 
						|
be sufficient to disambiguate these commits.
 | 
						|
 | 
						|
 | 
						|
SEARCH STRATEGY
 | 
						|
---------------
 | 
						|
 | 
						|
For each commit-ish supplied, 'git describe' will first look for
 | 
						|
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.
 | 
						|
 | 
						|
If an exact match was not found, 'git describe' will walk back
 | 
						|
through the commit history to locate an ancestor commit which
 | 
						|
has been tagged.  The ancestor's tag will be output along with an
 | 
						|
abbreviation of the input commit-ish's SHA-1. If `--first-parent` was
 | 
						|
specified then the walk will only consider the first parent of each
 | 
						|
commit.
 | 
						|
 | 
						|
If multiple tags were found during the walk then the tag which
 | 
						|
has the fewest commits different from the input commit-ish will be
 | 
						|
selected and output.  Here fewest commits different is defined as
 | 
						|
the number of commits which would be shown by `git log tag..input`
 | 
						|
will be the smallest number of commits possible.
 | 
						|
 | 
						|
BUGS
 | 
						|
----
 | 
						|
 | 
						|
Tree objects as well as tag objects not pointing at commits, cannot be described.
 | 
						|
When describing blobs, the lightweight tags pointing at blobs are ignored,
 | 
						|
but the blob is still described as <committ-ish>:<path> despite the lightweight
 | 
						|
tag being favorable.
 | 
						|
 | 
						|
GIT
 | 
						|
---
 | 
						|
Part of the linkgit:git[1] suite
 |