українська мова ▾ Topics ▾ Latest version ▾ git-interpret-trailers last updated in 2.49.0

НАЗВА

git-interpret-trailers - Додавання або аналіз структурованої інформації в повідомленнях комітів

СИНОПСИС

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

ОПИС

Додайте або проаналізуйте рядки-«трейлери», схожі на заголовки електронних листів 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», є трейлерами.

Ця команда зчитує повідомлення комітів або з аргументів <file>, або зі стандартного вводу, якщо <file> не вказано. Якщо вказано --parse, вивід складається з проаналізованих трейлерів, що надходять з вводу, без впливу на них будь-якими параметрами командного рядка чи змінними конфігурації.

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

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

Деякі змінні конфігурації контролюють спосіб застосування аргументів --trailer до кожного вхідного значення та спосіб зміни будь-якого існуючого трейлера у вхідному значенні. Вони також дозволяють автоматично додавати деякі трейлери.

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

key: value

Це означає, що обрізані <ключ> та <значення> будуть розділені знаком `: ' (одна двокрапка, за якою йде один пробіл).

Для зручності можна налаштувати <key-alias>, щоб скоротити використання --trailer для введення в командному рядку. Це можна налаштувати за допомогою змінної конфігурації trailer.<key-alias>.key. <keyAlias> має бути префіксом повного рядка <key>, хоча чутливість до регістру не має значення. Наприклад, якщо у вас є

trailer.sign.key "Підписано: "

у вашій конфігурації вам потрібно лише вказати --trailer="sign: foo" у командному рядку замість --trailer="Signed-off-by: foo".

За замовчуванням новий трейлер з’явиться в кінці всіх існуючих трейлерів. Якщо існуючого трейлера немає, новий трейлер з’явиться в кінці вхідних даних. Перед новим трейлером буде додано порожній рядок, якщо його ще немає.

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

Під час читання трейлерів не може бути пробілів перед або всередині <key>, але між <key> та роздільником дозволена будь-яка кількість звичайних пробілів та символів табуляції. Пробіли можуть бути перед, всередині або після <value>. <value> може бути розділений на кілька рядків, причому кожен наступний рядок починається принаймні з одного пробілу, як у випадку з "folding" у RFC 822. Приклад:

ключ: Це дуже довге значення з пробілами та
символами нового рядка.

Зверніть увагу, що трейлери не дотримуються (і не призначені для дотримання) багатьох правил для заголовків RFC 822. Наприклад, вони не дотримуються правила кодування.

ОПЦІЇ

--in-place

Відредагуйте файли на місці.

--trim-empty

Якщо частина <value> будь-якого трейлера містить лише пробіли, весь трейлер буде видалено з виводу. Це стосується як існуючих, так і нових трейлерів.

--trailer <key>[(=|:)<value>]

Вкажіть пару (<ключ>, <значення>), яку слід застосувати як трейлер до вхідних даних. Див. опис цієї команди.

--where <placement>
--no-where

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

--if-exists <action>
--no-if-exists

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

--if-missing <action>
--no-if-missing

Вкажіть, яка дія буде виконана, якщо у вхідних даних немає іншого трейлера з тим самим <key>. Налаштування, задане за допомогою --if-missing, замінює trailer.ifMissing та будь-які відповідні змінні конфігурації trailer.<keyAlias>.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 uk/config/trailer.adoc

See original version for this content.

ПРИКЛАДИ

  • Налаштуйте трейлер «підпис» з ключем «Підписано», а потім додайте два таких трейлери до файлу повідомлення коміту:

    $ 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
    
    основний текст
    
    Signed-off-by: Alice <alice@example.com>
    Signed-off-by: Bob <bob@example.com>
  • Використайте опцію --in-place для редагування файлу повідомлення коміту на місці:

    $ cat msg.txt
    subject
    
    основний текст
    
    Підписав: Боб <bob@example.com>
    $ git interpret-trailers --trailer 'Acked-by: Alice <alice@example.com>' --in-place msg.txt
    $ cat msg.txt
    subject
    
    основний текст
    
    Signed-off-by: Bob <bob@example.com>
    Acked-by: Alice <alice@example.com>
  • Витягніть останній коміт як патч і додайте до нього трейлер «Копія» та «Перевірено»:

    $ 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
  • Налаштуйте трейлер «підпису» з командою автоматичного додавання «Підписано:» з інформацією про автора, лише якщо «Підписано:» ще немає, та покажіть, як це працює:

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

    $ git config trailer.separators ":#"
    $ git config trailer.fix.key "Fix #"
    $ echo "subject" | git interpret-trailers --trailer fix=42
    subject
    
    Виправлення #42
  • Налаштуйте трейлер «довідки» за допомогою командної команди, використовуючи скрипт glog-find-author, який шукає вказану особу автора з журналу git у репозиторії git та показує, як це працює:

    $ 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
    
    основний текст
    
    Helped-by: Junio C Hamano <gitster@pobox.com>
    Helped-by: Christian Couder <christian.couder@gmail.com>
  • Налаштуйте трейлер ref за допомогою командної команди, використовуючи скрипт glog-grep для отримання останнього відповідного коміту з журналу git у репозиторії git командою grep та покажіть, як це працює:

    $ 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
    
    основний текст
    
    Reference-to: 8bc9a0c769 (Add copyright notices., 2005-04-07)
  • Налаштуйте трейлер «see» за допомогою команди, яка покаже тему пов’язаного коміту та покаже, як це працює:

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

    $ cat temp.txt
    ***subject***
    
    ***повідомлення***
    
    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]