Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 1 | git-rev-parse(1) |
| 2 | ================ |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Junio C Hamano | 0107892 | 2006-03-10 00:31:47 | [diff] [blame] | 6 | git-rev-parse - Pick out and massage parameters |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 7 | |
| 8 | |
| 9 | SYNOPSIS |
| 10 | -------- |
Junio C Hamano | 15567bc | 2011-07-23 00:51:59 | [diff] [blame] | 11 | [verse] |
Junio C Hamano | c9cb517 | 2018-06-01 07:13:44 | [diff] [blame] | 12 | 'git rev-parse' [<options>] <args>... |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 13 | |
| 14 | DESCRIPTION |
| 15 | ----------- |
| 16 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 17 | Many Git porcelainish commands take mixture of flags |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 18 | (i.e. parameters that begin with a dash '-') and parameters |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 19 | meant for the underlying 'git rev-list' command they use internally |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 20 | and flags and parameters for the other commands they use |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 21 | downstream of 'git rev-list'. This command is used to |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 22 | distinguish between them. |
| 23 | |
| 24 | |
| 25 | OPTIONS |
| 26 | ------- |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 27 | |
| 28 | Operation Modes |
| 29 | ~~~~~~~~~~~~~~~ |
| 30 | |
| 31 | Each of these options must appear first on the command line. |
| 32 | |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 33 | --parseopt:: |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 34 | Use 'git rev-parse' in option parsing mode (see PARSEOPT section below). |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 35 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 36 | --sq-quote:: |
| 37 | Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE |
| 38 | section below). In contrast to the `--sq` option below, this |
| 39 | mode does only quoting. Nothing else is done to command input. |
| 40 | |
| 41 | Options for --parseopt |
| 42 | ~~~~~~~~~~~~~~~~~~~~~~ |
| 43 | |
Junio C Hamano | a9499de | 2009-04-30 03:38:48 | [diff] [blame] | 44 | --keep-dashdash:: |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 45 | Only meaningful in `--parseopt` mode. Tells the option parser to echo |
| 46 | out the first `--` met instead of skipping it. |
| 47 | |
Junio C Hamano | ccc4d37 | 2009-07-06 18:05:38 | [diff] [blame] | 48 | --stop-at-non-option:: |
| 49 | Only meaningful in `--parseopt` mode. Lets the option parser stop at |
| 50 | the first non-option argument. This can be used to parse sub-commands |
Junio C Hamano | 167b138 | 2010-01-31 23:04:31 | [diff] [blame] | 51 | that take options themselves. |
Junio C Hamano | ccc4d37 | 2009-07-06 18:05:38 | [diff] [blame] | 52 | |
Junio C Hamano | f079f70 | 2013-12-06 23:43:18 | [diff] [blame] | 53 | --stuck-long:: |
| 54 | Only meaningful in `--parseopt` mode. Output the options in their |
| 55 | long form if available, and with their arguments stuck. |
| 56 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 57 | Options for Filtering |
| 58 | ~~~~~~~~~~~~~~~~~~~~~ |
Junio C Hamano | 7ae1825 | 2009-05-23 09:53:32 | [diff] [blame] | 59 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 60 | --revs-only:: |
| 61 | Do not output flags and parameters not meant for |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 62 | 'git rev-list' command. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 63 | |
| 64 | --no-revs:: |
| 65 | Do not output flags and parameters meant for |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 66 | 'git rev-list' command. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 67 | |
| 68 | --flags:: |
| 69 | Do not output non-flag parameters. |
| 70 | |
| 71 | --no-flags:: |
| 72 | Do not output flag parameters. |
| 73 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 74 | Options for Output |
| 75 | ~~~~~~~~~~~~~~~~~~ |
| 76 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 77 | --default <arg>:: |
| 78 | If there is no parameter given by the user, use `<arg>` |
| 79 | instead. |
| 80 | |
Junio C Hamano | a195230 | 2013-07-01 21:31:18 | [diff] [blame] | 81 | --prefix <arg>:: |
| 82 | Behave as if 'git rev-parse' was invoked from the `<arg>` |
| 83 | subdirectory of the working tree. Any relative filenames are |
| 84 | resolved as if they are prefixed by `<arg>` and will be printed |
| 85 | in that form. |
| 86 | + |
| 87 | This can be used to convert arguments to a command run in a subdirectory |
| 88 | so that they can still be used after moving to the top-level of the |
| 89 | repository. For example: |
| 90 | + |
| 91 | ---- |
| 92 | prefix=$(git rev-parse --show-prefix) |
| 93 | cd "$(git rev-parse --show-toplevel)" |
Junio C Hamano | dda5d0f | 2017-01-19 23:33:31 | [diff] [blame] | 94 | # rev-parse provides the -- needed for 'set' |
| 95 | eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")" |
Junio C Hamano | a195230 | 2013-07-01 21:31:18 | [diff] [blame] | 96 | ---- |
| 97 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 98 | --verify:: |
Junio C Hamano | edf80bd | 2013-04-05 22:14:36 | [diff] [blame] | 99 | Verify that exactly one parameter is provided, and that it |
| 100 | can be turned into a raw 20-byte SHA-1 that can be used to |
| 101 | access the object database. If so, emit it to the standard |
| 102 | output; otherwise, error out. |
| 103 | + |
| 104 | If you want to make sure that the output actually names an object in |
| 105 | your object database and/or can be used as a specific type of object |
Junio C Hamano | 1dbca52 | 2015-05-22 20:48:55 | [diff] [blame] | 106 | you require, you can add the `^{type}` peeling operator to the parameter. |
Junio C Hamano | edf80bd | 2013-04-05 22:14:36 | [diff] [blame] | 107 | For example, `git rev-parse "$VAR^{commit}"` will make sure `$VAR` |
| 108 | names an existing object that is a commit-ish (i.e. a commit, or an |
| 109 | annotated tag that points at a commit). To make sure that `$VAR` |
| 110 | names an existing object of any type, `git rev-parse "$VAR^{object}"` |
| 111 | can be used. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 112 | |
Junio C Hamano | eb41599 | 2008-06-08 22:49:47 | [diff] [blame] | 113 | -q:: |
| 114 | --quiet:: |
Junio C Hamano | 9ab8767 | 2008-04-28 08:40:29 | [diff] [blame] | 115 | Only meaningful in `--verify` mode. Do not output an error |
| 116 | message if the first argument is not a valid object name; |
| 117 | instead exit with non-zero status silently. |
Junio C Hamano | 00b9f1a | 2014-09-29 23:11:28 | [diff] [blame] | 118 | SHA-1s for valid object names are printed to stdout on success. |
Junio C Hamano | 9ab8767 | 2008-04-28 08:40:29 | [diff] [blame] | 119 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 120 | --sq:: |
| 121 | Usually the output is made one line per flag and |
| 122 | parameter. This option makes output a single line, |
| 123 | properly quoted for consumption by shell. Useful when |
| 124 | you expect your parameter to contain whitespaces and |
| 125 | newlines (e.g. when using pickaxe `-S` with |
Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 126 | 'git diff-{asterisk}'). In contrast to the `--sq-quote` option, |
Junio C Hamano | 7ae1825 | 2009-05-23 09:53:32 | [diff] [blame] | 127 | the command input is still interpreted as usual. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 128 | |
Junio C Hamano | e0e20df | 2017-06-04 02:10:21 | [diff] [blame] | 129 | --short[=length]:: |
| 130 | Same as `--verify` but shortens the object name to a unique |
| 131 | prefix with at least `length` characters. The minimum length |
| 132 | is 4, the default is the effective value of the `core.abbrev` |
| 133 | configuration variable (see linkgit:git-config[1]). |
| 134 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 135 | --not:: |
| 136 | When showing object names, prefix them with '{caret}' and |
| 137 | strip '{caret}' prefix from the object names that already have |
| 138 | one. |
| 139 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 140 | --abbrev-ref[=(strict|loose)]:: |
| 141 | A non-ambiguous short name of the objects name. |
| 142 | The option core.warnAmbiguousRefs is used to select the strict |
| 143 | abbreviation mode. |
| 144 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 145 | --symbolic:: |
Junio C Hamano | e3f080d | 2013-04-22 02:27:13 | [diff] [blame] | 146 | Usually the object names are output in SHA-1 form (with |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 147 | possible '{caret}' prefix); this option makes them output in a |
| 148 | form as close to the original input as possible. |
| 149 | |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 150 | --symbolic-full-name:: |
Junio C Hamano | 1dbca52 | 2015-05-22 20:48:55 | [diff] [blame] | 151 | This is similar to --symbolic, but it omits input that |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 152 | are not refs (i.e. branch or tag names; or more |
| 153 | explicitly disambiguating "heads/master" form, when you |
| 154 | want to name the "master" branch when there is an |
| 155 | unfortunately named tag "master"), and show them as full |
| 156 | refnames (e.g. "refs/heads/master"). |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 157 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 158 | Options for Objects |
| 159 | ~~~~~~~~~~~~~~~~~~~ |
Junio C Hamano | bb30064 | 2012-07-22 21:09:14 | [diff] [blame] | 160 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 161 | --all:: |
Junio C Hamano | 4fdccb2 | 2010-02-19 09:58:14 | [diff] [blame] | 162 | Show all refs found in `refs/`. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 163 | |
Junio C Hamano | 57827fb | 2010-01-23 03:02:50 | [diff] [blame] | 164 | --branches[=pattern]:: |
| 165 | --tags[=pattern]:: |
| 166 | --remotes[=pattern]:: |
| 167 | Show all branches, tags, or remote-tracking branches, |
Junio C Hamano | 4fdccb2 | 2010-02-19 09:58:14 | [diff] [blame] | 168 | respectively (i.e., refs found in `refs/heads`, |
| 169 | `refs/tags`, or `refs/remotes`, respectively). |
Junio C Hamano | 57827fb | 2010-01-23 03:02:50 | [diff] [blame] | 170 | + |
| 171 | If a `pattern` is given, only refs matching the given shell glob are |
| 172 | shown. If the pattern does not contain a globbing character (`?`, |
Junio C Hamano | b76a686 | 2012-05-02 22:02:46 | [diff] [blame] | 173 | `*`, or `[`), it is turned into a prefix match by appending `/*`. |
Junio C Hamano | 6959c6c | 2006-05-17 10:34:11 | [diff] [blame] | 174 | |
Junio C Hamano | 57827fb | 2010-01-23 03:02:50 | [diff] [blame] | 175 | --glob=pattern:: |
| 176 | Show all refs matching the shell glob pattern `pattern`. If |
| 177 | the pattern does not start with `refs/`, this is automatically |
| 178 | prepended. If the pattern does not contain a globbing |
Junio C Hamano | b76a686 | 2012-05-02 22:02:46 | [diff] [blame] | 179 | character (`?`, `*`, or `[`), it is turned into a prefix |
| 180 | match by appending `/*`. |
Junio C Hamano | 6959c6c | 2006-05-17 10:34:11 | [diff] [blame] | 181 | |
Junio C Hamano | f079f70 | 2013-12-06 23:43:18 | [diff] [blame] | 182 | --exclude=<glob-pattern>:: |
| 183 | Do not include refs matching '<glob-pattern>' that the next `--all`, |
| 184 | `--branches`, `--tags`, `--remotes`, or `--glob` would otherwise |
| 185 | consider. Repetitions of this option accumulate exclusion patterns |
| 186 | up to the next `--all`, `--branches`, `--tags`, `--remotes`, or |
| 187 | `--glob` option (other options or arguments do not clear |
Junio C Hamano | fb5ffde | 2014-11-04 22:38:56 | [diff] [blame] | 188 | accumulated patterns). |
Junio C Hamano | f079f70 | 2013-12-06 23:43:18 | [diff] [blame] | 189 | + |
| 190 | The patterns given should not begin with `refs/heads`, `refs/tags`, or |
| 191 | `refs/remotes` when applied to `--branches`, `--tags`, or `--remotes`, |
| 192 | respectively, and they must begin with `refs/` when applied to `--glob` |
| 193 | or `--all`. If a trailing '/{asterisk}' is intended, it must be given |
| 194 | explicitly. |
| 195 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 196 | --disambiguate=<prefix>:: |
| 197 | Show every object whose name begins with the given prefix. |
| 198 | The <prefix> must be at least 4 hexadecimal digits long to |
| 199 | avoid listing each and every object in the repository by |
| 200 | mistake. |
Junio C Hamano | a9701f0 | 2010-01-21 00:42:16 | [diff] [blame] | 201 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 202 | Options for Files |
| 203 | ~~~~~~~~~~~~~~~~~ |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 204 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 205 | --local-env-vars:: |
| 206 | List the GIT_* environment variables that are local to the |
| 207 | repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). |
| 208 | Only the names of the variables are listed, not their value, |
| 209 | even if they are set. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 210 | |
Junio C Hamano | e246e3b | 2006-02-19 08:45:18 | [diff] [blame] | 211 | --git-dir:: |
Junio C Hamano | 3609b33 | 2010-12-29 01:34:52 | [diff] [blame] | 212 | Show `$GIT_DIR` if defined. Otherwise show the path to |
Junio C Hamano | 35cd2a8 | 2012-05-23 22:01:13 | [diff] [blame] | 213 | the .git directory. The path shown, when relative, is |
| 214 | relative to the current working directory. |
Junio C Hamano | 3609b33 | 2010-12-29 01:34:52 | [diff] [blame] | 215 | + |
| 216 | If `$GIT_DIR` is not defined and the current directory |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 217 | is not detected to lie in a Git repository or work tree |
Junio C Hamano | 3609b33 | 2010-12-29 01:34:52 | [diff] [blame] | 218 | print a message to stderr and exit with nonzero status. |
Junio C Hamano | e246e3b | 2006-02-19 08:45:18 | [diff] [blame] | 219 | |
Junio C Hamano | cbe0eb2 | 2017-02-27 23:37:49 | [diff] [blame] | 220 | --absolute-git-dir:: |
| 221 | Like `--git-dir`, but its output is always the canonicalized |
| 222 | absolute path. |
| 223 | |
Junio C Hamano | 4cc4a84 | 2015-05-11 22:41:02 | [diff] [blame] | 224 | --git-common-dir:: |
| 225 | Show `$GIT_COMMON_DIR` if defined, else `$GIT_DIR`. |
| 226 | |
Junio C Hamano | ee695f2 | 2007-06-21 00:35:36 | [diff] [blame] | 227 | --is-inside-git-dir:: |
Junio C Hamano | d526ba9 | 2007-07-02 00:17:42 | [diff] [blame] | 228 | When the current working directory is below the repository |
| 229 | directory print "true", otherwise "false". |
| 230 | |
| 231 | --is-inside-work-tree:: |
| 232 | When the current working directory is inside the work tree of the |
| 233 | repository print "true", otherwise "false". |
| 234 | |
| 235 | --is-bare-repository:: |
| 236 | When the repository is bare print "true", otherwise "false". |
Junio C Hamano | ee695f2 | 2007-06-21 00:35:36 | [diff] [blame] | 237 | |
Junio C Hamano | d4bbec0 | 2017-09-25 07:24:53 | [diff] [blame] | 238 | --is-shallow-repository:: |
| 239 | When the repository is shallow print "true", otherwise "false". |
| 240 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 241 | --resolve-git-dir <path>:: |
| 242 | Check if <path> is a valid repository or a gitfile that |
| 243 | points at a valid repository, and print the location of the |
| 244 | repository. If <path> is a gitfile then the resolved path |
| 245 | to the real repository is printed. |
Junio C Hamano | 636c8b2 | 2010-03-07 22:25:17 | [diff] [blame] | 246 | |
Junio C Hamano | 4cc4a84 | 2015-05-11 22:41:02 | [diff] [blame] | 247 | --git-path <path>:: |
| 248 | Resolve "$GIT_DIR/<path>" and takes other path relocation |
| 249 | variables such as $GIT_OBJECT_DIRECTORY, |
| 250 | $GIT_INDEX_FILE... into account. For example, if |
| 251 | $GIT_OBJECT_DIRECTORY is set to /foo/bar then "git rev-parse |
| 252 | --git-path objects/abc" returns /foo/bar/abc. |
| 253 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 254 | --show-cdup:: |
| 255 | When the command is invoked from a subdirectory, show the |
| 256 | path of the top-level directory relative to the current |
| 257 | directory (typically a sequence of "../", or an empty string). |
| 258 | |
| 259 | --show-prefix:: |
| 260 | When the command is invoked from a subdirectory, show the |
| 261 | path of the current directory relative to the top-level |
| 262 | directory. |
| 263 | |
| 264 | --show-toplevel:: |
Junio C Hamano | b3f862c | 2019-12-05 22:22:00 | [diff] [blame] | 265 | Show the absolute path of the top-level directory of the working |
| 266 | tree. If there is no working tree, report an error. |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 267 | |
Junio C Hamano | ce019c0 | 2017-10-30 05:57:46 | [diff] [blame] | 268 | --show-superproject-working-tree:: |
Junio C Hamano | 3d4a66d | 2017-03-17 21:07:26 | [diff] [blame] | 269 | Show the absolute path of the root of the superproject's |
| 270 | working tree (if exists) that uses the current repository as |
| 271 | its submodule. Outputs nothing if the current repository is |
| 272 | not used as a submodule by any project. |
| 273 | |
Junio C Hamano | 6f0c944 | 2014-07-16 21:51:32 | [diff] [blame] | 274 | --shared-index-path:: |
| 275 | Show the path to the shared index file in split index mode, or |
| 276 | empty if not in split-index mode. |
| 277 | |
Junio C Hamano | 8ac8a3d | 2019-11-11 04:33:46 | [diff] [blame] | 278 | --show-object-format[=(storage|input|output)]:: |
| 279 | Show the object format (hash algorithm) used for the repository |
| 280 | for storage inside the `.git` directory, input, or output. For |
| 281 | input, multiple algorithms may be printed, space-separated. |
| 282 | If not specified, the default is "storage". |
| 283 | |
| 284 | |
Junio C Hamano | 0241d05 | 2013-08-30 23:52:17 | [diff] [blame] | 285 | Other Options |
| 286 | ~~~~~~~~~~~~~ |
Junio C Hamano | e246e3b | 2006-02-19 08:45:18 | [diff] [blame] | 287 | |
Junio C Hamano | eb41599 | 2008-06-08 22:49:47 | [diff] [blame] | 288 | --since=datestring:: |
| 289 | --after=datestring:: |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 290 | Parse the date string, and output the corresponding |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 291 | --max-age= parameter for 'git rev-list'. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 292 | |
Junio C Hamano | eb41599 | 2008-06-08 22:49:47 | [diff] [blame] | 293 | --until=datestring:: |
| 294 | --before=datestring:: |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 295 | Parse the date string, and output the corresponding |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 296 | --min-age= parameter for 'git rev-list'. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 297 | |
| 298 | <args>...:: |
| 299 | Flags and parameters to be parsed. |
| 300 | |
| 301 | |
Junio C Hamano | 78e3a78 | 2010-07-15 22:24:45 | [diff] [blame] | 302 | include::revisions.txt[] |
Junio C Hamano | 872c568 | 2006-07-07 06:05:40 | [diff] [blame] | 303 | |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 304 | PARSEOPT |
| 305 | -------- |
| 306 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 307 | In `--parseopt` mode, 'git rev-parse' helps massaging options to bring to shell |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 308 | scripts the same facilities C builtins have. It works as an option normalizer |
| 309 | (e.g. splits single switches aggregate values), a bit like `getopt(1)` does. |
| 310 | |
| 311 | It takes on the standard input the specification of the options to parse and |
Junio C Hamano | a978876 | 2010-08-03 15:15:54 | [diff] [blame] | 312 | understand, and echoes on the standard output a string suitable for `sh(1)` `eval` |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 313 | to replace the arguments with normalized ones. In case of error, it outputs |
| 314 | usage on the standard error stream, and exits with code 129. |
| 315 | |
Junio C Hamano | a978876 | 2010-08-03 15:15:54 | [diff] [blame] | 316 | Note: Make sure you quote the result when passing it to `eval`. See |
| 317 | below for an example. |
| 318 | |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 319 | Input Format |
| 320 | ~~~~~~~~~~~~ |
| 321 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 322 | 'git rev-parse --parseopt' input format is fully text based. It has two parts, |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 323 | separated by a line that contains only `--`. The lines before the separator |
Junio C Hamano | 52b6ba3 | 2014-04-01 00:26:48 | [diff] [blame] | 324 | (should be one or more) are used for the usage. |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 325 | The lines after the separator describe the options. |
| 326 | |
| 327 | Each line of options has this format: |
| 328 | |
| 329 | ------------ |
Junio C Hamano | d75148a | 2014-04-08 19:48:38 | [diff] [blame] | 330 | <opt-spec><flags>*<arg-hint>? SP+ help LF |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 331 | ------------ |
| 332 | |
Junio C Hamano | d75148a | 2014-04-08 19:48:38 | [diff] [blame] | 333 | `<opt-spec>`:: |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 334 | its format is the short option character, then the long option name |
| 335 | separated by a comma. Both parts are not required, though at least one |
Junio C Hamano | d7ed404 | 2015-08-03 19:43:00 | [diff] [blame] | 336 | is necessary. May not contain any of the `<flags>` characters. |
| 337 | `h,help`, `dry-run` and `f` are examples of correct `<opt-spec>`. |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 338 | |
Junio C Hamano | bb34317 | 2008-03-09 10:39:09 | [diff] [blame] | 339 | `<flags>`:: |
| 340 | `<flags>` are of `*`, `=`, `?` or `!`. |
| 341 | * Use `=` if the option takes an argument. |
| 342 | |
Junio C Hamano | f079f70 | 2013-12-06 23:43:18 | [diff] [blame] | 343 | * Use `?` to mean that the option takes an optional argument. You |
| 344 | probably want to use the `--stuck-long` mode to be able to |
| 345 | unambiguously parse the optional argument. |
Junio C Hamano | bb34317 | 2008-03-09 10:39:09 | [diff] [blame] | 346 | |
| 347 | * Use `*` to mean that this option should not be listed in the usage |
| 348 | generated for the `-h` argument. It's shown for `--help-all` as |
Junio C Hamano | 2fbcd21 | 2008-05-14 22:26:07 | [diff] [blame] | 349 | documented in linkgit:gitcli[7]. |
Junio C Hamano | bb34317 | 2008-03-09 10:39:09 | [diff] [blame] | 350 | |
| 351 | * Use `!` to not make the corresponding negated long option available. |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 352 | |
Junio C Hamano | d75148a | 2014-04-08 19:48:38 | [diff] [blame] | 353 | `<arg-hint>`:: |
| 354 | `<arg-hint>`, if specified, is used as a name of the argument in the |
| 355 | help output, for options that take arguments. `<arg-hint>` is |
| 356 | terminated by the first whitespace. It is customary to use a |
| 357 | dash to separate words in a multi-word argument hint. |
Junio C Hamano | 52b6ba3 | 2014-04-01 00:26:48 | [diff] [blame] | 358 | |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 359 | The remainder of the line, after stripping the spaces, is used |
| 360 | as the help associated to the option. |
| 361 | |
| 362 | Blank lines are ignored, and lines that don't match this specification are used |
| 363 | as option group headers (start the line with a space to create such |
| 364 | lines on purpose). |
| 365 | |
| 366 | Example |
| 367 | ~~~~~~~ |
| 368 | |
| 369 | ------------ |
| 370 | OPTS_SPEC="\ |
Junio C Hamano | c9cb517 | 2018-06-01 07:13:44 | [diff] [blame] | 371 | some-command [<options>] <args>... |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 372 | |
| 373 | some-command does foo and bar! |
| 374 | -- |
| 375 | h,help show the help |
| 376 | |
| 377 | foo some nifty option --foo |
| 378 | bar= some cool option --bar with an argument |
Junio C Hamano | 52b6ba3 | 2014-04-01 00:26:48 | [diff] [blame] | 379 | baz=arg another cool option --baz with a named argument |
| 380 | qux?path qux may take a path argument but has meaning by itself |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 381 | |
| 382 | An option group Header |
| 383 | C? option C with an optional argument" |
| 384 | |
Junio C Hamano | a978876 | 2010-08-03 15:15:54 | [diff] [blame] | 385 | eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)" |
Junio C Hamano | e125866 | 2007-11-19 05:03:19 | [diff] [blame] | 386 | ------------ |
| 387 | |
Junio C Hamano | 52b6ba3 | 2014-04-01 00:26:48 | [diff] [blame] | 388 | |
| 389 | Usage text |
| 390 | ~~~~~~~~~~ |
| 391 | |
| 392 | When `"$@"` is `-h` or `--help` in the above example, the following |
| 393 | usage text would be shown: |
| 394 | |
| 395 | ------------ |
Junio C Hamano | c9cb517 | 2018-06-01 07:13:44 | [diff] [blame] | 396 | usage: some-command [<options>] <args>... |
Junio C Hamano | 52b6ba3 | 2014-04-01 00:26:48 | [diff] [blame] | 397 | |
| 398 | some-command does foo and bar! |
| 399 | |
| 400 | -h, --help show the help |
| 401 | --foo some nifty option --foo |
| 402 | --bar ... some cool option --bar with an argument |
Junio C Hamano | d75148a | 2014-04-08 19:48:38 | [diff] [blame] | 403 | --baz <arg> another cool option --baz with a named argument |
Junio C Hamano | 52b6ba3 | 2014-04-01 00:26:48 | [diff] [blame] | 404 | --qux[=<path>] qux may take a path argument but has meaning by itself |
| 405 | |
| 406 | An option group Header |
| 407 | -C[...] option C with an optional argument |
| 408 | ------------ |
| 409 | |
Junio C Hamano | 7ae1825 | 2009-05-23 09:53:32 | [diff] [blame] | 410 | SQ-QUOTE |
| 411 | -------- |
| 412 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 413 | In `--sq-quote` mode, 'git rev-parse' echoes on the standard output a |
Junio C Hamano | 7ae1825 | 2009-05-23 09:53:32 | [diff] [blame] | 414 | single line suitable for `sh(1)` `eval`. This line is made by |
| 415 | normalizing the arguments following `--sq-quote`. Nothing other than |
| 416 | quoting the arguments is done. |
| 417 | |
| 418 | If you want command input to still be interpreted as usual by |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 419 | 'git rev-parse' before the output is shell quoted, see the `--sq` |
Junio C Hamano | 7ae1825 | 2009-05-23 09:53:32 | [diff] [blame] | 420 | option. |
| 421 | |
| 422 | Example |
| 423 | ~~~~~~~ |
| 424 | |
| 425 | ------------ |
| 426 | $ cat >your-git-script.sh <<\EOF |
| 427 | #!/bin/sh |
| 428 | args=$(git rev-parse --sq-quote "$@") # quote user-supplied arguments |
| 429 | command="git frotz -n24 $args" # and use it inside a handcrafted |
| 430 | # command line |
| 431 | eval "$command" |
| 432 | EOF |
| 433 | |
| 434 | $ sh your-git-script.sh "a b'c" |
| 435 | ------------ |
| 436 | |
Junio C Hamano | feeb1be | 2008-05-22 00:53:35 | [diff] [blame] | 437 | EXAMPLES |
| 438 | -------- |
| 439 | |
| 440 | * Print the object name of the current commit: |
| 441 | + |
| 442 | ------------ |
| 443 | $ git rev-parse --verify HEAD |
| 444 | ------------ |
| 445 | |
| 446 | * Print the commit object name from the revision in the $REV shell variable: |
| 447 | + |
| 448 | ------------ |
Junio C Hamano | edf80bd | 2013-04-05 22:14:36 | [diff] [blame] | 449 | $ git rev-parse --verify $REV^{commit} |
Junio C Hamano | feeb1be | 2008-05-22 00:53:35 | [diff] [blame] | 450 | ------------ |
| 451 | + |
| 452 | This will error out if $REV is empty or not a valid revision. |
| 453 | |
Junio C Hamano | edf80bd | 2013-04-05 22:14:36 | [diff] [blame] | 454 | * Similar to above: |
Junio C Hamano | feeb1be | 2008-05-22 00:53:35 | [diff] [blame] | 455 | + |
| 456 | ------------ |
| 457 | $ git rev-parse --default master --verify $REV |
| 458 | ------------ |
| 459 | + |
| 460 | but if $REV is empty, the commit object name from master will be printed. |
| 461 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 462 | GIT |
| 463 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 464 | Part of the linkgit:git[1] suite |