Русский ▾ Topics ▾ Latest version ▾ git-apply last updated in 2.51.0

НАЗВАНИЕ

git-apply - Применить патч к файлам и/или индексу

ОБЗОР

git apply [--stat] [--numstat] [--summary] [--check]
	  [--index | --intent-to-add] [--3way] [--ours | --theirs | --union]
	  [--apply] [--no-add] [--build-fake-ancestor=<файл>] [-R | --reverse]
	  [--allow-binary-replacement | --binary] [--reject] [-z]
	  [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
	  [--ignore-space-change | --ignore-whitespace]
	  [--whitespace=(nowarn|warn|fix|error|error-all)]
	  [--exclude=<путь>] [--include=<путь>] [--directory=<корень>]
	  [--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<патч>…​]

ОПИСАНИЕ

Читает предоставленный вывод diff (т.е. "патч") и применяет его к файлам. При запуске из подкаталога в репозитории пути патчей вне каталога игнорируются. С опцией --index патч также применяется к индексу, а с опцией --cached патч применяется только к индексу. Без этих опций команда применяет патч только к файлам и не требует, чтобы они находились в репозитории Git.

Эта команда применяет патч, но не создаёт коммит. Используйте git-am[1] для создания коммитов из патчей, сгенерированных git-format-patch[1] и/или полученных по электронной почте.

ПАРАМЕТРЫ

<patch>…​

Файлы, из которых читать патч. - можно использовать для чтения из стандартного ввода.

--stat

Вместо применения патча выводит diffstat для входных данных. Отключает "apply".

--numstat

Аналогично --stat, но показывает количество добавленных и удалённых строк в десятичной записи и имя пути без сокращения, чтобы сделать вывод более удобным для машинной обработки. Для двоичных файлов выводит два - вместо 0 0. Отключает "apply".

--summary

Вместо применения патча выводит сжатое резюме информации, полученной из расширенных заголовков git diff, таких как создания, переименования и изменения режимов. Отключает "apply".

--check

Вместо применения патча проверяет, применим ли патч к текущему рабочему дереву и/или индексному файлу, и обнаруживает ошибки. Отключает "apply".

--index

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

--cached

Применяет патч только к индексу, не затрагивая рабочее дерево. Если действует --check, просто проверяет, что он применится чисто к записи индекса.

-N
--intent-to-add

При применении патча только к рабочему дереву помечает новые файлы для добавления в индекс позже (см. опцию --intent-to-add в git-add[1]). Эта опция игнорируется, если используются --index или --cached, и не имеет эффекта вне репозитория Git. Обратите внимание, что --index может подразумеваться другими опциями, такими как --3way.

-3
--3way

Пытается выполнить трёхстороннее слияние, если патч записывает идентификаторы blob, к которым он должен применяться, и эти blob доступны локально, возможно оставляя маркеры конфликтов в файлах рабочего дерева для разрешения пользователем. Эта опция подразумевает опцию --index, если не используется опция --cached, и несовместима с опцией --reject. При использовании с опцией --cached любые конфликты остаются на более высоких стадиях в кэше.

--ours
--theirs
--union

Вместо оставления конфликтов в файле разрешает конфликты в пользу нашей (или их, или обеих) стороны строк. Требует --3way.

--build-fake-ancestor=<file>

Более новые выводы git diff содержат встроенную информацию об индексе для каждого blob, чтобы помочь идентифицировать исходную версию, к которой применяется патч. При указании этого флага, если исходные версии blob доступны локально, создаётся временный индекс, содержащий эти blob.

При обнаружении чистого изменения режима (у которого нет информации об индексе) информация считывается из текущего индекса.

-R
--reverse

Применить патч в обратном направлении.

--reject

Для атомарности git apply по умолчанию завершается ошибкой для всего патча и не затрагивает рабочее дерево, когда некоторые блоки не применяются. Эта опция заставляет его применять применимые части патча и оставлять отклонённые блоки в соответствующих файлах *.rej.

-z

При указании --numstat не изменяет имена путей, а использует завершаемый NUL машинно-читаемый формат.

Без данного параметра пути с «необычными» символами берутся в кавычки, как это описано для переменной конфигурации core.quotePath (см. git-config[1]).

-p<n>

Удаляет <n> начальных компонентов пути (разделённых косыми чертами) из традиционных путей diff. Например, с -p2 патч для a/dir/file будет применён непосредственно к file. По умолчанию 1.

-C<n>

Гарантирует, что как минимум <n> строк окружающего контекста совпадают до и после каждого изменения. Когда существует меньше строк окружающего контекста, все они должны совпадать. По умолчанию контекст никогда не игнорируется.

--unidiff-zero

По умолчанию git apply ожидает, что применяемый патч является унифицированным diff с как минимум одной строкой контекста. Это обеспечивает хорошие меры безопасности, но ломается при применении diff, сгенерированного с помощью --unified=0. Для обхода этих проверок используйте --unidiff-zero.

Обратите внимание: по указанным выше причинам использование патчей без контекста не рекомендуется.

--apply

Если вы используете любую из опций, помеченных "Отключает apply" выше, git apply читает и выводит запрошенную информацию без фактического применения патча. Укажите этот флаг после этих флагов, чтобы также применить патч.

--no-add

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

--allow-binary-replacement
--binary

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

--exclude=<path-pattern>

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

--include=<path-pattern>

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

При использовании шаблонов --exclude и --include они проверяются в том порядке, в котором появляются в командной строке, и первое совпадение определяет, будет ли использован патч для каждого пути. Патч для пути, который не соответствует ни одному шаблону include/exclude, используется по умолчанию, если в командной строке нет шаблона include, и игнорируется, если есть любой шаблон include.

--ignore-space-change
--ignore-whitespace

When applying a patch, ignore changes in whitespace in context lines if necessary. Context lines will preserve their whitespace, and they will not undergo whitespace fixing regardless of the value of the --whitespace option. New lines will still be fixed, though.

--whitespace=<action>

При применении патча обнаруживает новую или изменённую строку, содержащую ошибки пробелов. То, что считается ошибками пробелов, контролируется конфигурацией core.whitespace. По умолчанию завершающие пробелы (включая строки, состоящие исключительно из пробелов) и символ пробела, за которым немедленно следует символ табуляции внутри начального отступа строки, считаются ошибками пробелов.

По умолчанию команда выводит предупреждения, но применяет патч. Когда git-apply используется для статистики, а не для применения патча, по умолчанию используется nowarn.

Вы можете использовать различные значения <действие> для управления этим поведением:

  • nowarn отключает предупреждение о завершающих пробелах.

  • warn выводит предупреждения для некоторых таких ошибок, но применяет патч как есть (по умолчанию).

  • fix выводит предупреждения для некоторых таких ошибок и применяет патч после их исправления (strip является синонимом — инструмент раньше считал только завершающие пробельные символы ошибками, и исправление заключалось в их "удалении", но современные Git делают больше).

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

  • error-all аналогично error, но показывает все ошибки.

--inaccurate-eof

При определённых обстоятельствах некоторые версии diff не могут корректно обнаружить отсутствие перевода строки в конце файла. В результате патчи, созданные такими программами diff, не записывают неполные строки правильно. Эта опция добавляет поддержку применения таких патчей, обходя эту ошибку.

-v
--verbose

Сообщает о прогрессе в stderr. По умолчанию печатается только сообщение о применяемом в данный момент патче. Эта опция заставляет выводить дополнительную информацию.

-q
--quiet

Подавляет вывод в stderr. Сообщения о состоянии патча и прогрессе печататься не будут.

--recount

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

--directory=<root>

Добавляет <корень> ко всем именам файлов. Если также был передан аргумент "-p", он применяется перед добавлением нового корня.

Например, патч, который говорит об обновлении a/git-gui.sh до b/git-gui.sh, может быть применён к файлу в рабочем дереве modules/git-gui/git-gui.sh, запустив git apply --directory=modules/git-gui.

--unsafe-paths

По умолчанию патч, который затрагивает область вне рабочей зоны (либо рабочее дерево, контролируемое Git, либо текущий рабочий каталог, когда "git apply" используется в качестве замены GNU patch), отклоняется как ошибка (или злонамеренное действие).

Когда git apply используется как "лучший GNU patch", пользователь может передать опцию --unsafe-paths для обхода этой проверки безопасности. Эта опция не имеет эффекта, когда используются --index или --cached.

--allow-empty

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

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

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

Warning

Missing ru/config/apply.adoc

See original version for this content.

ПОДМОДУЛИ

Если патч содержит любые изменения подмодулей, то git apply обрабатывает эти изменения следующим образом.

Если указан --index (явно или неявно), то коммиты подмодулей должны точно соответствовать индексу, чтобы патч применился. Если какие-либо подмодули извлечены, то эти извлечения полностью игнорируются, т.е. они не обязаны быть актуальными или чистыми, и они не обновляются.

Если --index не указан, то коммиты подмодулей в патче игнорируются, и проверяется только отсутствие или наличие соответствующего подкаталога и (если возможно) обновляется.

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

GIT

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