Spec-Zone.ru › Git

git-apply

Название

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

Краткое описание

git apply [--stat] [--numstat] [--summary] [--check]
          [--index | --intent-to-add] [--3way] [--ours | --theirs | --union]
          [--apply] [--no-add] [--build-fake-ancestor=<file>] [-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=<path>] [--include=<path>] [--directory=<root>]
          [--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<patch>…​]

Описание

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

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

Параметры

<patch>...

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

--stat

Вместо применения патча вывести статистику diff для входных данных. Отключает «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

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

--ours
--theirs
--union

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

--build-fake-ancestor=<file>

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

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

-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>

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

--include=<path-pattern>

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

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

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

При применении патча при необходимости игнорировать изменения пробельных символов в строках контекста. Пробельные символы в строках контекста сохраняются, и такие строки не исправляются независимо от значения параметра --whitespace. Новые строки при этом всё равно исправляются.

--whitespace=<action>

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

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

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

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

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

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

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

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

--inaccurate-eof

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

-v
--verbose

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

-q
--quiet

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

--recount

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

--directory=<root>

Добавить <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]. Оно совпадает с содержимым соответствующего раздела:

apply.ignoreWhitespace

Если установлено значение change, указывает git apply игнорировать изменения пробельных символов так же, как при использовании параметра --ignore-space-change. Если задано одно из значений no, none, never, false, указывает git apply учитывать все различия в пробельных символах.

apply.whitespace

Указывает git apply, как обрабатывать пробельные символы, так же, как при использовании параметра --whitespace.

Подмодули

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

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

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

См. также

git-am[1].

apply

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-apply

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API