Введение

Утилита Unix для внесения изменений в текстовые файлы

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

История

Оригинальная программа патчей была написана Ларри Уоллом (который впоследствии создал язык программирования Perl) и опубликована в группах новостей mod.sources (которые позже стали comp.sources.unix) в мае 1985 года.

Программа patch была включена в стандарт XPG4, который позже стал POSIX. Код Уолла по-прежнему является основой программ "patch", предоставляемых в OpenBSD, FreeBSD и schilytools. Фонд открытого программного обеспечения (Open Software Foundation), который объединился с The Open Group, предположительно поддерживал производную версию. Проект GNU/FSF поддерживает свою версию patch, ответвлённую от версии Ларри Уолла. Репозиторий отличается от репозитория GNU diffutils, но документация ведётся совместно.

Контекст использования

Разработанный программистом для других программистов, патч часто использовался для обновления исходного кода до более новой версии. Из-за этого многие стали ассоциировать патчи с исходным кодом, хотя патчи могут применяться к любому тексту. Файлы, к которым применён патч, не накапливают лишний текст, что некоторым может показаться из-за значения слова "patch" в английском языке; патч способен удалять текст так же, как и добавлять его. Патчи, описанные здесь, не следует путать с бинарными патчами, которые, хотя и могут быть концептуально похожи, распространяются для обновления бинарных файлов, составляющих программу, до новой версии.

Патчи в разработке программного обеспечения

Файлы diff, используемые в качестве входных данных для patch, представляют собой читаемые текстовые файлы, что позволяет легко просматривать и изменять их вручную перед применением. Помимо программы "diff", файлы diff могут генерироваться и другими программами, такими как Subversion, CVS, RCS, Mercurial и Git. Патчи являлись ключевым компонентом многих систем контроля версий, включая CVS.

Усовершенствованные различия

При использовании более продвинутых диффов, патчи можно применить даже к файлам, которые были изменены в это время, если эти изменения не конфликтуют с патчем. Это достигается с помощью "контекстных диффов" и "унифицированных диффов" (также известных как "унидиффы"), которые окружают каждое изменение контекстом – текстом, непосредственно предшествующим и следующим за измененной частью. Затем программа patch может использовать этот контекст для определения области, которую нужно изменить, даже если она смещена изменениями, внесенными ранее в файле, используя номера строк в диффе в качестве отправной точки. Благодаря этому свойству, контекстные и унифицированные диффы являются предпочтительным форматом патчей для отправки во многие проекты разработки программного обеспечения. Вышеописанные возможности делают diff и patch особенно популярными для обмена изменениями в программном обеспечении с открытым исходным кодом. Сторонние разработчики могут загрузить последнюю общедоступную версию исходного кода, внести в нее изменения и отправить их в виде диффов команде разработчиков. Используя диффы, команда разработчиков может эффективно проверять патчи перед их применением и применять их к более новой кодовой базе, чем та, к которой имел доступ сторонний разработчик.

Порты патча

Первоначально разработанный для Unix и Unix-подобных систем, patch также был портирован на Windows и многие другие платформы. Порты patch для Windows предоставляются GnuWin32 и UnxUtils. Команда patch также входит в состав ASCII MSX DOS2 Tools для MSX DOS версии 2.