Русский ▾ Topics ▾ Latest version ▾ git-am last updated in 2.53.0

НАЗВАНИЕ

git-am — Применить серию патчей из почтового ящика

ОБЗОР

git am [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--no-verify]
	[--[no-]3way] [--interactive] [--committer-date-is-author-date]
	[--ignore-date] [--ignore-space-change | --ignore-whitespace]
	[--whitespace=<действие>] [-C<число>] [-p<число>] [--directory=<каталог>]
	[--exclude=<путь>] [--include=<путь>] [--reject] [-q | --quiet]
	[--[no-]scissors] [-S[<id-ключа>]] [--patch-format=<формат>]
	[--quoted-cr=<действие>]
	[--empty=(stop|drop|keep)]
	[(<mbox> | <Maildir>)…​]
git am (--continue | --skip | --abort | --quit | --retry | --show-current-patch[=(diff|raw)] | --allow-empty)

ОПИСАНИЕ

Разделяет почтовые сообщения в почтовом ящике на сообщения журнала коммитов, информацию об авторстве и патчи, а затем применяет их к текущей ветке. Можно думать об этом как об обратной операции git-format-patch[1], выполненной на ветке с прямой историей без слияний.

ПАРАМЕТРЫ

(<mbox>|<Maildir>)…​

Список файлов почтовых ящиков для чтения патчей. Если этот аргумент не предоставлен, команда читает из стандартного ввода. Если указаны каталоги, они будут обрабатываться как Maildir.

-s
--signoff

Добавляет трейлер Signed-off-by в сообщение коммита, используя вашу личность коммитера. Для получения дополнительной информации см. опцию signoff в git-commit[1].

-k
--keep

Передаёт флаг -k в git mailinfo (см. git-mailinfo[1]).

--keep-non-patch

Передаёт флаг -b в git mailinfo (см. git-mailinfo[1]).

--keep-cr
--no-keep-cr

С --keep-cr вызывает git mailsplit (см. git-mailsplit[1]) с той же опцией, чтобы предотвратить удаление CR в конце строк. Для указания поведения по умолчанию можно использовать конфигурационную переменную am.keepcr. --no-keep-cr полезно для переопределения am.keepcr.

-c
--scissors

Удаляет всё в теле перед строкой-ножницами (см. git-mailinfo[1]). Может быть активировано по умолчанию с помощью конфигурационной переменной mailinfo.scissors.

--no-scissors

Игнорирует строки-ножницы (см. git-mailinfo[1]).

--quoted-cr=<action>

Этот флаг будет передан в git mailinfo (см. git-mailinfo[1]).

--empty=(drop|keep|stop)

Как обрабатывать электронное письмо без патча:

drop

Email-сообщение будет пропущено.

keep

Будет создан пустой коммит с содержимым электронного письма в качестве его журнала.

stop

Команда завершится ошибкой, остановившись в середине текущей сессии am. Это поведение по умолчанию.

-m
--message-id

Передаёт флаг -m в git mailinfo (см. git-mailinfo[1]), чтобы заголовок Message-ID был добавлен в сообщение коммита. Для указания поведения по умолчанию можно использовать конфигурационную переменную am.messageid.

--no-message-id

Не добавляет заголовок Message-ID в сообщение коммита. no-message-id полезно для переопределения am.messageid.

-q
--quiet

Будет тихим. Выводит только сообщения об ошибках.

-u
--utf8

Передаёт флаг -u в git mailinfo (см. git-mailinfo[1]). Предлагаемое сообщение журнала коммита, взятое из эл. почты, перекодируется в UTF-8 (конфигурационная переменная i18n.commitEncoding может использоваться для указания предпочтительной кодировки проекта, если это не UTF-8).

Это было необязательным в предыдущих версиях git, но теперь это поведение по умолчанию. Вы можете использовать --no-utf8 для переопределения.

--no-utf8

Передаёт флаг -n в git mailinfo (см. git-mailinfo[1]).

-3
--3way
--no-3way

Когда патч не применяется чисто, откатывается на трёхстороннее слияние, если патч записывает идентификаторы blob, к которым он должен применяться, и эти blob доступны локально. --no-3way можно использовать для переопределения конфигурационной переменной am.threeWay. Для получения дополнительной информации см. am.threeWay в git-config[1].

--rerere-autoupdate
--no-rerere-autoupdate

После того как механизм rerere повторно использует записанное ранее разрешение на текущем конфликте для обновления файлов в рабочем каталоге, разрешить также обновить индекс, применив к нему результат разрешения. Параметр --no-rerere-autoupdate можно использовать как удобный способом дважды проверить результат работы rerere, и поймать потенциальные ошибки слияния до выполнения коммита, добавляя результат в индексе с помощью отдельной команды git add.

--ignore-space-change
--ignore-whitespace
--whitespace=<action>
-C<n>
-p<n>
--directory=<dir>
--exclude=<path>
--include=<path>
--reject

Эти флаги передаются программе git apply (см. git-apply[1]), которая применяет патч.

Допустимые значения <действие> для опции --whitespace: nowarn, warn, fix, error и error-all.

--patch-format

