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, но показывает количество добавленных и удалённых строк в десятичной записи, а имя пути выводит без сокращений, чтобы упростить машинную обработку. Для двоичных файлов выводит два значения-вместо сообщения00. Отключает «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> -
В более новых версиях вывода
gitdiffвстроеныindex informationдля каждого блоба, помогающие определить исходную версию, к которой применяется патч. Если указан этот флаг и исходные версии блобов доступны локально, создаётся временный индекс, содержащий эти блобы.Если встречается изменение только режима (в котором отсутствует информация об индексе), данные считываются из текущего индекса.
-
-R -
--reverse -
Применить патч в обратном порядке.
-
--reject -
Для обеспечения атомарности
gitapplyпо умолчанию отклоняет весь патч и не изменяет рабочее дерево, если некоторые фрагменты не удалось применить. Этот параметр позволяет применить применимые части патча, а отклонённые фрагменты сохранить в соответствующих файлах*.rej. -
-z -
Если указан параметр
--numstat, не преобразовывать имена путей, а использовать машиночитаемый формат с завершающим NUL-символом.Без этого параметра имена путей с «нестандартными» символами заключаются в кавычки, как описано для переменной конфигурации
core.quotePath(см. git-config[1]). -
-p<n> -
Удалить
<n>начальных компонентов пути (разделённых косыми чертами) из путей в традиционном формате diff. Например, при использовании-p2патч дляa/dir/fileбудет применён непосредственно кfile. По умолчанию используется значение 1. -
-C<n> -
Проверить, что перед каждым изменением и после него совпадает не менее
<n>строк окружающего контекста. Если строк окружающего контекста меньше, должны совпасть все имеющиеся строки. По умолчанию контекст не игнорируется. -
--unidiff-zero -
По умолчанию
gitapplyожидает, что применяемый патч представляет собой унифицированный diff как минимум с одной строкой контекста. Это обеспечивает надёжную защиту, но мешает применению diff, созданного с помощью--unified=0. Чтобы обойти эти проверки, используйте--unidiff-zero.По указанным выше причинам использование патчей без контекста не рекомендуется.
-
--apply -
Если использовать любой из приведённых выше параметров, помеченных как «отключает
apply»,gitapplyсчитывает и выводит запрошенную информацию, не применяя патч. Укажите этот флаг после этих параметров, чтобы также применить патч. -
--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, выполнивgitapply--directory=modules/git-gui. -
--unsafe-paths -
По умолчанию патч, затрагивающий файлы за пределами рабочей области (рабочего дерева, контролируемого Git, либо текущего рабочего каталога, если
gitapplyиспользуется вместо GNUpatch), отклоняется как ошибочный (или злонамеренный).Если
gitapplyиспользуется как «улучшенная версия GNUpatch», пользователь может указать параметр--unsafe-paths, чтобы обойти эту проверку безопасности. Этот параметр не действует, если используется--indexили--cached. -
--allow-empty -
Не возвращать ошибку для патчей, не содержащих diff. К ним относятся пустые патчи и патчи, содержащие только текст коммита.
Настройка
Всё содержимое этого раздела ниже данной строки выборочно включено из документации git-config[1]. Оно совпадает с содержимым соответствующего раздела:
-
apply.ignoreWhitespace -
Если установлено значение
change, указываетgitapplyигнорировать изменения пробельных символов так же, как при использовании параметра--ignore-space-change. Если задано одно из значенийno,none,never,false, указываетgitapplyучитывать все различия в пробельных символах. -
apply.whitespace -
Указывает
gitapply, как обрабатывать пробельные символы, так же, как при использовании параметра--whitespace.
Подмодули
Если патч содержит изменения подмодулей, git apply обрабатывает их следующим образом.
Если указан --index (явно или неявно), коммиты подмодулей должны в точности совпадать с индексом, чтобы патч можно было применить. Если какие-либо подмодули извлечены в рабочее дерево, эти извлечённые копии полностью игнорируются: не требуется, чтобы они были актуальными или чистыми, и они не обновляются.
Если --index не указан, коммиты подмодулей в патче игнорируются; проверяется только наличие или отсутствие соответствующего подкаталога, который при возможности обновляется.
См. также
apply
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-apply