debian: new upstream release
[git/debian.git] / Documentation / git-for-each-ref.txt
blobe86d5700ddfe02e72e1cad809f29c555b15b6495
1 git-for-each-ref(1)
2 ===================
4 NAME
5 ----
6 git-for-each-ref - Output information on each ref
8 SYNOPSIS
9 --------
10 [verse]
11 'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
12                    [(--sort=<key>)...] [--format=<format>]
13                    [ --stdin | <pattern>... ]
14                    [--points-at=<object>]
15                    [--merged[=<object>]] [--no-merged[=<object>]]
16                    [--contains[=<object>]] [--no-contains[=<object>]]
17                    [--exclude=<pattern> ...]
19 DESCRIPTION
20 -----------
22 Iterate over all refs that match `<pattern>` and show them
23 according to the given `<format>`, after sorting them according
24 to the given set of `<key>`.  If `<count>` is given, stop after
25 showing that many refs.  The interpolated values in `<format>`
26 can optionally be quoted as string literals in the specified
27 host language allowing their direct evaluation in that language.
29 OPTIONS
30 -------
31 <pattern>...::
32         If one or more patterns are given, only refs are shown that
33         match against at least one pattern, either using fnmatch(3) or
34         literally, in the latter case matching completely or from the
35         beginning up to a slash.
37 --stdin::
38         If `--stdin` is supplied, then the list of patterns is read from
39         standard input instead of from the argument list.
41 --count=<count>::
42         By default the command shows all refs that match
43         `<pattern>`.  This option makes it stop after showing
44         that many refs.
46 --sort=<key>::
47         A field name to sort on.  Prefix `-` to sort in
48         descending order of the value.  When unspecified,
49         `refname` is used.  You may use the --sort=<key> option
50         multiple times, in which case the last key becomes the primary
51         key.
53 --format=<format>::
54         A string that interpolates `%(fieldname)` from a ref being shown
55         and the object it points at.  If `fieldname`
56         is prefixed with an asterisk (`*`) and the ref points
57         at a tag object, use the value for the field in the object
58         which the tag object refers to (instead of the field in the tag object).
59         When unspecified, `<format>` defaults to
60         `%(objectname) SPC %(objecttype) TAB %(refname)`.
61         It also interpolates `%%` to `%`, and `%xx` where `xx`
62         are hex digits interpolates to character with hex code
63         `xx`; for example `%00` interpolates to `\0` (NUL),
64         `%09` to `\t` (TAB) and `%0a` to `\n` (LF).
66 --color[=<when>]::
67         Respect any colors specified in the `--format` option. The
68         `<when>` field must be one of `always`, `never`, or `auto` (if
69         `<when>` is absent, behave as if `always` was given).
71 --shell::
72 --perl::
73 --python::
74 --tcl::
75         If given, strings that substitute `%(fieldname)`
76         placeholders are quoted as string literals suitable for
77         the specified host language.  This is meant to produce
78         a scriptlet that can directly be `eval`ed.
80 --points-at=<object>::
81         Only list refs which points at the given object.
83 --merged[=<object>]::
84         Only list refs whose tips are reachable from the
85         specified commit (HEAD if not specified).
87 --no-merged[=<object>]::
88         Only list refs whose tips are not reachable from the
89         specified commit (HEAD if not specified).
91 --contains[=<object>]::
92         Only list refs which contain the specified commit (HEAD if not
93         specified).
95 --no-contains[=<object>]::
96         Only list refs which don't contain the specified commit (HEAD
97         if not specified).
99 --ignore-case::
100         Sorting and filtering refs are case insensitive.
102 --omit-empty::
103         Do not print a newline after formatted refs where the format expands
104         to the empty string.
106 --exclude=<pattern>::
107         If one or more patterns are given, only refs which do not match
108         any excluded pattern(s) are shown. Matching is done using the
109         same rules as `<pattern>` above.
111 FIELD NAMES
112 -----------
114 Various values from structured fields in referenced objects can
115 be used to interpolate into the resulting output, or as sort
116 keys.
118 For all objects, the following names can be used:
120 refname::
121         The name of the ref (the part after $GIT_DIR/).
122         For a non-ambiguous short name of the ref append `:short`.
123         The option core.warnAmbiguousRefs is used to select the strict
124         abbreviation mode. If `lstrip=<N>` (`rstrip=<N>`) is appended, strips `<N>`
125         slash-separated path components from the front (back) of the refname
126         (e.g. `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo` and
127         `%(refname:rstrip=2)` turns `refs/tags/foo` into `refs`).
128         If `<N>` is a negative number, strip as many path components as
129         necessary from the specified end to leave `-<N>` path components
130         (e.g. `%(refname:lstrip=-2)` turns
131         `refs/tags/foo` into `tags/foo` and `%(refname:rstrip=-1)`
132         turns `refs/tags/foo` into `refs`). When the ref does not have
133         enough components, the result becomes an empty string if
134         stripping with positive <N>, or it becomes the full refname if
135         stripping with negative <N>.  Neither is an error.
137 `strip` can be used as a synonym to `lstrip`.
139 objecttype::
140         The type of the object (`blob`, `tree`, `commit`, `tag`).
142 objectsize::
143         The size of the object (the same as 'git cat-file -s' reports).
144         Append `:disk` to get the size, in bytes, that the object takes up on
145         disk. See the note about on-disk sizes in the `CAVEATS` section below.
146 objectname::
147         The object name (aka SHA-1).
148         For a non-ambiguous abbreviation of the object name append `:short`.
149         For an abbreviation of the object name with desired length append
150         `:short=<length>`, where the minimum length is MINIMUM_ABBREV. The
151         length may be exceeded to ensure unique object names.
152 deltabase::
153         This expands to the object name of the delta base for the
154         given object, if it is stored as a delta.  Otherwise it
155         expands to the null object name (all zeroes).
157 upstream::
158         The name of a local ref which can be considered ``upstream''
159         from the displayed ref. Respects `:short`, `:lstrip` and
160         `:rstrip` in the same way as `refname` above.  Additionally
161         respects `:track` to show "[ahead N, behind M]" and
162         `:trackshort` to show the terse version: ">" (ahead), "<"
163         (behind), "<>" (ahead and behind), or "=" (in sync). `:track`
164         also prints "[gone]" whenever unknown upstream ref is
165         encountered. Append `:track,nobracket` to show tracking
166         information without brackets (i.e "ahead N, behind M").
168 For any remote-tracking branch `%(upstream)`, `%(upstream:remotename)`
169 and `%(upstream:remoteref)` refer to the name of the remote and the
170 name of the tracked remote ref, respectively. In other words, the
171 remote-tracking branch can be updated explicitly and individually by
172 using the refspec `%(upstream:remoteref):%(upstream)` to fetch from
173 `%(upstream:remotename)`.
175 Has no effect if the ref does not have tracking information associated
176 with it.  All the options apart from `nobracket` are mutually exclusive,
177 but if used together the last option is selected.
179 push::
180         The name of a local ref which represents the `@{push}`
181         location for the displayed ref. Respects `:short`, `:lstrip`,
182         `:rstrip`, `:track`, `:trackshort`, `:remotename`, and `:remoteref`
183         options as `upstream` does. Produces an empty string if no `@{push}`
184         ref is configured.
186 HEAD::
187         '*' if HEAD matches current ref (the checked out branch), ' '
188         otherwise.
190 color::
191         Change output color. Followed by `:<colorname>`, where color
192         names are described under Values in the "CONFIGURATION FILE"
193         section of linkgit:git-config[1].  For example,
194         `%(color:bold red)`.
196 align::
197         Left-, middle-, or right-align the content between
198         %(align:...) and %(end). The "align:" is followed by
199         `width=<width>` and `position=<position>` in any order
200         separated by a comma, where the `<position>` is either left,
201         right or middle, default being left and `<width>` is the total
202         length of the content with alignment. For brevity, the
203         "width=" and/or "position=" prefixes may be omitted, and bare
204         <width> and <position> used instead.  For instance,
205         `%(align:<width>,<position>)`. If the contents length is more
206         than the width then no alignment is performed. If used with
207         `--quote` everything in between %(align:...) and %(end) is
208         quoted, but if nested then only the topmost level performs
209         quoting.
211 if::
212         Used as %(if)...%(then)...%(end) or
213         %(if)...%(then)...%(else)...%(end).  If there is an atom with
214         value or string literal after the %(if) then everything after
215         the %(then) is printed, else if the %(else) atom is used, then
216         everything after %(else) is printed. We ignore space when
217         evaluating the string before %(then), this is useful when we
218         use the %(HEAD) atom which prints either "*" or " " and we
219         want to apply the 'if' condition only on the 'HEAD' ref.
220         Append ":equals=<string>" or ":notequals=<string>" to compare
221         the value between the %(if:...) and %(then) atoms with the
222         given string.
224 symref::
225         The ref which the given symbolic ref refers to. If not a
226         symbolic ref, nothing is printed. Respects the `:short`,
227         `:lstrip` and `:rstrip` options in the same way as `refname`
228         above.
230 signature::
231         The GPG signature of a commit.
233 signature:grade::
234         Show "G" for a good (valid) signature, "B" for a bad
235         signature, "U" for a good signature with unknown validity, "X"
236         for a good signature that has expired, "Y" for a good
237         signature made by an expired key, "R" for a good signature
238         made by a revoked key, "E" if the signature cannot be
239         checked (e.g. missing key) and "N" for no signature.
241 signature:signer::
242         The signer of the GPG signature of a commit.
244 signature:key::
245         The key of the GPG signature of a commit.
247 signature:fingerprint::
248         The fingerprint of the GPG signature of a commit.
250 signature:primarykeyfingerprint::
251         The primary key fingerprint of the GPG signature of a commit.
253 signature:trustlevel::
254         The trust level of the GPG signature of a commit. Possible
255         outputs are `ultimate`, `fully`, `marginal`, `never` and `undefined`.
257 worktreepath::
258         The absolute path to the worktree in which the ref is checked
259         out, if it is checked out in any linked worktree. Empty string
260         otherwise.
262 ahead-behind:<committish>::
263         Two integers, separated by a space, demonstrating the number of
264         commits ahead and behind, respectively, when comparing the output
265         ref to the `<committish>` specified in the format.
267 describe[:options]::
268         A human-readable name, like linkgit:git-describe[1];
269         empty string for undescribable commits. The `describe` string may
270         be followed by a colon and one or more comma-separated options.
273 tags=<bool-value>;;
274         Instead of only considering annotated tags, consider
275         lightweight tags as well; see the corresponding option in
276         linkgit:git-describe[1] for details.
277 abbrev=<number>;;
278         Use at least <number> hexadecimal digits; see the corresponding
279         option in linkgit:git-describe[1] for details.
280 match=<pattern>;;
281         Only consider tags matching the given `glob(7)` pattern,
282         excluding the "refs/tags/" prefix; see the corresponding option
283         in linkgit:git-describe[1] for details.
284 exclude=<pattern>;;
285         Do not consider tags matching the given `glob(7)` pattern,
286         excluding the "refs/tags/" prefix; see the corresponding option
287         in linkgit:git-describe[1] for details.
290 In addition to the above, for commit and tag objects, the header
291 field names (`tree`, `parent`, `object`, `type`, and `tag`) can
292 be used to specify the value in the header field.
293 Fields `tree` and `parent` can also be used with modifier `:short` and
294 `:short=<length>` just like `objectname`.
296 For commit and tag objects, the special `creatordate` and `creator`
297 fields will correspond to the appropriate date or name-email-date tuple
298 from the `committer` or `tagger` fields depending on the object type.
299 These are intended for working on a mix of annotated and lightweight tags.
301 Fields that have name-email-date tuple as its value (`author`,
302 `committer`, and `tagger`) can be suffixed with `name`, `email`,
303 and `date` to extract the named component.  For email fields (`authoremail`,
304 `committeremail` and `taggeremail`), `:trim` can be appended to get the email
305 without angle brackets, and `:localpart` to get the part before the `@` symbol
306 out of the trimmed email. In addition to these, the `:mailmap` option and the
307 corresponding `:mailmap,trim` and `:mailmap,localpart` can be used (order does
308 not matter) to get values of the name and email according to the .mailmap file
309 or according to the file set in the mailmap.file or mailmap.blob configuration
310 variable (see linkgit:gitmailmap[5]).
312 The raw data in an object is `raw`.
314 raw:size::
315         The raw data size of the object.
317 Note that `--format=%(raw)` can not be used with `--python`, `--shell`, `--tcl`,
318 because such language may not support arbitrary binary data in their string
319 variable type.
321 The message in a commit or a tag object is `contents`, from which
322 `contents:<part>` can be used to extract various parts out of:
324 contents:size::
325         The size in bytes of the commit or tag message.
327 contents:subject::
328         The first paragraph of the message, which typically is a
329         single line, is taken as the "subject" of the commit or the
330         tag message.
331         Instead of `contents:subject`, field `subject` can also be used to
332         obtain same results. `:sanitize` can be appended to `subject` for
333         subject line suitable for filename.
335 contents:body::
336         The remainder of the commit or the tag message that follows
337         the "subject".
339 contents:signature::
340         The optional GPG signature of the tag.
342 contents:lines=N::
343         The first `N` lines of the message.
345 Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
346 are obtained as `trailers[:options]` (or by using the historical alias
347 `contents:trailers[:options]`). For valid [:option] values see `trailers`
348 section of linkgit:git-log[1].
350 For sorting purposes, fields with numeric values sort in numeric order
351 (`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
352 All other fields are used to sort in their byte-value order.
354 There is also an option to sort by versions, this can be done by using
355 the fieldname `version:refname` or its alias `v:refname`.
357 In any case, a field name that refers to a field inapplicable to
358 the object referred by the ref does not cause an error.  It
359 returns an empty string instead.
361 As a special case for the date-type fields, you may specify a format for
362 the date by adding `:` followed by date format name (see the
363 values the `--date` option to linkgit:git-rev-list[1] takes).
365 Some atoms like %(align) and %(if) always require a matching %(end).
366 We call them "opening atoms" and sometimes denote them as %($open).
368 When a scripting language specific quoting is in effect, everything
369 between a top-level opening atom and its matching %(end) is evaluated
370 according to the semantics of the opening atom and only its result
371 from the top-level is quoted.
374 EXAMPLES
375 --------
377 An example directly producing formatted text.  Show the most recent
378 3 tagged commits:
380 ------------
381 #!/bin/sh
383 git for-each-ref --count=3 --sort='-*authordate' \
384 --format='From: %(*authorname) %(*authoremail)
385 Subject: %(*subject)
386 Date: %(*authordate)
387 Ref: %(*refname)
389 %(*body)
390 ' 'refs/tags'
391 ------------
394 A simple example showing the use of shell eval on the output,
395 demonstrating the use of --shell.  List the prefixes of all heads:
396 ------------
397 #!/bin/sh
399 git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
400 while read entry
402         eval "$entry"
403         echo `dirname $ref`
404 done
405 ------------
408 A bit more elaborate report on tags, demonstrating that the format
409 may be an entire script:
410 ------------
411 #!/bin/sh
413 fmt='
414         r=%(refname)
415         t=%(*objecttype)
416         T=${r#refs/tags/}
418         o=%(*objectname)
419         n=%(*authorname)
420         e=%(*authoremail)
421         s=%(*subject)
422         d=%(*authordate)
423         b=%(*body)
425         kind=Tag
426         if test "z$t" = z
427         then
428                 # could be a lightweight tag
429                 t=%(objecttype)
430                 kind="Lightweight tag"
431                 o=%(objectname)
432                 n=%(authorname)
433                 e=%(authoremail)
434                 s=%(subject)
435                 d=%(authordate)
436                 b=%(body)
437         fi
438         echo "$kind $T points at a $t object $o"
439         if test "z$t" = zcommit
440         then
441                 echo "The commit was authored by $n $e
442 at $d, and titled
444     $s
446 Its message reads as:
448                 echo "$b" | sed -e "s/^/    /"
449                 echo
450         fi
453 eval=`git for-each-ref --shell --format="$fmt" \
454         --sort='*objecttype' \
455         --sort=-taggerdate \
456         refs/tags`
457 eval "$eval"
458 ------------
461 An example to show the usage of %(if)...%(then)...%(else)...%(end).
462 This prefixes the current branch with a star.
464 ------------
465 git for-each-ref --format="%(if)%(HEAD)%(then)* %(else)  %(end)%(refname:short)" refs/heads/
466 ------------
469 An example to show the usage of %(if)...%(then)...%(end).
470 This prints the authorname, if present.
472 ------------
473 git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"
474 ------------
476 CAVEATS
477 -------
479 Note that the sizes of objects on disk are reported accurately, but care
480 should be taken in drawing conclusions about which refs or objects are
481 responsible for disk usage. The size of a packed non-delta object may be
482 much larger than the size of objects which delta against it, but the
483 choice of which object is the base and which is the delta is arbitrary
484 and is subject to change during a repack.
486 Note also that multiple copies of an object may be present in the object
487 database; in this case, it is undefined which copy's size or delta base
488 will be reported.
490 NOTES
491 -----
493 include::ref-reachability-filters.txt[]
495 SEE ALSO
496 --------
497 linkgit:git-show-ref[1]
501 Part of the linkgit:git[1] suite