По умолчанию команда пытается автоматически определить формат патча. Эта опция позволяет пользователю обойти автоматическое определение и указать формат патча, в котором следует интерпретировать патч(и). Допустимые форматы: mbox, mboxrd, stgit, stgit-series и hg.

-i
--interactive

Запустить в интерактивном режиме.

-n
--no-verify

По умолчанию выполняются хуки pre-applypatch и applypatch-msg. При указании --no-verify или -n они пропускаются. См. также githooks[5].

--committer-date-is-author-date

По умолчанию команда записывает дату из эл. письма как дату автора коммита и использует время создания коммита как дату коммитера. Это позволяет пользователю лгать о дате коммитера, используя то же значение, что и дата автора.

Warning
Механизм обхода истории предполагает, что коммиты имеют неубывающие метки времени. Вам следует подумать, действительно ли вам нужна эта опция. Затем вам следует использовать эту опцию только для переопределения даты коммитера при применении коммитов поверх основы, коммит которой старше (с точки зрения даты коммита), чем самый старый патч, который вы применяете.
--ignore-date

По умолчанию команда записывает дату из эл. письма как дату автора коммита и использует время создания коммита как дату коммитера. Это позволяет пользователю лгать о дате автора, используя то же значение, что и дата коммитера.

--skip

Пропускает текущий патч. Имеет смысл только при перезапуске прерванного патча.

-S[<id-ключа>]
--gpg-sign[=<id-ключа>]
--no-gpg-sign

Подписывать коммиты с помощью GPG. Аргумент id-ключа необязателен, и если не указан, в качестве значения по умолчанию будет использоваться личное имя коммиттера; если аргумент указан, он должен следовать сразу после параметра, без пробела. Параметр --no-gpg-sign полезен, если нужно отменить переменную конфигурации commit.gpgSign или параметр --gpg-sign, заданный ранее.

--continue
-r
--resolved

После неудачи применения патча (например, попытки применить конфликтующий патч) пользователь вручную применил его, и индексный файл хранит результат применения. Создаёт коммит, используя авторство и журнал коммита, извлечённые из эл. письма и текущего индексного файла, и продолжает.

--resolvemsg=<msg>

При возникновении сбоя применения патча перед выходом на экран будет напечатано <сообщение>. Это переопределяет стандартное сообщение, информирующее об использовании --continue или --skip для обработки сбоя. Это исключительно для внутреннего использования между git rebase и git am.

--abort

Восстановить исходную ветку и прервать операцию применения патчей. Вернуть содержимое файлов, задействованных в операции am, в состояние до am.

--quit

Прерывает операцию применения патчей, но оставляет HEAD и индекс нетронутыми.

--retry

Пытается применить последний конфликтующий патч снова. Обычно это полезно только для передачи дополнительных опций при повторной попытке (например, --3way), поскольку в противном случае вы просто снова увидите ту же ошибку.

--show-current-patch[=(diff|raw)]

Показывает сообщение, на котором git am остановился из-за конфликтов. Если указано raw, показывает исходное содержимое эл. письма; если diff, показывает только часть diff. По умолчанию raw.

--allow-empty

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

ОБСУЖДЕНИЕ

Имя автора коммита берётся из строки "From: " сообщения, а дата автора коммита берётся из строки "Date: " сообщения. Строка "Subject: " используется в качестве заголовка коммита после удаления общего префикса "[PATCH <что-либо>]". Строка "Subject: " должна кратко описывать, о чём коммит, в одной строке текста.

Строки "From: ", "Date: " и "Subject: ", начинающие тело, переопределяют соответствующие значения имени автора и заголовка коммита, взятые из заголовков.

Сообщение коммита формируется из заголовка, взятого из "Subject: ", пустой строки и тела сообщения до того места, где начинается патч. Лишние пробелы в конце каждой строки автоматически удаляются.

Ожидается, что патч будет встроенным, непосредственно следующим за сообщением. Любая строка вида:

  • три тире и конец строки, или

  • строка, начинающаяся с "diff -", или

  • строка, начинающаяся с "Index: "

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

При первоначальном вызове git am вы передаёте ему имена почтовых ящиков для обработки. Увидев первый патч, который не применяется, он прерывается посередине. Вы можете восстановиться из этого одним из двух способов:

  1. пропустить текущий патч, повторно запустив команду с опцией --skip.

  2. вручную разрешить конфликт в рабочем каталоге и обновить индексный файл, чтобы привести его в состояние, которое должен был создать патч. Затем запустите команду с опцией --continue.

Команда отказывается обрабатывать новые почтовые ящики до завершения текущей операции, поэтому если вы решите начать заново, запустите git am --abort перед запуском команды с именами почтовых ящиков.

Перед применением любых патчей ORIG_HEAD устанавливается в конец текущей ветки. Это полезно, если у вас возникают проблемы с несколькими коммитами, например, запуск git am на неправильной ветке или ошибка в коммитах, которую легче исправить, изменив почтовый ящик (например, ошибки в строках "From:").

ПЕРЕХВАТЧИКИ

Эта команда может выполнять хуки applypatch-msg, pre-applypatch и post-applypatch. Подробности см. в githooks[5].

КОНФИГУРАЦИЯ

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

Warning

Missing ru/config/am.adoc

See original version for this content.

СМОТРИТЕ ТАКЖЕ

GIT

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