Русский ▾ Topics ▾ Latest version ▾ git-interpret-trailers last updated in 2.54.0

НАЗВАНИЕ

git-interpret-trailers - Добавление или разбор структурированной информации в сообщениях коммита

ОБЗОР

git interpret-trailers [--in-place] [--trim-empty]
			[(--trailer (<ключ>|<псевдоним-ключа>)[(=|:)<значение>])…​]
			[--parse] [<файл>…​]

ОПИСАНИЕ

Добавляет или анализирует строки завершителей, которые выглядят похоже на заголовки электронной почты RFC 822, в конце в остальном свободной части сообщения коммита. Например, в следующем сообщении коммита

заголовок

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", являются завершителями.

Эта команда читает сообщения коммитов из аргументов <файл> или из стандартного ввода, если <файл> не указан. Если указан --parse, вывод состоит из проанализированных завершителей из входных данных, без влияния на них каких-либо параметров командной строки или переменных конфигурации.

В противном случае эта команда применяет переменные конфигурации trailer.* (которые могут добавлять новые завершители, а также перемещать их), а также любые аргументы командной строки, которые могут переопределять переменные конфигурации (например, --trailer=..., который также может добавлять новые завершители), к каждому входному файлу. Результат выводится в стандартный вывод.

Эта команда также может работать с выводом git-format-patch[1], который является более сложным, чем простое сообщение коммита. А именно, такой вывод включает сообщение коммита (как выше), разделительную строку "---" и часть с патчем. Для этих входных данных разделитель и часть с патчем не изменяются этой командой и выводятся как есть, если не указан --no-divider.

Некоторые переменные конфигурации управляют тем, как аргументы --trailer применяются к каждому входному файлу и как изменяются любые существующие завершители во входных данных. Они также позволяют автоматически добавлять некоторые завершители.

По умолчанию аргумент <ключ>=<значение> или <ключ>:<значение>, указанный с помощью --trailer, будет добавлен после существующих завершителей, только если последний завершитель имеет другую пару (<ключ>, <значение>) (или если нет существующего завершителя). Части <ключ> и <значение> будут обрезаны для удаления начальных и конечных пробелов, и результирующие обрезанные <ключ> и <значение> будут отображаться в выводе следующим образом:

ключ: значение

Это означает, что обрезанные <ключ> и <значение> будут разделены : (одно двоеточие, за которым следует один пробел).

Для удобства можно настроить <псевдоним-ключа>, чтобы сделать использование --trailer короче для ввода в командной строке. Это можно настроить с помощью переменной конфигурации trailer.<псевдоним-ключа>.key. <псевдоним-ключа> должен быть префиксом полной строки <ключа>, хотя регистр не имеет значения. Например, если у вас есть

trailer.sign.key "Signed-off-by: "

в вашей конфигурации, вам нужно указать --trailer="sign: foo" в командной строке вместо --trailer="Signed-off-by: foo".

По умолчанию новый завершитель будет отображаться в конце всех существующих завершителей. Если существующих завершителей нет, новый завершитель будет отображаться в конце входных данных. Пустая строка будет добавлена перед новым завершителем, если её ещё нет.

Существующие завершители извлекаются из входных данных путём поиска группы из одной или нескольких строк, которая (i) полностью состоит из завершителей, или (ii) содержит по крайней мере один сгенерированный Git или настроенный пользователем завершитель и состоит из не менее чем 25% завершителей. Группе должны предшествовать одна или несколько пустых (или состоящих только из пробелов) строк. Группа должна находиться либо в конце входных данных, либо быть последними не пробельными строками перед строкой, начинающейся с --- (за которой следует пробел или конец строки).

При чтении завершителей перед <ключом> или внутри него не может быть пробелов, но любое количество обычных пробелов и символов табуляции допускается между <ключом> и разделителем. Пробелы могут быть до, внутри или после <значения>. <значение> может быть разбито на несколько строк, причём каждая последующая строка начинается по крайней мере с одного пробела, как "свёртывание" в RFC 822. Пример:

