git-interpret-trailers.1 (22320B)
- '\" t
- .\" Title: git-interpret-trailers
- .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
- .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
- .\" Date: 2025-03-14
- .\" Manual: Git Manual
- .\" Source: Git 2.49.0
- .\" Language: English
- .\"
- .TH "GIT\-INTERPRET\-TRAILERS" "1" "2025-03-14" "Git 2\&.49\&.0" "Git Manual"
- .\" -----------------------------------------------------------------
- .\" * Define some portability stuff
- .\" -----------------------------------------------------------------
- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .\" http://bugs.debian.org/507673
- .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .ie \n(.g .ds Aq \(aq
- .el .ds Aq '
- .\" -----------------------------------------------------------------
- .\" * set default formatting
- .\" -----------------------------------------------------------------
- .\" disable hyphenation
- .nh
- .\" disable justification (adjust text to left margin only)
- .ad l
- .\" -----------------------------------------------------------------
- .\" * MAIN CONTENT STARTS HERE *
- .\" -----------------------------------------------------------------
- .SH "NAME"
- git-interpret-trailers \- Add or parse structured information in commit messages
- .SH "SYNOPSIS"
- .sp
- .nf
- \fIgit interpret\-trailers\fR [\-\-in\-place] [\-\-trim\-empty]
- [(\-\-trailer (<key>|<key\-alias>)[(=|:)<value>])\&...\:]
- [\-\-parse] [<file>\&...\:]
- .fi
- .SH "DESCRIPTION"
- .sp
- Add or parse \fItrailer\fR lines that look similar to RFC 822 e\-mail headers, at the end of the otherwise free\-form part of a commit message\&. For example, in the following commit message
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- subject
- Lorem ipsum dolor sit amet, consectetur adipiscing elit\&.
- Signed\-off\-by: Alice <alice@example\&.com>
- Signed\-off\-by: Bob <bob@example\&.com>
- .fi
- .if n \{\
- .RE
- .\}
- .sp
- the last two lines starting with "Signed\-off\-by" are trailers\&.
- .sp
- This command reads commit messages from either the <file> arguments or the standard input if no <file> is specified\&. If \fB\-\-parse\fR is specified, the output consists of the parsed trailers coming from the input, without influencing them with any command line options or configuration variables\&.
- .sp
- Otherwise, this command applies \fBtrailer\&.\fR* configuration variables (which could potentially add new trailers, as well as reposition them), as well as any command line arguments that can override configuration variables (such as \fB\-\-trailer=\&.\&.\fR\&. which could also add new trailers), to each input file\&. The result is emitted on the standard output\&.
- .sp
- This command can also operate on the output of \fBgit-format-patch\fR(1), which is more elaborate than a plain commit message\&. Namely, such output includes a commit message (as above), a "\-\-\-" divider line, and a patch part\&. For these inputs, the divider and patch parts are not modified by this command and are emitted as is on the output, unless \fB\-\-no\-divider\fR is specified\&.
- .sp
- Some configuration variables control the way the \fB\-\-trailer\fR arguments are applied to each input and the way any existing trailer in the input is changed\&. They also make it possible to automatically add some trailers\&.
- .sp
- By default, a \fI<key>=<value>\fR or \fI<key>:<value>\fR argument given using \fB\-\-trailer\fR will be appended after the existing trailers only if the last trailer has a different (<key>, <value>) pair (or if there is no existing trailer)\&. The <key> and <value> parts will be trimmed to remove starting and trailing whitespace, and the resulting trimmed <key> and <value> will appear in the output like this:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- key: value
- .fi
- .if n \{\
- .RE
- .\}
- .sp
- This means that the trimmed <key> and <value> will be separated by \*(Aq: \*(Aq (one colon followed by one space)\&.
- .sp
- For convenience, a <key\-alias> can be configured to make using \fB\-\-trailer\fR shorter to type on the command line\&. This can be configured using the \fItrailer\&.<key\-alias>\&.key\fR configuration variable\&. The <keyAlias> must be a prefix of the full <key> string, although case sensitivity does not matter\&. For example, if you have
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- trailer\&.sign\&.key "Signed\-off\-by: "
- .fi
- .if n \{\
- .RE
- .\}
- .sp
- in your configuration, you only need to specify \fB\-\-trailer=\fR"sign: \fBfoo\fR" on the command line instead of \fB\-\-trailer=\fR"Signed\-off\-by: \fBfoo\fR"\&.
- .sp
- 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 at the end of the input\&. A blank line will be added before the new trailer if there isn\(cqt one already\&.
- .sp
- Existing trailers are extracted from the input 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 input or be the last non\-whitespace lines before a line that starts with \fI\-\-\-\fR (followed by a space or the end of the line)\&.
- .sp
- When reading trailers, there can be no whitespace before or inside the <key>, but any number of regular space and tab characters are allowed between the <key> and the separator\&. There can be whitespaces before, inside or after the <value>\&. The <value> may be split over multiple lines with each subsequent line starting with at least one whitespace, like the "folding" in RFC 822\&. Example:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- key: This is a very long value, with spaces and
- newlines in it\&.
- .fi
- .if n \{\
- .RE
- .\}
- .sp
- Note that trailers do not follow (nor are they intended to follow) many of the rules for RFC 822 headers\&. For example they do not follow the encoding rule\&.
- .SH "OPTIONS"
- .PP
- \-\-in\-place
- .RS 4
- Edit the files in place\&.
- .RE
- .PP
- \-\-trim\-empty
- .RS 4
- If the <value> part of any trailer contains only whitespace, the whole trailer will be removed from the output\&. This applies to existing trailers as well as new trailers\&.
- .RE
- .PP
- \-\-trailer <key>[(=|:)<value>]
- .RS 4
- Specify a (<key>, <value>) pair that should be applied as a trailer to the inputs\&. See the description of this command\&.
- .RE
- .PP
- \-\-where <placement>, \-\-no\-where
- .RS 4
- Specify where all new trailers will be added\&. A setting provided with
- \fI\-\-where\fR
- overrides the
- \fBtrailer\&.where\fR
- and any applicable
- \fBtrailer\&.\fR\fI<keyAlias>\fR\fB\&.where\fR
- configuration variables and applies to all
- \fI\-\-trailer\fR
- options until the next occurrence of
- \fI\-\-where\fR
- or
- \fI\-\-no\-where\fR\&. Upon encountering
- \fI\-\-no\-where\fR, clear the effect of any previous use of
- \fI\-\-where\fR, such that the relevant configuration variables are no longer overridden\&. Possible placements are
- \fBafter\fR,
- \fBbefore\fR,
- \fBend\fR
- or
- \fBstart\fR\&.
- .RE
- .PP
- \-\-if\-exists <action>, \-\-no\-if\-exists
- .RS 4
- Specify what action will be performed when there is already at least one trailer with the same <key> in the input\&. A setting provided with
- \fI\-\-if\-exists\fR
- overrides the
- \fBtrailer\&.ifExists\fR
- and any applicable
- \fBtrailer\&.\fR\fI<keyAlias>\fR\fB\&.ifExists\fR
- configuration variables and applies to all
- \fI\-\-trailer\fR
- options until the next occurrence of
- \fI\-\-if\-exists\fR
- or
- \fI\-\-no\-if\-exists\fR\&. Upon encountering \*(Aq\-\-no\-if\-exists, clear the effect of any previous use of \*(Aq\-\-if\-exists, such that the relevant configuration variables are no longer overridden\&. Possible actions are
- \fBaddIfDifferent\fR,
- \fBaddIfDifferentNeighbor\fR,
- \fBadd\fR,
- \fBreplace\fR
- and
- \fBdoNothing\fR\&.
- .RE
- .PP
- \-\-if\-missing <action>, \-\-no\-if\-missing
- .RS 4
- Specify what action will be performed when there is no other trailer with the same <key> in the input\&. A setting provided with
- \fI\-\-if\-missing\fR
- overrides the
- \fBtrailer\&.ifMissing\fR
- and any applicable
- \fBtrailer\&.\fR\fI<keyAlias>\fR\fB\&.ifMissing\fR
- configuration variables and applies to all
- \fI\-\-trailer\fR
- options until the next occurrence of
- \fI\-\-if\-missing\fR
- or
- \fI\-\-no\-if\-missing\fR\&. Upon encountering \*(Aq\-\-no\-if\-missing, clear the effect of any previous use of \*(Aq\-\-if\-missing, such that the relevant configuration variables are no longer overridden\&. Possible actions are
- \fBdoNothing\fR
- or
- \fBadd\fR\&.
- .RE
- .PP
- \-\-only\-trailers
- .RS 4
- Output only the trailers, not any other parts of the input\&.
- .RE
- .PP
- \-\-only\-input
- .RS 4
- Output only trailers that exist in the input; do not add any from the command\-line or by applying
- \fBtrailer\&.\fR* configuration variables\&.
- .RE
- .PP
- \-\-unfold
- .RS 4
- If a trailer has a value that runs over multiple lines (aka "folded"), reformat the value into a single line\&.
- .RE
- .PP
- \-\-parse
- .RS 4
- A convenience alias for
- \fB\-\-only\-trailers\fR
- \fB\-\-only\-input\fR
- \fB\-\-unfold\fR\&. This makes it easier to only see the trailers coming from the input without influencing them with any command line options or configuration variables, while also making the output machine\-friendly with \-\-unfold\&.
- .RE
- .PP
- \-\-no\-divider
- .RS 4
- Do not treat
- \fB\-\-\-\fR
- 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
- \fBgit\fR
- \fBformat\-patch\fR)\&.
- .RE
- .SH "CONFIGURATION VARIABLES"
- .sp
- Everything below this line in this section is selectively included from the \fBgit-config\fR(1) documentation\&. The content is the same as what\(cqs found there:
- .PP
- trailer\&.separators
- .RS 4
- This option tells which characters are recognized as trailer separators\&. By default only
- \fI:\fR
- is recognized as a trailer separator, except that
- \fI=\fR
- is always accepted on the command line for compatibility with other git commands\&.
- .sp
- 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\&.
- .sp
- For example, if the value for this option is "%=$", then only lines using the format
- \fI<key><sep><value>\fR
- with <sep> containing
- \fI%\fR,
- \fI=\fR
- or
- \fI$\fR
- and then spaces will be considered trailers\&. And
- \fI%\fR
- will be the default separator used, so by default trailers will appear like:
- \fI<key>% <value>\fR
- (one percent sign and one space will appear between the key and the value)\&.
- .RE
- .PP
- trailer\&.where
- .RS 4
- This option tells where a new trailer will be added\&.
- .sp
- This can be
- \fBend\fR, which is the default,
- \fBstart\fR,
- \fBafter\fR
- or
- \fBbefore\fR\&.
- .sp
- If it is
- \fBend\fR, then each new trailer will appear at the end of the existing trailers\&.
- .sp
- If it is
- \fBstart\fR, then each new trailer will appear at the start, instead of the end, of the existing trailers\&.
- .sp
- If it is
- \fBafter\fR, then each new trailer will appear just after the last trailer with the same <key>\&.
- .sp
- If it is
- \fBbefore\fR, then each new trailer will appear just before the first trailer with the same <key>\&.
- .RE
- .PP
- trailer\&.ifexists
- .RS 4
- This option makes it possible to choose what action will be performed when there is already at least one trailer with the same <key> in the input\&.
- .sp
- The valid values for this option are:
- \fBaddIfDifferentNeighbor\fR
- (this is the default),
- \fBaddIfDifferent\fR,
- \fBadd\fR,
- \fBreplace\fR
- or
- \fBdoNothing\fR\&.
- .sp
- With
- \fBaddIfDifferentNeighbor\fR, a new trailer will be added only if no trailer with the same (<key>, <value>) pair is above or below the line where the new trailer will be added\&.
- .sp
- With
- \fBaddIfDifferent\fR, a new trailer will be added only if no trailer with the same (<key>, <value>) pair is already in the input\&.
- .sp
- With
- \fBadd\fR, a new trailer will be added, even if some trailers with the same (<key>, <value>) pair are already in the input\&.
- .sp
- With
- \fBreplace\fR, an existing trailer with the same <key> will be deleted and the new trailer will be added\&. The deleted trailer will be the closest one (with the same <key>) to the place where the new one will be added\&.
- .sp
- With
- \fBdoNothing\fR, nothing will be done; that is no new trailer will be added if there is already one with the same <key> in the input\&.
- .RE
- .PP
- trailer\&.ifmissing
- .RS 4
- This option makes it possible to choose what action will be performed when there is not yet any trailer with the same <key> in the input\&.
- .sp
- The valid values for this option are:
- \fBadd\fR
- (this is the default) and
- \fBdoNothing\fR\&.
- .sp
- With
- \fBadd\fR, a new trailer will be added\&.
- .sp
- With
- \fBdoNothing\fR, nothing will be done\&.
- .RE
- .PP
- trailer\&.<keyAlias>\&.key
- .RS 4
- Defines a <keyAlias> for the <key>\&. The <keyAlias> must be a prefix (case does not matter) of the <key>\&. For example, in
- \fBgit\fR
- \fBconfig\fR
- \fBtrailer\&.ack\&.key\fR
- "Acked\-by" the "Acked\-by" is the <key> and the "ack" is the <keyAlias>\&. This configuration allows the shorter
- \fB\-\-trailer\fR
- "ack:\fB\&.\&.\&.\fR" invocation on the command line using the "ack" <keyAlias> instead of the longer
- \fB\-\-trailer\fR
- "Acked\-by:\fB\&.\&.\&.\fR"\&.
- .sp
- At the end of the <key>, a separator can appear and then some space characters\&. By default the only valid separator is
- \fI:\fR, but this can be changed using the
- \fBtrailer\&.separators\fR
- config variable\&.
- .sp
- If there is a separator in the key, then it overrides the default separator when adding the trailer\&.
- .RE
- .PP
- trailer\&.<keyAlias>\&.where
- .RS 4
- This option takes the same values as the
- \fItrailer\&.where\fR
- configuration variable and it overrides what is specified by that option for trailers with the specified <keyAlias>\&.
- .RE
- .PP
- trailer\&.<keyAlias>\&.ifexists
- .RS 4
- This option takes the same values as the
- \fItrailer\&.ifexists\fR
- configuration variable and it overrides what is specified by that option for trailers with the specified <keyAlias>\&.
- .RE
- .PP
- trailer\&.<keyAlias>\&.ifmissing
- .RS 4
- This option takes the same values as the
- \fItrailer\&.ifmissing\fR
- configuration variable and it overrides what is specified by that option for trailers with the specified <keyAlias>\&.
- .RE
- .PP
- trailer\&.<keyAlias>\&.command
- .RS 4
- Deprecated in favor of
- \fItrailer\&.<keyAlias>\&.cmd\fR\&. This option behaves in the same way as
- \fItrailer\&.<keyAlias>\&.cmd\fR, except that it doesn\(cqt pass anything as argument to the specified command\&. Instead the first occurrence of substring $ARG is replaced by the <value> that would be passed as argument\&.
- .sp
- Note that $ARG in the user\(cqs command is only replaced once and that the original way of replacing $ARG is not safe\&.
- .sp
- When both
- \fItrailer\&.<keyAlias>\&.cmd\fR
- and
- \fItrailer\&.<keyAlias>\&.command\fR
- are given for the same <keyAlias>,
- \fItrailer\&.<keyAlias>\&.cmd\fR
- is used and
- \fItrailer\&.<keyAlias>\&.command\fR
- is ignored\&.
- .RE
- .PP
- trailer\&.<keyAlias>\&.cmd
- .RS 4
- This option can be used to specify a shell command that will be called once to automatically add a trailer with the specified <keyAlias>, and then called each time a
- \fI\-\-trailer <keyAlias>=<value>\fR
- argument is specified to modify the <value> of the trailer that this option would produce\&.
- .sp
- When the specified command is first called to add a trailer with the specified <keyAlias>, the behavior is as if a special
- \fI\-\-trailer <keyAlias>=<value>\fR
- argument was added at the beginning of the "git interpret\-trailers" command, where <value> is taken to be the standard output of the command with any leading and trailing whitespace trimmed off\&.
- .sp
- If some
- \fI\-\-trailer <keyAlias>=<value>\fR
- arguments are also passed on the command line, the command is called again once for each of these arguments with the same <keyAlias>\&. And the <value> part of these arguments, if any, will be passed to the command as its first argument\&. This way the command can produce a <value> computed from the <value> passed in the
- \fI\-\-trailer <keyAlias>=<value>\fR
- argument\&.
- .RE
- .SH "EXAMPLES"
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Configure a
- \fIsign\fR
- trailer with a
- \fISigned\-off\-by\fR
- key, and then add two of these trailers to a commit message file:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ git config trailer\&.sign\&.key "Signed\-off\-by"
- $ cat msg\&.txt
- subject
- body text
- $ git interpret\-trailers \-\-trailer \*(Aqsign: Alice <alice@example\&.com>\*(Aq \-\-trailer \*(Aqsign: Bob <bob@example\&.com>\*(Aq <msg\&.txt
- subject
- body text
- Signed\-off\-by: Alice <alice@example\&.com>
- Signed\-off\-by: Bob <bob@example\&.com>
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Use the
- \fB\-\-in\-place\fR
- option to edit a commit message file in place:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ cat msg\&.txt
- subject
- body text
- Signed\-off\-by: Bob <bob@example\&.com>
- $ git interpret\-trailers \-\-trailer \*(AqAcked\-by: Alice <alice@example\&.com>\*(Aq \-\-in\-place msg\&.txt
- $ cat msg\&.txt
- subject
- body text
- Signed\-off\-by: Bob <bob@example\&.com>
- Acked\-by: Alice <alice@example\&.com>
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Extract the last commit as a patch, and add a
- \fICc\fR
- and a
- \fIReviewed\-by\fR
- trailer to it:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ git format\-patch \-1
- 0001\-foo\&.patch
- $ git interpret\-trailers \-\-trailer \*(AqCc: Alice <alice@example\&.com>\*(Aq \-\-trailer \*(AqReviewed\-by: Bob <bob@example\&.com>\*(Aq 0001\-foo\&.patch >0001\-bar\&.patch
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Configure a
- \fIsign\fR
- trailer with a command to automatically add a \*(AqSigned\-off\-by: \*(Aq with the author information only if there is no \*(AqSigned\-off\-by: \*(Aq already, and show how it works:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ cat msg1\&.txt
- subject
- body text
- $ git config trailer\&.sign\&.key "Signed\-off\-by: "
- $ git config trailer\&.sign\&.ifmissing add
- $ git config trailer\&.sign\&.ifexists doNothing
- $ git config trailer\&.sign\&.cmd \*(Aqecho "$(git config user\&.name) <$(git config user\&.email)>"\*(Aq
- $ git interpret\-trailers \-\-trailer sign <msg1\&.txt
- subject
- body text
- Signed\-off\-by: Bob <bob@example\&.com>
- $ cat msg2\&.txt
- subject
- body text
- Signed\-off\-by: Alice <alice@example\&.com>
- $ git interpret\-trailers \-\-trailer sign <msg2\&.txt
- subject
- body text
- Signed\-off\-by: Alice <alice@example\&.com>
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Configure a
- \fIfix\fR
- trailer with a key that contains a
- \fI#\fR
- and no space after this character, and show how it works:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ git config trailer\&.separators ":#"
- $ git config trailer\&.fix\&.key "Fix #"
- $ echo "subject" | git interpret\-trailers \-\-trailer fix=42
- subject
- Fix #42
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Configure a
- \fIhelp\fR
- trailer with a cmd use a script
- \fBglog\-find\-author\fR
- which search specified author identity from git log in git repository and show how it works:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ cat ~/bin/glog\-find\-author
- #!/bin/sh
- test \-n "$1" && git log \-\-author="$1" \-\-pretty="%an <%ae>" \-1 || true
- $ cat msg\&.txt
- subject
- body text
- $ git config trailer\&.help\&.key "Helped\-by: "
- $ git config trailer\&.help\&.ifExists "addIfDifferentNeighbor"
- $ git config trailer\&.help\&.cmd "~/bin/glog\-find\-author"
- $ git interpret\-trailers \-\-trailer="help:Junio" \-\-trailer="help:Couder" <msg\&.txt
- subject
- body text
- Helped\-by: Junio C Hamano <gitster@pobox\&.com>
- Helped\-by: Christian Couder <christian\&.couder@gmail\&.com>
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Configure a
- \fIref\fR
- trailer with a cmd use a script
- \fBglog\-grep\fR
- to grep last relevant commit from git log in the git repository and show how it works:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ cat ~/bin/glog\-grep
- #!/bin/sh
- test \-n "$1" && git log \-\-grep "$1" \-\-pretty=reference \-1 || true
- $ cat msg\&.txt
- subject
- body text
- $ git config trailer\&.ref\&.key "Reference\-to: "
- $ git config trailer\&.ref\&.ifExists "replace"
- $ git config trailer\&.ref\&.cmd "~/bin/glog\-grep"
- $ git interpret\-trailers \-\-trailer="ref:Add copyright notices\&." <msg\&.txt
- subject
- body text
- Reference\-to: 8bc9a0c769 (Add copyright notices\&., 2005\-04\-07)
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Configure a
- \fIsee\fR
- trailer with a command to show the subject of a commit that is related, and show how it works:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ cat msg\&.txt
- subject
- body text
- see: HEAD~2
- $ cat ~/bin/glog\-ref
- #!/bin/sh
- git log \-1 \-\-oneline \-\-format="%h (%s)" \-\-abbrev\-commit \-\-abbrev=14
- $ git config trailer\&.see\&.key "See\-also: "
- $ git config trailer\&.see\&.ifExists "replace"
- $ git config trailer\&.see\&.ifMissing "doNothing"
- $ git config trailer\&.see\&.cmd "glog\-ref"
- $ git interpret\-trailers \-\-trailer=see <msg\&.txt
- subject
- body text
- See\-also: fe3187489d69c4 (subject of related commit)
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- 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
- \fIgit interpret\-trailers\fR
- to remove trailers with empty values and to add a
- \fIgit\-version\fR
- trailer:
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- $ cat temp\&.txt
- ***subject***
- ***message***
- Fixes: Z
- Cc: Z
- Reviewed\-by: Z
- Signed\-off\-by: Z
- $ sed \-e \*(Aqs/ Z$/ /\*(Aq temp\&.txt > commit_template\&.txt
- $ git config commit\&.template commit_template\&.txt
- $ cat \&.git/hooks/commit\-msg
- #!/bin/sh
- git interpret\-trailers \-\-trim\-empty \-\-trailer "git\-version: \e$(git describe)" "\e$1" > "\e$1\&.new"
- mv "\e$1\&.new" "\e$1"
- $ chmod +x \&.git/hooks/commit\-msg
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .SH "SEE ALSO"
- .sp
- \fBgit-commit\fR(1), \fBgit-format-patch\fR(1), \fBgit-config\fR(1)
- .SH "GIT"
- .sp
- Part of the \fBgit\fR(1) suite