Patch (Unix): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 18: Строка 18:
В то время как исходным предназначением программы был перенос различий между версиями файлов программ (так, что программист, внесший в свою программу полезные изменения, мог поделиться этими изменениями с другими программистами, использующими предыдущие версии кода), patch может использоваться для переноса различий между любыми двумя текстовыми файлами, включая, но не ограничиваясь, программную документацию, html-файлы и т. д.
В то время как исходным предназначением программы был перенос различий между версиями файлов программ (так, что программист, внесший в свою программу полезные изменения, мог поделиться этими изменениями с другими программистами, использующими предыдущие версии кода), patch может использоваться для переноса различий между любыми двумя текстовыми файлами, включая, но не ограничиваясь, программную документацию, html-файлы и т. д.


«Файлы правок», или «патчи», или, неформально, «заплатки», используемые утилитой patch («patch files», «patches»), являются текстовыми файлами специального формата. В отличие от них, существуют также бинарные файлы сходного назначения, однако последние, как правило, не имеют ничего общего с утилитой patch и связаны с задачами внесения изменений в бинарные (нетекстовые) файлы, в т. числе — исполняемые файлы программ.
«Файлы правок», или «патчи», или, неформально, «заплатки», используемые утилитой patch («patch files», «patches»), являются текстовыми файлами специального формата. В отличие от них, существуют также бинарные файлы сходного назначения, однако последние, как правило, не имеют ничего общего с утилитой patch и связаны с задачами внесения изменений в бинарные (нетекстовые) файлы, в том числе — исполняемые файлы программ.


== Пример использования ==
== Пример использования ==
Строка 30: Строка 30:
$ patch < разница.diff
$ patch < разница.diff


Выполнение последней команды перенесет разницу из нового файла в старый, обновив старый файл. (Если старый файл не будет найден по заданному пути, программа выдаст ошибку.)
Выполнение последней команды перенесёт разницу из нового файла в старый, обновив старый файл. (Если старый файл не будет найден по заданному пути, программа выдаст ошибку.)


Патч можно «откатить», то есть отменить, передав программе patch ключ -R:
Патч можно «откатить», то есть отменить, передав программе patch ключ -R:
Строка 52: Строка 52:
* [[rsync]]
* [[rsync]]
* [[Программы UNIX-подобных операционных систем]]
* [[Программы UNIX-подобных операционных систем]]
* [[Программы мейнфреймов IBM#IEBUPDTE|IEBUPDTE]] — аналог программы patch, созданный примерно на 20 лет раньше (предположительно в 1964 году).
* [[Программы мейнфреймов IBM#IEBUPDTE|IEBUPDTE]] — аналог программы patch, созданный примерно на 20 лет раньше (предположительно в 1964 году).


== Ссылки ==
== Внешние ссылки ==
* {{man|1|patch||применение файла различий (diff) к оригиналу}}
* {{man|1|patch||применение файла различий (diff) к оригиналу}}
* [http://freshmeat.net/projects/patchutils/ Patchutils] — Дополнительные программы для работы с патчами
* [http://freshmeat.net/projects/patchutils/ Patchutils] — Дополнительные программы для работы с патчами
* [http://gnuwin32.sourceforge.net/ GNU tools for Win32] — Win32-порт утилит GNU, включая diff и patch
* [http://gnuwin32.sourceforge.net/ GNU tools for Win32] — Win32-порт утилит GNU, включая diff и patch
* [http://invisible-island.net/diffstat/ diffstat] — выдача статистики на основе вывода утилиты diff
* [http://invisible-island.net/diffstat/ diffstat] — выдача статистики на основе вывода утилиты diff


{{Команды Unix}}
{{Команды Unix}}

Версия от 16:17, 29 декабря 2015

patch
Скриншот программы patch
Тип утилита UNIX[вд]
Разработчики Andreas Gruenbacher, Jim Meyering
Операционная система Кроссплатформенное программное обеспечение
Первый выпуск 1985
Аппаратная платформа кроссплатформенность
Последняя версия
Репозиторий git.savannah.gnu.org/git…
Лицензия GPL
Сайт savannah.gnu.org/project…

patch — программная утилита Unix, предназначенная для переноса правок (изменений) между разными версиями текстовых файлов. Информация о правке обычно содержится в отдельном файле, называемом «правкой» или «файлом правки» (англ. patch file). Подобный файл, как правило, создается с помощью другой утилиты Unix — diff, позволяющей автоматически извлечь информацию о различиях в тексте файлов.

История

Оригинальная версия программы patch была написана будущим автором Perl Larry Wall (posted to mod.sources) . Сегодня программа patch является частью GNU проекта и поддерживается FSF.

Использование

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

«Файлы правок», или «патчи», или, неформально, «заплатки», используемые утилитой patch («patch files», «patches»), являются текстовыми файлами специального формата. В отличие от них, существуют также бинарные файлы сходного назначения, однако последние, как правило, не имеют ничего общего с утилитой patch и связаны с задачами внесения изменений в бинарные (нетекстовые) файлы, в том числе — исполняемые файлы программ.

Пример использования

Для создания патча, или файла правки, с помощью утилиты diff, выполните в командной строке:

 $ diff -u старый_файл новый_файл > разница.diff
 # ключ -u указывает программе diff выдавать разницу в так называемом "стандартном" ("унифицированном") формате

Чтобы применить полученный патч, выполните следующую команду:

 $ patch < разница.diff

Выполнение последней команды перенесёт разницу из нового файла в старый, обновив старый файл. (Если старый файл не будет найден по заданному пути, программа выдаст ошибку.)

Патч можно «откатить», то есть отменить, передав программе patch ключ -R:

 $ patch -R < разница.diff

Как правило, утилита patch способна правильно обновить файл и в том случае, когда он несколько изменился (например, был отредактирован в области, не перекрывающейся с областью применения текущей «заплатки»).

Для этого утилита patch использует «контекст» — несколько строчек, соседних с областью применения патча, хранящихся в файле правки наряду с другой информацией о замене.

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

Портирование (перенос на другие платформы)

Созданная для применения на Unix-системах, утилита patch была впоследствии перенесена на платформу Windows и некоторые другие. Версии patch для Windows можно найти в пакетах GnuWin32 и шаблон не поддерживает такой синтаксис, а также в среде Cygwin.

См. также

Ссылки

  • patch(1): применение файла различий (diff) к оригиналу — страница справки man по пользовательским командам GNU/Linux  (англ.)
  • Patchutils — Дополнительные программы для работы с патчами
  • GNU tools for Win32 — Win32-порт утилит GNU, включая diff и patch
  • diffstat — выдача статистики на основе вывода утилиты diff
  1. https://git.savannah.gnu.org/cgit/patch.git/tag/?h=v2.7.6