Patch (Unix): различия между версиями
[непроверенная версия] | [непроверенная версия] |
EmausBot (обсуждение | вклад) м Перемещение 13 интервики-ссылок в Викиданные (d:Q300846) |
EvRubot (обсуждение | вклад) м Исправление некорректной викиссылки |
||
Строка 26: | Строка 26: | ||
$ diff -u старый_файл новый_файл > разница.diff |
$ diff -u старый_файл новый_файл > разница.diff |
||
# ключ -u командует diff выдавать разницу в т.наз. стандартном ("унифицированном") формате |
# ключ -u командует diff выдавать разницу в т.наз. стандартном ("унифицированном") формате |
||
Чтобы применить полученный патч, наберите в командной строке: |
Чтобы применить полученный патч, наберите в командной строке: |
||
Строка 63: | Строка 63: | ||
* [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}} |
Версия от 07:00, 11 декабря 2013
patch | |
---|---|
Тип | утилита UNIX[вд] |
Разработчики | Andreas Gruenbacher, Jim Meyering |
Операционная система | Кроссплатформенное программное обеспечение |
Первый выпуск | 1985 |
Аппаратная платформа | кроссплатформенность |
Последняя версия | 2.7 (12 сентября 2012) |
Репозиторий | git.savannah.gnu.org/git… |
Лицензия | GPL |
Сайт | savannah.gnu.org/projects/patch/ |
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 и UnxUtils, а также в среде Cygwin.
См. также
- diff
- Патч
- quilt
- rsync
- Программы UNIX-подобных операционных систем
- IEBUPDTE — аналог программы patch, созданный примерно на 20 лет раньше (предположительно в 1964 году).
Внешние ссылки
patch(1)
: применение файла различий (diff) к оригиналу — страница справки man по пользовательским командам GNU/Linux (англ.)- Patchutils — Дополнительные программы для работы с патчами
- GNU tools for Win32 — Win32-порт утилит GNU, включая diff и patch
- diffstat — выдача статистики на основе вывода утилиты diff