Команда git-am позволяет применить последовательность исправлений (патчей, patch) из mailbox-а.
Примечание: под mailbox-ом подразумевается обычный текстовый файл, который может быть передан через email, где содержатся инструкции по внесению исправлений в файлы репозитория. Эти инструкции указывают файл, к которому применяются исправления со строчками - и + (содержимое файла исправлений аналогично выводу команды git diff [3]).
СИНОПСИС
git am [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--[no-]3way] [--interactive] [--committer-date-is-author-date] [--ignore-date] [--ignore-space-change | --ignore-whitespace] [--whitespace=< option>] [-C< n>] [-p< n>] [--directory=< dir>] [--exclude=< path>] [--include=< path>] [--reject] [-q | --quiet] [--[no-]scissors] [-S[< keyid>]] [--patch-format=< format>] [--quoted-cr=< action>] [(< mbox> | < Maildir>)...] git am (--continue | --skip | --abort | --quit | --show-current-patch[=(diff|raw)])
ОПИСАНИЕ
Разбивает почтовые сообщения в mailbox на сообщения журнала фиксации, информацию об авторстве и исправления, и применяет их к текущей ветви.
ОПЦИИ
(< mbox>|< Maildir>)... Задает список mailbox файлов, откуда считываются патчи. Если вы не предоставите этот аргумент, то команда прочитает его из стандартного ввода. Если вы предоставите директории, то они будут обрабатываться как Maildirs.
-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)).
--[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)).
-m, --message-id Передаст флаг -m flag в 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)). Предлагаемое сообщение commit log берется из e-mail перекодированным в UTF-8 (конфигурационная переменная i18n.commitEncoding может использоваться для указания предпочтительной кодировки, если она не UTF-8).
Это было необязательным в предыдущих версиях git, но теперь сделано умолчанием. Вы можете использовать --no-utf8 для отмены этого поведения.
--no-utf8 Передает флаг -n в git mailinfo (см. git-mailinfo(1)).
-3, --3way, --no-3way Когда патч не применяется чисто, происходит откат к 3-way merge, если патч записывает идентичность blobs, к которым он должен применяться, и у нас есть эти blobs, доступные локально. Может использоваться опция --no-3way, чтобы отменить действие переменной конфигурации am.threeWay. Для дополнительной информации см. am.threeWay в git-config(1).
--rerere-autoupdate, --no-rerere-autoupdate Если это возможно, то позволяет механизм rerere для обновления индекса с результатом разрешения auto-conflict.
--ignore-space-change, --ignore-whitespace, --whitespace=< option>, -C< n>, -p< n>, --directory=< dir>, --exclude=< path>, --include=< path>, --reject Эти флаги передаются в программу git apply (см. git-apply(1)), которая применяет патч.
--patch-format По умолчанию команда попытается автоматически определить формат патча. Эта опция дает возможность пользователю пропустит автоматическое детектирование и указать формат патча, с которым должен интерпретироваться патч (патчи). Допустимы форматы mbox, mboxrd, stgit, stgit-series и hg.
-i, --interactive Работа в интерактивном режиме.
--committer-date-is-author-date По умолчанию команда записывает дату из сообщения e-mail как дату автора фиксации, и использует время создания фиксации как дату committer. Это дает возможность пользователю солгать по поводу committer date путем использования того же значения, что и у author date.
--ignore-date По умолчанию команда записывает дату из сообщения e-mail как commit author date, и использует время создания фиксации как committer date. Это дает возможность пользователю солгать по поводу author date путем использования того же значения, что и у committer date.
--skip Пропустит текущий патч. Это имеет смысл только при перезапуске оборванного процесса патча.
-S[< keyid>], --gpg-sign[=< keyid>], --no-gpg-sign GPG-sign фиксаций. Аргумент keyid опциональный, и при его отсутствии применятся умолчания для идентификации committer; если keyid указан, то он должен быть пристыкован к опции без пробела. Опция --no-gpg-sign полезна для противодействия как переменной конфигурации committ.gpgSign, так и более ранней --gpg-sign.
--continue, -r, --resolved После неудачи применения патча (например при попытке применить конфликтный патч) пользователь должен применить его вручную, и индексный файл созраняет результат приложения. Сделает фиксацию, используя журнал авторства и фиксации, извлеченный из сообщения электронной почты и текущего индексного файла, и продолжит применение патча.
--resolvemsg=< msg> Когда произошло неудачное наложение патча, сообщение < msg> выведется на экран перед выходом. Это отменит стандартное сообщение, информирующее вас для использования --continue или --skip, чтобы обработать ошибку. Это исключительно для внутреннего использования между git rebase и git am.
--abort Восстановит оригинальную ветвь и оборвет операцию патча. Откатит содержимое файлов, вовлеченных в операцию am в их предыдущее состояние до am.
--quit Оборвет операцию патча, но сохранит неизменным HEAD и индекс.
--show-current-patch[=(diff|raw)] Покажет сообщение, на котором git am был остановлен из-за конфликтов. Если указано raw, то покажет содержимое raw сообщения e-mail; если diff, то покажет только порцию diff. По умолчанию используется raw.
ОБСУЖДЕНИЕ
Commit author name берется из строки "From: " сообщения, а commit author date берется из строки "Date: " сообщения. Строка "Subject: " используется в качестве title для commit, после отрезания общего префикса "[PATCH < anything>]".
Предполагается, что строка "Subject: " лаконично описывает, о чем идет речь в commit, в одной строке текста.
Строки "From: ", "Date: ", and "Subject: " в начале тела переназначают соответствующие значения commit author name и title, взятые из заголовков.
Сообщение commit формируется из title, взятого из "Subject: ", пустой строки и тела сообщения до места, где начинается патч. Лишние пробелы в конце каждой строки автоматически вырезаются.
Ожидается, что патч встраивается непосредственно после сообщения. Любая строка, имеющая следующий вид:
• три тире и конец строки, или • строка, начинающаяся на "diff -", или • строка, начинающаяся на "Index: "
.. берется как начало патча, и сообщение commit log завершается перед первым появлением такой строки.
При первоначальном вызове команды git am вы даете ей имена mailbox для обработки. Когда встретился первый патч, который не применяется, процесс прерывается посередине. Оправиться от этого можно одним из двух способов:
1. Пропустить текущий патч и повторно запустить команду с опцией --skip.
2. Вручную разрешить конфликт в рабочей директории, и обновить файл индекса, чтобы перевести его в состояние, в котором должно быть создано исправление. Затем запустить команду с опцией --continue.
Команда отказывается обрабатывать новые mailbox до завершения текущей операции, поэтому, если вы решите начать заново, то запустите git am --abort, прежде чем запускать команду с именами mailbox.
Перед применением любого патча устанавливается ORIG_HEAD на вершину текущей ветви. Это полезно, когда вы столкнулись с проблемами в нескольких фиксациях, наподобие запуска git am на неправильной ветви, или ошибка в фиксациях, которую проще исправить изменением в mailbox (например ошибки в строках "From:").
HOOKS
Эту команду могут запускать хуки applypatch-msg, pre-applypatch и post-applypatch. Для дополнительной информации см. githooks(5).
СМ. ТАКЖЕ
git-apply(1).
[Ссылки]
1. git-am site:git-scm.com. 2. How to use git am to apply patches from email messages? site:stackoverflow.com. 3. git: как сравнивать фиксации и ветки. |