ключ: Это очень длинное значение, с пробелами и
  переводами строк в нём.

Обратите внимание, что завершители не следуют (и не предназначены для следования) многим правилам для заголовков RFC 822. Например, они не следуют правилу кодирования.

ПАРАМЕТРЫ

--in-place

Редактировать файлы на месте.

--trim-empty

Если часть <значение> любого завершителя содержит только пробелы, весь завершитель будет удалён из вывода. Это относится как к существующим, так и к новым завершителям.

--trailer <ключ>[(=|:)<значение>]

Указывает пару (<ключ>, <значение>), которая должна быть применена как завершитель к входным данным. См. описание этой команды.

--where <размещение>
--no-where

Указывает, где будут добавлены все новые завершители. Настройка, указанная с --where, переопределяет переменные конфигурации trailer.where и любые применимые trailer.<псевдоним-ключа>.where и применяется ко всем параметрам --trailer до следующего появления --where или --no-where. При обнаружении --no-where очищает эффект любого предыдущего использования --where, так что соответствующие переменные конфигурации больше не переопределяются. Возможные размещения: after, before, end или start.

--if-exists <действие>
--no-if-exists

Указывает, какое действие будет выполнено, когда во входных данных уже есть по крайней мере один завершитель с тем же <ключом>. Настройка, указанная с --if-exists, переопределяет переменные конфигурации trailer.ifExists и любые применимые trailer.<псевдоним-ключа>.ifExists и применяется ко всем параметрам --trailer до следующего появления --if-exists или --no-if-exists. При обнаружении --no-if-exists очищает эффект любого предыдущего использования --if-exists, так что соответствующие переменные конфигурации больше не переопределяются. Возможные действия: addIfDifferent, addIfDifferentNeighbor, add, replace и doNothing.

--if-missing <действие>
--no-if-missing

Указывает, какое действие будет выполнено, когда во входных данных нет другого завершителя с тем же <ключом>. Настройка, указанная с --if-missing, переопределяет переменные конфигурации trailer.ifMissing и любые применимые trailer.<псевдоним-ключа>.ifMissing и применяется ко всем параметрам --trailer до следующего появления --if-missing или --no-if-missing. При обнаружении --no-if-missing очищает эффект любого предыдущего использования --if-missing, так что соответствующие переменные конфигурации больше не переопределяются. Возможные действия: doNothing или add.

--only-trailers

Выводить только завершители, а не любые другие части входных данных.

--only-input

Выводить только завершители, которые существуют во входных данных; не добавлять никаких из командной строки или путём применения переменных конфигурации trailer.*.

--unfold

Если завершитель имеет значение, которое занимает несколько строк (так называемое "свёрнутое"), переформатировать значение в одну строку.

--parse

Удобный псевдоним для --only-trailers --only-input --unfold. Это упрощает просмотр только завершителей из входных данных без влияния на них каких-либо параметров командной строки или переменных конфигурации, а также делает вывод удобным для машинной обработки с помощью --unfold.

--no-divider

Не обрабатывать --- как конец сообщения коммита. Используйте это, когда вы знаете, что ваши входные данные содержат только само сообщение коммита (а не письмо или вывод git format-patch).

ПЕРЕМЕННЫЕ КОНФИГУРАЦИИ

Дальнейшее содержание этого раздела, повторяет то, что может быть найдено в git-config[1]:

Warning

Missing ru/config/trailer.adoc

See original version for this content.

