git-interpret-trailers(1)
=========================

NAME
----
git-interpret-trailers - Add or parse structured information in commit messages

SYNOPSIS
--------
[verse]
'git interpret-trailers' [<options>] [(--trailer <token>[(=|:)<value>])...] [<file>...]
'git interpret-trailers' [<options>] [--parse] [<file>...]

DESCRIPTION
-----------
Help parsing or adding 'trailers' lines, that look similar to RFC 822 e-mail
headers, at the end of the otherwise free-form part of a commit
message.

This command reads some patches or commit messages from either the
<file> arguments or the standard input if no <file> is specified. If
`--parse` is specified, the output consists of the parsed trailers.

Otherwise, this command applies the arguments passed using the
`--trailer` option, if any, to the commit message part of each input
file. The result is emitted on the standard output.

Some configuration variables control the way the `--trailer` arguments
are applied to each commit message and the way any existing trailer in
the commit message is changed. They also make it possible to
automatically add some trailers.

By default, a '<token>=<value>' or '<token>:<value>' argument given
using `--trailer` will be appended after the existing trailers only if
the last trailer has a different (<token>, <value>) pair (or if there
is no existing trailer). The <token> and <value> parts will be trimmed
to remove starting and trailing whitespace, and the resulting trimmed
<token> and <value> will appear in the message like this:

------------------------------------------------
token: value
------------------------------------------------

This means that the trimmed <token> and <value> will be separated by
`': '` (one colon followed by one space).

By default the new trailer will appear at the end of all the existing
trailers. If there is no existing trailer, the new trailer will appear
after the commit message part of the output, and, if there is no line
with only spaces at the end of the commit message part, one blank line
will be added before the new trailer.

Existing trailers are extracted from the input message by looking for
a group of one or more lines that (i) is all trailers, or (ii) contains at
least one Git-generated or user-configured trailer and consists of at
least 25% trailers.
The group must be preceded by one or more empty (or whitespace-only) lines.
The group must either be at the end of the message or be the last
non-whitespace lines before a line that starts with '---' (followed by a
space or the end of the line). Such three minus signs start the patch
part of the message. See also `--no-divider` below.

When reading trailers, there can be whitespaces after the
token, the separator and the value. There can also be whitespaces
inside the token and the value. The value may be split over multiple lines with
each subsequent line starting with whitespace, like the "folding" in RFC 822.

Note that 'trailers' do not follow and are not intended to follow many
rules for RFC 822 headers. For example they do not follow
the encoding rules and probably many other rules.

OPTIONS
-------
--in-place::
	Edit the files in place.

--trim-empty::
	If the <value> part of any trailer contains only whitespace,
	the whole trailer will be removed from the resulting message.
	This applies to existing trailers as well as new trailers.

--trailer <token>[(=|:)<value>]::
	Specify a (<token>, <value>) pair that should be applied as a
	trailer to the input messages. See the description of this
	command.

--where <placement>::
--no-where::
	Specify where all new trailers will be added.  A setting
	provided with '--where' overrides all configuration variables
	and applies to all '--trailer' options until the next occurrence of
	'--where' or '--no-where'. Possible values are `after`, `before`,
	`end` or `start`.

--if-exists <action>::
--no-if-exists::
	Specify what action will be performed when there is already at
	least one trailer with the same <token> in the message.  A setting
	provided with '--if-exists' overrides all configuration variables
	and applies to all '--trailer' options until the next occurrence of
	'--if-exists' or '--no-if-exists'. Possible actions are `addIfDifferent`,
	`addIfDifferentNeighbor`, `add`, `replace` and `doNothing`.

--if-missing <action>::
--no-if-missing::
	Specify what action will be performed when there is no other
	trailer with the same <token> in the message.  A setting
	provided with '--if-missing' overrides all configuration variables
	and applies to all '--trailer' options until the next occurrence of
	'--if-missing' or '--no-if-missing'. Possible actions are `doNothing`
	or `add`.

--only-trailers::
	Output only the trailers, not any other parts of the input.

