You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
4.9 KiB
197 lines
4.9 KiB
git-for-each-ref(1) |
|
=================== |
|
|
|
NAME |
|
---- |
|
git-for-each-ref - Output information on each ref |
|
|
|
SYNOPSIS |
|
-------- |
|
[verse] |
|
'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl] |
|
[--sort=<key>]\* [--format=<format>] [<pattern>...] |
|
|
|
DESCRIPTION |
|
----------- |
|
|
|
Iterate over all refs that match `<pattern>` and show them |
|
according to the given `<format>`, after sorting them according |
|
to the given set of `<key>`. If `<max>` is given, stop after |
|
showing that many refs. The interpolated values in `<format>` |
|
can optionally be quoted as string literals in the specified |
|
host language allowing their direct evaluation in that language. |
|
|
|
OPTIONS |
|
------- |
|
<count>:: |
|
By default the command shows all refs that match |
|
`<pattern>`. This option makes it stop after showing |
|
that many refs. |
|
|
|
<key>:: |
|
A field name to sort on. Prefix `-` to sort in |
|
descending order of the value. When unspecified, |
|
`refname` is used. You may use the --sort=<key> option |
|
multiple times, in which case the last key becomes the primary |
|
key. |
|
|
|
<format>:: |
|
A string that interpolates `%(fieldname)` from the |
|
object pointed at by a ref being shown. If `fieldname` |
|
is prefixed with an asterisk (`*`) and the ref points |
|
at a tag object, the value for the field in the object |
|
tag refers is used. When unspecified, defaults to |
|
`%(objectname) SPC %(objecttype) TAB %(refname)`. |
|
It also interpolates `%%` to `%`, and `%xx` where `xx` |
|
are hex digits interpolates to character with hex code |
|
`xx`; for example `%00` interpolates to `\0` (NUL), |
|
`%09` to `\t` (TAB) and `%0a` to `\n` (LF). |
|
|
|
<pattern>...:: |
|
If one or more patterns are given, only refs are shown that |
|
match against at least one pattern, either using fnmatch(3) or |
|
literally, in the latter case matching completely or from the |
|
beginning up to a slash. |
|
|
|
--shell:: |
|
--perl:: |
|
--python:: |
|
--tcl:: |
|
If given, strings that substitute `%(fieldname)` |
|
placeholders are quoted as string literals suitable for |
|
the specified host language. This is meant to produce |
|
a scriptlet that can directly be `eval`ed. |
|
|
|
|
|
FIELD NAMES |
|
----------- |
|
|
|
Various values from structured fields in referenced objects can |
|
be used to interpolate into the resulting output, or as sort |
|
keys. |
|
|
|
For all objects, the following names can be used: |
|
|
|
refname:: |
|
The name of the ref (the part after $GIT_DIR/). |
|
|
|
objecttype:: |
|
The type of the object (`blob`, `tree`, `commit`, `tag`). |
|
|
|
objectsize:: |
|
The size of the object (the same as 'git-cat-file -s' reports). |
|
|
|
objectname:: |
|
The object name (aka SHA-1). |
|
|
|
In addition to the above, for commit and tag objects, the header |
|
field names (`tree`, `parent`, `object`, `type`, and `tag`) can |
|
be used to specify the value in the header field. |
|
|
|
Fields that have name-email-date tuple as its value (`author`, |
|
`committer`, and `tagger`) can be suffixed with `name`, `email`, |
|
and `date` to extract the named component. |
|
|
|
The first line of the message in a commit and tag object is |
|
`subject`, the remaining lines are `body`. The whole message |
|
is `contents`. |
|
|
|
For sorting purposes, fields with numeric values sort in numeric |
|
order (`objectsize`, `authordate`, `committerdate`, `taggerdate`). |
|
All other fields are used to sort in their byte-value order. |
|
|
|
In any case, a field name that refers to a field inapplicable to |
|
the object referred by the ref does not cause an error. It |
|
returns an empty string instead. |
|
|
|
As a special case for the date-type fields, you may specify a format for |
|
the date by adding one of `:default`, `:relative`, `:short`, `:local`, |
|
`:iso8601` or `:rfc2822` to the end of the fieldname; e.g. |
|
`%(taggerdate:relative)`. |
|
|
|
|
|
EXAMPLES |
|
-------- |
|
|
|
An example directly producing formatted text. Show the most recent |
|
3 tagged commits:: |
|
|
|
------------ |
|
#!/bin/sh |
|
|
|
git for-each-ref --count=3 --sort='-*authordate' \ |
|
--format='From: %(*authorname) %(*authoremail) |
|
Subject: %(*subject) |
|
Date: %(*authordate) |
|
Ref: %(*refname) |
|
|
|
%(*body) |
|
' 'refs/tags' |
|
------------ |
|
|
|
|
|
A simple example showing the use of shell eval on the output, |
|
demonstrating the use of --shell. List the prefixes of all heads:: |
|
------------ |
|
#!/bin/sh |
|
|
|
git for-each-ref --shell --format="ref=%(refname)" refs/heads | \ |
|
while read entry |
|
do |
|
eval "$entry" |
|
echo `dirname $ref` |
|
done |
|
------------ |
|
|
|
|
|
A bit more elaborate report on tags, demonstrating that the format |
|
may be an entire script:: |
|
------------ |
|
#!/bin/sh |
|
|
|
fmt=' |
|
r=%(refname) |
|
t=%(*objecttype) |
|
T=${r#refs/tags/} |
|
|
|
o=%(*objectname) |
|
n=%(*authorname) |
|
e=%(*authoremail) |
|
s=%(*subject) |
|
d=%(*authordate) |
|
b=%(*body) |
|
|
|
kind=Tag |
|
if test "z$t" = z |
|
then |
|
# could be a lightweight tag |
|
t=%(objecttype) |
|
kind="Lightweight tag" |
|
o=%(objectname) |
|
n=%(authorname) |
|
e=%(authoremail) |
|
s=%(subject) |
|
d=%(authordate) |
|
b=%(body) |
|
fi |
|
echo "$kind $T points at a $t object $o" |
|
if test "z$t" = zcommit |
|
then |
|
echo "The commit was authored by $n $e |
|
at $d, and titled |
|
|
|
$s |
|
|
|
Its message reads as: |
|
" |
|
echo "$b" | sed -e "s/^/ /" |
|
echo |
|
fi |
|
' |
|
|
|
eval=`git for-each-ref --shell --format="$fmt" \ |
|
--sort='*objecttype' \ |
|
--sort=-taggerdate \ |
|
refs/tags` |
|
eval "$eval" |
|
------------
|
|
|