ПРИМЕРЫ

  • Настроить завершитель sign с ключом Signed-off-by, а затем добавить два таких завершителя в файл сообщения коммита:

    $ git config trailer.sign.key "Signed-off-by"
    $ cat msg.txt
    тема
    
    текст тела
    $ git interpret-trailers --trailer 'sign: Alice <alice@example.com>' --trailer 'sign: Bob <bob@example.com>' <msg.txt
    тема
    
    текст тела
    
    Signed-off-by: Alice <alice@example.com>
    Signed-off-by: Bob <bob@example.com>
  • Используйте параметр --in-place для редактирования файла сообщения коммита на месте:

    $ cat msg.txt
    тема
    
    текст тела
    
    Signed-off-by: Bob <bob@example.com>
    $ git interpret-trailers --trailer 'Acked-by: Alice <alice@example.com>' --in-place msg.txt
    $ cat msg.txt
    тема
    
    текст тела
    
    Signed-off-by: Bob <bob@example.com>
    Acked-by: Alice <alice@example.com>
  • Извлечь последний коммит как патч и добавить к нему завершитель Cc и Reviewed-by:

    $ 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
  • Настроить завершитель sign с командой для автоматического добавления 'Signed-off-by: ' с информацией об авторе, только если ещё нет 'Signed-off-by: ', и показать, как это работает:

    $ cat msg1.txt
    тема
    
    текст тела
    $ 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 'echo "$(git config user.name) <$(git config user.email)>"'
    $ git interpret-trailers --trailer sign <msg1.txt
    тема
    
    текст тела
    
    Signed-off-by: Bob <bob@example.com>
    $ cat msg2.txt
    тема
    
    текст тела
    
    Signed-off-by: Alice <alice@example.com>
    $ git interpret-trailers --trailer sign <msg2.txt
    тема
    
    текст тела
    
    Signed-off-by: Alice <alice@example.com>
  • Настроить завершитель fix с ключом, содержащим #, без пробела после этого символа, и показать, как это работает:

    $ git config trailer.separators ":#"
    $ git config trailer.fix.key "Fix #"
    $ echo "тема" | git interpret-trailers --trailer fix=42
    тема
    
    Fix #42
  • Настроить завершитель help с командой, использующей сценарий glog-find-author, который ищет указанную личность автора в git log в репозитории git, и показать, как это работает:

    $ cat ~/bin/glog-find-author
    #!/bin/sh
    test -n "$1" && git log --author="$1" --pretty="%an <%ae>" -1 || true
    $ cat msg.txt
    тема
    
    текст тела
    $ 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
    тема
    
    текст тела
    
    Helped-by: Junio C Hamano <gitster@pobox.com>
    Helped-by: Christian Couder <christian.couder@gmail.com>
  • Настроить завершитель ref с командой, использующей сценарий glog-grep для поиска последнего соответствующего коммита в git log в репозитории git, и показать, как это работает:

    $ cat ~/bin/glog-grep
    #!/bin/sh
    test -n "$1" && git log --grep "$1" --pretty=reference -1 || true
    $ cat msg.txt
    тема
    
    текст тела
    $ 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
    тема
    
    текст тела
    
    Reference-to: 8bc9a0c769 (Add copyright notices., 2005-04-07)
  • Настроить завершитель see с командой для отображения темы связанного коммита и показать, как это работает:

    $ cat msg.txt
    тема
    
    текст тела
    
    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
    тема
    
    текст тела
    
    See-also: fe3187489d69c4 (тема связанного коммита)
  • Настроить шаблон коммита с некоторыми завершителями с пустыми значениями (используя sed для отображения и сохранения конечных пробелов в конце завершителей), затем настроить хук commit-msg, который использует git interpret-trailers для удаления завершителей с пустыми значениями и добавления завершителя git-version:

    $ cat temp.txt
    ***тема***
    
    ***сообщение***
    
    Fixes: Z
    Cc: Z
    Reviewed-by: Z
    Signed-off-by: Z
    $ sed -e 's/ Z$/ /' 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: \$(git describe)" "\$1" > "\$1.new"
    mv "\$1.new" "\$1"
    $ chmod +x .git/hooks/commit-msg

GIT

Является частью пакета git[1]