--only-input::
	Output only trailers that exist in the input; do not add any
	from the command-line or by following configured `trailer.*`
	rules.

--unfold::
	Remove any whitespace-continuation in trailers, so that each
	trailer appears on a line by itself with its full content.

--parse::
	A convenience alias for `--only-trailers --only-input
	--unfold`.

--no-divider::
	Do not treat `---` as the end of the commit message. Use this
	when you know your input contains just the commit message itself
	(and not an email or the output of `git format-patch`).

CONFIGURATION VARIABLES
-----------------------

trailer.separators::
	This option tells which characters are recognized as trailer
	separators. By default only ':' is recognized as a trailer
	separator, except that '=' is always accepted on the command
	line for compatibility with other git commands.
+
The first character given by this option will be the default character
used when another separator is not specified in the config for this
trailer.
+
For example, if the value for this option is "%=$", then only lines
using the format '<token><sep><value>' with <sep> containing '%', '='
or '$' and then spaces will be considered trailers. And '%' will be
the default separator used, so by default trailers will appear like:
'<token>% <value>' (one percent sign and one space will appear between
the token and the value).

trailer.where::
	This option tells where a new trailer will be added.
+
This can be `end`, which is the default, `start`, `after` or `before`.
+
If it is `end`, then each new trailer will appear at the end of the
existing trailers.
+
If it is `start`, then each new trailer will appear at the start,
instead of the end, of the existing trailers.
+
If it is `after`, then each new trailer will appear just after the
last trailer with the same <token>.
+
If it is `before`, then each new trailer will appear just before the
first trailer with the same <token>.

trailer.ifexists::
	This option makes it possible to choose what action will be
	performed when there is already at least one trailer with the
	same <token> in the message.
+
The valid values for this option are: `addIfDifferentNeighbor` (this
is the default), `addIfDifferent`, `add`, `replace` or `doNothing`.
+
With `addIfDifferentNeighbor`, a new trailer will be added only if no
trailer with the same (<token>, <value>) pair is above or below the line
where the new trailer will be added.
+
With `addIfDifferent`, a new trailer will be added only if no trailer
with the same (<token>, <value>) pair is already in the message.
+
With `add`, a new trailer will be added, even if some trailers with
the same (<token>, <value>) pair are already in the message.
+
With `replace`, an existing trailer with the same <token> will be
deleted and the new trailer will be added. The deleted trailer will be
the closest one (with the same <token>) to the place where the new one
will be added.
+
With `doNothing`, nothing will be done; that is no new trailer will be
added if there is already one with the same <token> in the message.

trailer.ifmissing::
	This option makes it possible to choose what action will be
	performed when there is not yet any trailer with the same
	<token> in the message.
+
The valid values for this option are: `add` (this is the default) and
`doNothing`.
+
With `add`, a new trailer will be added.
+
With `doNothing`, nothing will be done.

trailer.<token>.key::
	This `key` will be used instead of <token> in the trailer. At
	the end of this key, a separator can appear and then some
	space characters. By default the only valid separator is ':',
	but this can be changed using the `trailer.separators` config
	variable.
+
If there is a separator, then the key will be used instead of both the
<token> and the default separator when adding the trailer.

trailer.<token>.where::
	This option takes the same values as the 'trailer.where'
	configuration variable and it overrides what is specified by
	that option for trailers with the specified <token>.

trailer.<token>.ifexists::
	This option takes the same values as the 'trailer.ifexists'
	configuration variable and it overrides what is specified by
	that option for trailers with the specified <token>.

trailer.<token>.ifmissing::
	This option takes the same values as the 'trailer.ifmissing'
	configuration variable and it overrides what is specified by
	that option for trailers with the specified <token>.

trailer.<token>.command::
	This option can be used to specify a shell command that will
	be called to automatically add or modify a trailer with the
	specified <token>.
