Skip to content

git-interpret-trailers

在提交消息中添加或解析结构化信息

概要

git interpret-trailers [--in-place] [--trim-empty]
			[(--trailer (<key>|<key-alias>)[(=|:)<value>])...]
			[--parse] [<file>...]

描述

添加或解析类似于 RFC 822 电子邮件头的_尾部_行,位于提交消息的自由格式部分末尾。例如,在以下提交消息中:

subject

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

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

最后两行以 Signed-off-by 开头的是尾部。

此命令从 <file> 参数或标准输入(如果未指定 <file>)读取提交消息。如果指定了 --parse,输出由来自输入的已解析尾部组成,不受任何命令行选项或配置变量的影响。

否则,此命令对每个输入文件应用 trailer.<key-alias> 配置变量(可能添加新尾部以及重新定位它们),以及任何可以覆盖配置变量的命令行参数(例如 --trailer=... 也可能添加新尾部)。结果在标准输出上发出。

此命令还可以对 git-format-patch(1) 的输出进行操作,这比纯提交消息更详细。即,此类输出包括提交消息(如上)、--- 分隔符行和补丁部分。对于这些输入,分隔符和补丁部分不会被此命令修改,并按原样在输出上发出,除非指定了 --no-divider

某些配置变量控制 --trailer 参数应用于每个输入的方式以及输入中任何现有尾部被更改的方式。它们还使自动添加某些尾部成为可能。

默认情况下,使用 --trailer 给出的 <key>=<value><key>:<value> 参数仅在最后一个尾部具有不同的(<key><value>)对(或没有现有尾部)时才追加到现有尾部之后。<key><value> 部分将被修剪以删除开头和尾随空格,修剪后的 <key><value> 将如下所示出现在输出中:

key: value

这意味着修剪后的 <key><value> 将由 ": "(一个冒号后跟一个空格)分隔。

为方便起见,可以配置 <key-alias> 以使命令行上的 --trailer 更短。可以使用 trailer.<key-alias>.key 配置变量进行配置。<key-alias> 必须是完整 <key> 字符串的前缀,但大小写无关紧要。

默认情况下,新尾部将出现在所有现有尾部的末尾。如果没有现有尾部,新尾部将出现在输入的末尾。如果前面没有空行,将在新尾部之前添加一个空行。

选项

  • --in-place, --no-in-place - 就地编辑文件。默认为 --no-in-place

  • --trim-empty, --no-trim-empty - 如果任何尾部的 <value> 部分仅包含空格,整个尾部将从输出中删除。默认为 --no-trim-empty

  • --trailer=<key>[(=|:)<value>], --no-trailer - 指定应作为尾部应用到输入的(<key><value>)对。可以多次给出。使用 --no-trailer 重置列表。

  • --where=<placement>, --no-where - 指定所有新尾部将添加到的位置。可能的位置为 afterbeforeendstart

  • --if-exists=<action>, --no-if-exists - 指定当输入中已存在至少一个具有相同 <key> 的尾部时将执行的操作。可能的操作为 addIfDifferentaddIfDifferentNeighboraddreplacedoNothing

  • --if-missing=<action>, --no-if-missing - 指定当输入中没有其他具有相同 <key> 的尾部时将执行的操作。可能的操作为 doNothingadd

  • --only-trailers, --no-only-trailers - 仅输出尾部,不输出输入的任何其他部分。默认为 --no-only-trailers

  • --only-input, --no-only-input - 仅输出输入中存在的尾部;不从命令行或通过应用 trailer.<key-alias> 配置变量添加任何尾部。默认为 --no-only-input

  • --unfold, --no-unfold - 如果尾部的值跨越多行(即"折叠"),将值重新格式化为单行。默认为 --no-unfold

  • --parse - --only-trailers --only-input --unfold 的便利别名。

  • --divider, --no-divider - 将 --- 视为提交消息的结尾。这是默认值。当您知道输入仅包含提交消息本身时使用 --no-divider

配置变量

  • trailer.separators - 此选项指定哪些字符被识别为尾部分隔符。默认只有 : 被识别为尾部分隔符,但为了与其他 git 命令兼容,= 在命令行上始终被接受。

  • trailer.where - 此选项指定新尾部将添加到的位置。可以是 end(默认)、startafterbefore

  • trailer.ifexists - 此选项使您可以选择当输入中已存在至少一个具有相同 <key> 的尾部时将执行的操作。有效值为:addIfDifferentNeighbor(默认)、addIfDifferentaddreplacedoNothing

  • trailer.ifmissing - 此选项使您可以选择当输入中还没有具有相同 <key> 的尾部时将执行的操作。有效值为:add(默认)和 doNothing

  • trailer.<key-alias>.key - 为 <key> 定义 <key-alias><key-alias> 必须是 <key> 的前缀(大小写无关)。

  • trailer.<key-alias>.where - 此选项采用与 trailer.where 配置变量相同的值,并覆盖该选项为具有指定 <key-alias> 的尾部指定的内容。

  • trailer.<key-alias>.ifexists - 此选项采用与 trailer.ifexists 配置变量相同的值。

  • trailer.<key-alias>.ifmissing - 此选项采用与 trailer.ifmissing 配置变量相同的值。

  • trailer.<key-alias>.cmd - 此选项可用于指定将调用一次的 shell 命令以自动添加具有指定 <key-alias> 的尾部,然后在每次指定 --trailer <key-alias>=<value> 参数时调用以修改此选项将产生的尾部的 <value>

示例

  • 配置带有 Signed-off-by 键的 sign 尾部,然后向提交消息文件添加两个尾部:

    $ git config trailer.sign.key "Signed-off-by"
    $ cat msg.txt
    subject
    
    body text
    $ git interpret-trailers --trailer 'sign: Alice <alice@example.com>' --trailer 'sign: Bob <bob@example.com>' <msg.txt
    subject
    
    body text
    
    Signed-off-by: Alice <alice@example.com>
    Signed-off-by: Bob <bob@example.com>
  • 使用 --in-place 选项就地编辑提交消息文件:

    $ cat msg.txt
    subject
    
    body text
    
    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
    
    body text
    
    Signed-off-by: Bob <bob@example.com>
    Acked-by: Alice <alice@example.com>

另请参阅

git-commit(1), git-format-patch(1), git-config(1)

Git

git(1) 套件的一部分

基于 CC BY-NC-SA 3.0 许可发布