2005-08-23 16:49:47 +08:00
|
|
|
git-rev-parse(1)
|
|
|
|
================
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
2006-03-10 00:24:50 +08:00
|
|
|
git-rev-parse - Pick out and massage parameters
|
2005-08-23 16:49:47 +08:00
|
|
|
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
2008-06-30 14:09:04 +08:00
|
|
|
'git rev-parse' [ --option ] <args>...
|
2005-08-23 16:49:47 +08:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
2005-09-08 05:08:38 +08:00
|
|
|
|
2006-06-04 04:27:26 +08:00
|
|
|
Many git porcelainish commands take mixture of flags
|
2005-09-08 05:08:38 +08:00
|
|
|
(i.e. parameters that begin with a dash '-') and parameters
|
2010-01-10 07:33:00 +08:00
|
|
|
meant for the underlying 'git rev-list' command they use internally
|
2008-07-01 02:56:34 +08:00
|
|
|
and flags and parameters for the other commands they use
|
2010-01-10 07:33:00 +08:00
|
|
|
downstream of 'git rev-list'. This command is used to
|
2005-09-08 05:08:38 +08:00
|
|
|
distinguish between them.
|
2005-08-23 16:49:47 +08:00
|
|
|
|
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-------
|
2007-11-04 18:30:53 +08:00
|
|
|
--parseopt::
|
2010-01-10 07:33:00 +08:00
|
|
|
Use 'git rev-parse' in option parsing mode (see PARSEOPT section below).
|
2007-11-04 18:30:53 +08:00
|
|
|
|
2009-04-29 04:29:24 +08:00
|
|
|
--keep-dashdash::
|
2007-11-04 18:30:53 +08:00
|
|
|
Only meaningful in `--parseopt` mode. Tells the option parser to echo
|
|
|
|
out the first `--` met instead of skipping it.
|
|
|
|
|
2009-06-14 07:58:43 +08:00
|
|
|
--stop-at-non-option::
|
|
|
|
Only meaningful in `--parseopt` mode. Lets the option parser stop at
|
|
|
|
the first non-option argument. This can be used to parse sub-commands
|
2010-01-31 21:24:39 +08:00
|
|
|
that take options themselves.
|
2009-06-14 07:58:43 +08:00
|
|
|
|
2009-04-25 12:55:26 +08:00
|
|
|
--sq-quote::
|
2010-01-10 07:33:00 +08:00
|
|
|
Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE
|
2009-04-25 12:55:26 +08:00
|
|
|
section below). In contrast to the `--sq` option below, this
|
|
|
|
mode does only quoting. Nothing else is done to command input.
|
|
|
|
|
2005-09-08 05:08:38 +08:00
|
|
|
--revs-only::
|
|
|
|
Do not output flags and parameters not meant for
|
2010-01-10 07:33:00 +08:00
|
|
|
'git rev-list' command.
|
2005-09-08 05:08:38 +08:00
|
|
|
|
|
|
|
--no-revs::
|
|
|
|
Do not output flags and parameters meant for
|
2010-01-10 07:33:00 +08:00
|
|
|
'git rev-list' command.
|
2005-09-08 05:08:38 +08:00
|
|
|
|
|
|
|
--flags::
|
|
|
|
Do not output non-flag parameters.
|
|
|
|
|
|
|
|
--no-flags::
|
|
|
|
Do not output flag parameters.
|
|
|
|
|
|
|
|
--default <arg>::
|
|
|
|
If there is no parameter given by the user, use `<arg>`
|
|
|
|
instead.
|
|
|
|
|
|
|
|
--verify::
|
|
|
|
The parameter given must be usable as a single, valid
|
|
|
|
object name. Otherwise barf and abort.
|
|
|
|
|
2008-06-08 09:36:09 +08:00
|
|
|
-q::
|
|
|
|
--quiet::
|
2008-04-26 19:57:23 +08:00
|
|
|
Only meaningful in `--verify` mode. Do not output an error
|
|
|
|
message if the first argument is not a valid object name;
|
|
|
|
instead exit with non-zero status silently.
|
|
|
|
|
2005-09-08 05:08:38 +08:00
|
|
|
--sq::
|
|
|
|
Usually the output is made one line per flag and
|
|
|
|
parameter. This option makes output a single line,
|
|
|
|
properly quoted for consumption by shell. Useful when
|
|
|
|
you expect your parameter to contain whitespaces and
|
|
|
|
newlines (e.g. when using pickaxe `-S` with
|
2010-08-20 18:35:03 +08:00
|
|
|
'git diff-{asterisk}'). In contrast to the `--sq-quote` option,
|
2009-04-25 12:55:26 +08:00
|
|
|
the command input is still interpreted as usual.
|
2005-09-08 05:08:38 +08:00
|
|
|
|
|
|
|
--not::
|
2005-10-06 07:56:31 +08:00
|
|
|
When showing object names, prefix them with '{caret}' and
|
|
|
|
strip '{caret}' prefix from the object names that already have
|
2005-09-08 05:08:38 +08:00
|
|
|
one.
|
|
|
|
|
|
|
|
--symbolic::
|
|
|
|
Usually the object names are output in SHA1 form (with
|
2005-10-06 07:56:31 +08:00
|
|
|
possible '{caret}' prefix); this option makes them output in a
|
2005-09-08 05:08:38 +08:00
|
|
|
form as close to the original input as possible.
|
|
|
|
|
2008-01-06 04:09:55 +08:00
|
|
|
--symbolic-full-name::
|
|
|
|
This is similar to \--symbolic, but it omits input that
|
|
|
|
are not refs (i.e. branch or tag names; or more
|
|
|
|
explicitly disambiguating "heads/master" form, when you
|
|
|
|
want to name the "master" branch when there is an
|
|
|
|
unfortunately named tag "master"), and show them as full
|
|
|
|
refnames (e.g. "refs/heads/master").
|
2005-09-08 05:08:38 +08:00
|
|
|
|
2010-10-09 01:31:17 +08:00
|
|
|
--abbrev-ref[=(strict|loose)]::
|
2009-04-13 19:20:26 +08:00
|
|
|
A non-ambiguous short name of the objects name.
|
|
|
|
The option core.warnAmbiguousRefs is used to select the strict
|
|
|
|
abbreviation mode.
|
|
|
|
|
2005-09-08 05:08:38 +08:00
|
|
|
--all::
|
docs: don't talk about $GIT_DIR/refs/ everywhere
It is misleading to say that we pull refs from $GIT_DIR/refs/*, because we
may also consult the packed refs mechanism. These days we tend to treat
the "refs hierarchy" as more of an abstract namespace that happens to be
represented as $GIT_DIR/refs. At best, this is a minor inaccuracy, but at
worst it can confuse users who then look in $GIT_DIR/refs and find that it
is missing some of the refs they expected to see.
This patch drops most uses of "$GIT_DIR/refs/*", changing them into just
"refs/*", under the assumption that users can handle the concept of an
abstract refs namespace. There are a few things to note:
- most cases just dropped the $GIT_DIR/ portion. But for cases where
that left _just_ the word "refs", I changed it to "refs/" to help
indicate that it was a hierarchy. I didn't do the same for longer
paths (e.g., "refs/heads" remained, instead of becoming
"refs/heads/").
- in some cases, no change was made, as the text was explicitly about
unpacked refs (e.g., the discussion in git-pack-refs).
- In some cases it made sense instead to note the existence of packed
refs (e.g., in check-ref-format and rev-parse).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-02-18 09:16:20 +08:00
|
|
|
Show all refs found in `refs/`.
|
2005-09-08 05:08:38 +08:00
|
|
|
|
2010-01-20 17:48:26 +08:00
|
|
|
--branches[=pattern]::
|
|
|
|
--tags[=pattern]::
|
|
|
|
--remotes[=pattern]::
|
2010-01-22 08:21:38 +08:00
|
|
|
Show all branches, tags, or remote-tracking branches,
|
docs: don't talk about $GIT_DIR/refs/ everywhere
It is misleading to say that we pull refs from $GIT_DIR/refs/*, because we
may also consult the packed refs mechanism. These days we tend to treat
the "refs hierarchy" as more of an abstract namespace that happens to be
represented as $GIT_DIR/refs. At best, this is a minor inaccuracy, but at
worst it can confuse users who then look in $GIT_DIR/refs and find that it
is missing some of the refs they expected to see.
This patch drops most uses of "$GIT_DIR/refs/*", changing them into just
"refs/*", under the assumption that users can handle the concept of an
abstract refs namespace. There are a few things to note:
- most cases just dropped the $GIT_DIR/ portion. But for cases where
that left _just_ the word "refs", I changed it to "refs/" to help
indicate that it was a hierarchy. I didn't do the same for longer
paths (e.g., "refs/heads" remained, instead of becoming
"refs/heads/").
- in some cases, no change was made, as the text was explicitly about
unpacked refs (e.g., the discussion in git-pack-refs).
- In some cases it made sense instead to note the existence of packed
refs (e.g., in check-ref-format and rev-parse).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-02-18 09:16:20 +08:00
|
|
|
respectively (i.e., refs found in `refs/heads`,
|
|
|
|
`refs/tags`, or `refs/remotes`, respectively).
|
2010-01-22 08:21:38 +08:00
|
|
|
+
|
|
|
|
If a `pattern` is given, only refs matching the given shell glob are
|
|
|
|
shown. If the pattern does not contain a globbing character (`?`,
|
2010-08-20 18:35:03 +08:00
|
|
|
`{asterisk}`, or `[`), it is turned into a prefix match by
|
|
|
|
appending `/{asterisk}`.
|
2010-01-22 08:21:38 +08:00
|
|
|
|
|
|
|
--glob=pattern::
|
|
|
|
Show all refs matching the shell glob pattern `pattern`. If
|
|
|
|
the pattern does not start with `refs/`, this is automatically
|
|
|
|
prepended. If the pattern does not contain a globbing
|
2010-08-20 18:35:03 +08:00
|
|
|
character (`?`, `{asterisk}`, or `[`), it is turned into a prefix
|
|
|
|
match by appending `/{asterisk}`.
|
2006-05-14 09:43:00 +08:00
|
|
|
|
2010-01-12 06:33:48 +08:00
|
|
|
--show-toplevel::
|
|
|
|
Show the absolute path of the top-level directory.
|
|
|
|
|
2005-09-08 05:08:38 +08:00
|
|
|
--show-prefix::
|
2005-12-23 14:35:38 +08:00
|
|
|
When the command is invoked from a subdirectory, show the
|
2005-09-08 05:08:38 +08:00
|
|
|
path of the current directory relative to the top-level
|
|
|
|
directory.
|
2005-08-23 16:49:47 +08:00
|
|
|
|
2005-12-23 14:35:38 +08:00
|
|
|
--show-cdup::
|
|
|
|
When the command is invoked from a subdirectory, show the
|
|
|
|
path of the top-level directory relative to the current
|
|
|
|
directory (typically a sequence of "../", or an empty string).
|
|
|
|
|
2006-02-18 09:11:36 +08:00
|
|
|
--git-dir::
|
|
|
|
Show `$GIT_DIR` if defined else show the path to the .git directory.
|
|
|
|
|
2007-06-17 03:03:44 +08:00
|
|
|
--is-inside-git-dir::
|
2007-06-03 22:46:04 +08:00
|
|
|
When the current working directory is below the repository
|
|
|
|
directory print "true", otherwise "false".
|
|
|
|
|
2007-06-06 15:10:42 +08:00
|
|
|
--is-inside-work-tree::
|
|
|
|
When the current working directory is inside the work tree of the
|
|
|
|
repository print "true", otherwise "false".
|
|
|
|
|
2007-06-03 22:46:36 +08:00
|
|
|
--is-bare-repository::
|
|
|
|
When the repository is bare print "true", otherwise "false".
|
2007-06-17 03:03:44 +08:00
|
|
|
|
2010-02-25 07:34:15 +08:00
|
|
|
--local-env-vars::
|
|
|
|
List the GIT_* environment variables that are local to the
|
|
|
|
repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR).
|
|
|
|
Only the names of the variables are listed, not their value,
|
|
|
|
even if they are set.
|
|
|
|
|
2008-06-08 09:36:09 +08:00
|
|
|
--short::
|
|
|
|
--short=number::
|
2006-02-18 09:11:36 +08:00
|
|
|
Instead of outputting the full SHA1 values of object names try to
|
2006-06-04 04:27:26 +08:00
|
|
|
abbreviate them to a shorter unique name. When no length is specified
|
2006-02-18 09:11:36 +08:00
|
|
|
7 is used. The minimum length is 4.
|
|
|
|
|
2008-06-08 09:36:09 +08:00
|
|
|
--since=datestring::
|
|
|
|
--after=datestring::
|
2008-07-01 02:56:34 +08:00
|
|
|
Parse the date string, and output the corresponding
|
2010-01-10 07:33:00 +08:00
|
|
|
--max-age= parameter for 'git rev-list'.
|
2005-11-03 15:41:25 +08:00
|
|
|
|
2008-06-08 09:36:09 +08:00
|
|
|
--until=datestring::
|
|
|
|
--before=datestring::
|
2008-07-01 02:56:34 +08:00
|
|
|
Parse the date string, and output the corresponding
|
2010-01-10 07:33:00 +08:00
|
|
|
--min-age= parameter for 'git rev-list'.
|
2005-11-03 15:41:25 +08:00
|
|
|
|
2005-08-23 16:49:47 +08:00
|
|
|
<args>...::
|
2005-09-08 05:08:38 +08:00
|
|
|
Flags and parameters to be parsed.
|
2005-08-23 16:49:47 +08:00
|
|
|
|
|
|
|
|
2010-07-06 00:11:39 +08:00
|
|
|
include::revisions.txt[]
|
2006-07-07 13:37:51 +08:00
|
|
|
|
2007-11-04 18:30:53 +08:00
|
|
|
PARSEOPT
|
|
|
|
--------
|
|
|
|
|
2010-01-10 07:33:00 +08:00
|
|
|
In `--parseopt` mode, 'git rev-parse' helps massaging options to bring to shell
|
2007-11-04 18:30:53 +08:00
|
|
|
scripts the same facilities C builtins have. It works as an option normalizer
|
|
|
|
(e.g. splits single switches aggregate values), a bit like `getopt(1)` does.
|
|
|
|
|
|
|
|
It takes on the standard input the specification of the options to parse and
|
2010-07-30 23:01:50 +08:00
|
|
|
understand, and echoes on the standard output a string suitable for `sh(1)` `eval`
|
2007-11-04 18:30:53 +08:00
|
|
|
to replace the arguments with normalized ones. In case of error, it outputs
|
|
|
|
usage on the standard error stream, and exits with code 129.
|
|
|
|
|
2010-07-30 23:01:50 +08:00
|
|
|
Note: Make sure you quote the result when passing it to `eval`. See
|
|
|
|
below for an example.
|
|
|
|
|
2007-11-04 18:30:53 +08:00
|
|
|
Input Format
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
2010-01-10 07:33:00 +08:00
|
|
|
'git rev-parse --parseopt' input format is fully text based. It has two parts,
|
2007-11-04 18:30:53 +08:00
|
|
|
separated by a line that contains only `--`. The lines before the separator
|
|
|
|
(should be more than one) are used for the usage.
|
|
|
|
The lines after the separator describe the options.
|
|
|
|
|
|
|
|
Each line of options has this format:
|
|
|
|
|
|
|
|
------------
|
2008-03-02 16:21:38 +08:00
|
|
|
<opt_spec><flags>* SP+ help LF
|
2007-11-04 18:30:53 +08:00
|
|
|
------------
|
|
|
|
|
|
|
|
`<opt_spec>`::
|
|
|
|
its format is the short option character, then the long option name
|
|
|
|
separated by a comma. Both parts are not required, though at least one
|
|
|
|
is necessary. `h,help`, `dry-run` and `f` are all three correct
|
|
|
|
`<opt_spec>`.
|
|
|
|
|
2008-03-02 16:21:38 +08:00
|
|
|
`<flags>`::
|
|
|
|
`<flags>` are of `*`, `=`, `?` or `!`.
|
|
|
|
* Use `=` if the option takes an argument.
|
|
|
|
|
|
|
|
* Use `?` to mean that the option is optional (though its use is discouraged).
|
|
|
|
|
|
|
|
* Use `*` to mean that this option should not be listed in the usage
|
|
|
|
generated for the `-h` argument. It's shown for `--help-all` as
|
2008-05-02 11:30:47 +08:00
|
|
|
documented in linkgit:gitcli[7].
|
2008-03-02 16:21:38 +08:00
|
|
|
|
|
|
|
* Use `!` to not make the corresponding negated long option available.
|
2007-11-04 18:30:53 +08:00
|
|
|
|
|
|
|
The remainder of the line, after stripping the spaces, is used
|
|
|
|
as the help associated to the option.
|
|
|
|
|
|
|
|
Blank lines are ignored, and lines that don't match this specification are used
|
|
|
|
as option group headers (start the line with a space to create such
|
|
|
|
lines on purpose).
|
|
|
|
|
|
|
|
Example
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
------------
|
|
|
|
OPTS_SPEC="\
|
|
|
|
some-command [options] <args>...
|
|
|
|
|
|
|
|
some-command does foo and bar!
|
|
|
|
--
|
|
|
|
h,help show the help
|
|
|
|
|
|
|
|
foo some nifty option --foo
|
|
|
|
bar= some cool option --bar with an argument
|
|
|
|
|
|
|
|
An option group Header
|
|
|
|
C? option C with an optional argument"
|
|
|
|
|
2010-07-30 23:01:50 +08:00
|
|
|
eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
|
2007-11-04 18:30:53 +08:00
|
|
|
------------
|
|
|
|
|
2009-04-25 12:55:26 +08:00
|
|
|
SQ-QUOTE
|
|
|
|
--------
|
|
|
|
|
2010-01-10 07:33:00 +08:00
|
|
|
In `--sq-quote` mode, 'git rev-parse' echoes on the standard output a
|
2009-04-25 12:55:26 +08:00
|
|
|
single line suitable for `sh(1)` `eval`. This line is made by
|
|
|
|
normalizing the arguments following `--sq-quote`. Nothing other than
|
|
|
|
quoting the arguments is done.
|
|
|
|
|
|
|
|
If you want command input to still be interpreted as usual by
|
2010-01-10 07:33:00 +08:00
|
|
|
'git rev-parse' before the output is shell quoted, see the `--sq`
|
2009-04-25 12:55:26 +08:00
|
|
|
option.
|
|
|
|
|
|
|
|
Example
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
------------
|
|
|
|
$ cat >your-git-script.sh <<\EOF
|
|
|
|
#!/bin/sh
|
|
|
|
args=$(git rev-parse --sq-quote "$@") # quote user-supplied arguments
|
|
|
|
command="git frotz -n24 $args" # and use it inside a handcrafted
|
|
|
|
# command line
|
|
|
|
eval "$command"
|
|
|
|
EOF
|
|
|
|
|
|
|
|
$ sh your-git-script.sh "a b'c"
|
|
|
|
------------
|
|
|
|
|
2008-05-13 12:51:41 +08:00
|
|
|
EXAMPLES
|
|
|
|
--------
|
|
|
|
|
|
|
|
* Print the object name of the current commit:
|
|
|
|
+
|
|
|
|
------------
|
|
|
|
$ git rev-parse --verify HEAD
|
|
|
|
------------
|
|
|
|
|
|
|
|
* Print the commit object name from the revision in the $REV shell variable:
|
|
|
|
+
|
|
|
|
------------
|
|
|
|
$ git rev-parse --verify $REV
|
|
|
|
------------
|
|
|
|
+
|
|
|
|
This will error out if $REV is empty or not a valid revision.
|
|
|
|
|
|
|
|
* Same as above:
|
|
|
|
+
|
|
|
|
------------
|
|
|
|
$ git rev-parse --default master --verify $REV
|
|
|
|
------------
|
|
|
|
+
|
|
|
|
but if $REV is empty, the commit object name from master will be printed.
|
|
|
|
|
2007-11-04 18:30:53 +08:00
|
|
|
|
2005-08-23 16:49:47 +08:00
|
|
|
Author
|
|
|
|
------
|
2007-11-04 18:30:53 +08:00
|
|
|
Written by Linus Torvalds <torvalds@osdl.org> .
|
2008-07-22 03:14:42 +08:00
|
|
|
Junio C Hamano <gitster@pobox.com> and Pierre Habouzit <madcoder@debian.org>
|
2005-08-23 16:49:47 +08:00
|
|
|
|
|
|
|
Documentation
|
|
|
|
--------------
|
|
|
|
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
|
|
|
|
|
|
|
|
GIT
|
|
|
|
---
|
2008-06-06 15:07:32 +08:00
|
|
|
Part of the linkgit:git[1] suite
|