+
When this option is specified, the behavior is as if a special
'<token>=<value>' argument were added at the beginning of the command
line, where <value> is taken to be the standard output of the
specified command with any leading and trailing whitespace trimmed
off.
+
If the command contains the `$ARG` string, this string will be
replaced with the <value> part of an existing trailer with the same
<token>, if any, before the command is launched.
+
If some '<token>=<value>' arguments are also passed on the command
line, when a 'trailer.<token>.command' is configured, the command will
also be executed for each of these arguments. And the <value> part of
these arguments, if any, will be used to replace the `$ARG` string in
the command.

EXAMPLES
--------

* Configure a 'sign' trailer with a 'Signed-off-by' key, and then
  add two of these trailers to a message:
+
------------
$ git config trailer.sign.key "Signed-off-by"
$ cat msg.txt
subject

message
$ cat msg.txt | git interpret-trailers --trailer 'sign: Alice <alice@example.com>' --trailer 'sign: Bob <bob@example.com>'
subject

message

Signed-off-by: Alice <alice@example.com>
Signed-off-by: Bob <bob@example.com>
------------

* Use the `--in-place` option to edit a message file in place:
+
------------
$ cat msg.txt
subject

message

Signed-off-by: Bob <bob@example.com>
$ git interpret-trailers --trailer 'Acked-by: Alice <alice@example.com>' --in-place msg.txt
$ cat msg.txt
subject

message

Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>
------------

* Extract the last commit as a patch, and add a 'Cc' and a
  'Reviewed-by' trailer to it:
+
------------
$ git format-patch -1
0001-foo.patch
$ git interpret-trailers --trailer 'Cc: Alice <alice@example.com>' --trailer 'Reviewed-by: Bob <bob@example.com>' 0001-foo.patch >0001-bar.patch
------------

* Configure a 'sign' trailer with a command to automatically add a
  'Signed-off-by: ' with the author information only if there is no
  'Signed-off-by: ' already, and show how it works:
+
------------
$ git config trailer.sign.key "Signed-off-by: "
$ git config trailer.sign.ifmissing add
$ git config trailer.sign.ifexists doNothing
$ git config trailer.sign.command 'echo "$(git config user.name) <$(git config user.email)>"'
$ git interpret-trailers <<EOF
> EOF

Signed-off-by: Bob <bob@example.com>
$ git interpret-trailers <<EOF
> Signed-off-by: Alice <alice@example.com>
> EOF

Signed-off-by: Alice <alice@example.com>
------------

* Configure a 'fix' trailer with a key that contains a '#' and no
  space after this character, and show how it works:
+
------------
$ git config trailer.separators ":#"
$ git config trailer.fix.key "Fix #"
$ echo "subject" | git interpret-trailers --trailer fix=42
subject

Fix #42
------------

* Configure a 'see' trailer with a command to show the subject of a
  commit that is related, and show how it works:
+
------------
$ git config trailer.see.key "See-also: "
$ git config trailer.see.ifExists "replace"
$ git config trailer.see.ifMissing "doNothing"
$ git config trailer.see.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG"
$ git interpret-trailers <<EOF
> subject
> 
> message
> 
> see: HEAD~2
> EOF
subject

message

See-also: fe3187489d69c4 (subject of related commit)
------------

* Configure a commit template with some trailers with empty values
  (using sed to show and keep the trailing spaces at the end of the
  trailers), then configure a commit-msg hook that uses
  'git interpret-trailers' to remove trailers with empty values and
  to add a 'git-version' trailer:
+
------------
$ sed -e 's/ Z$/ /' >commit_template.txt <<EOF
> ***subject***
> 
> ***message***
> 
> Fixes: Z
> Cc: Z
> Reviewed-by: Z
> Signed-off-by: Z
> EOF
$ git config commit.template commit_template.txt
$ cat >.git/hooks/commit-msg <<EOF
> #!/bin/sh
> git interpret-trailers --trim-empty --trailer "git-version: \$(git describe)" "\$1" > "\$1.new"
> mv "\$1.new" "\$1"
> EOF
$ chmod +x .git/hooks/commit-msg
------------

SEE ALSO
--------
linkgit:git-commit[1], linkgit:git-format-patch[1], linkgit:git-config[1]

GIT
---
Part of the linkgit:git[1] suite
