У меня есть приложение, foobar
для которого кто-то написал патч для добавления функции, которая мне нравится. Как я могу использовать патч?
У меня есть приложение, foobar
для которого кто-то написал патч для добавления функции, которая мне нравится. Как я могу использовать патч?
Ответы:
Патчи обычно содержатся в .diff
файлах, потому что патчи создаются с помощью diff
команды.
Патч - это серия вставок и удалений в исходный код. По этой причине, чтобы использовать патч, вы должны собрать приложение (например, «foobar») из исходного кода после применения патча. Итак, по шагам:
1. Получите исходный пакет для foobar .
В большинстве дистрибутивов linux (nb patching не является уникальным для linux) есть «исходные пакеты», которые вы можете использовать для этой цели, но, поскольку они неоднородны, здесь я буду ссылаться только на формат исходного кода. Первоначальный источник не является частью дистрибутива и может быть трудно найти. Хорошее место для начала - это Википедия, в которой есть статьи для многих популярных приложений, и статья должна содержать ссылку на домашнюю страницу с исходной загрузкой. Вы также можете гуглить себя, очевидно. Пакет с исходным кодом будет называться как-то так foobar.0.1.tar.bz2
. Распакуйте это - теперь у вас есть каталог с именем foobar.0.1
.
2. Добавьте патч.
Иногда исправления представляют собой отдельные файлы, а иногда они представляют собой набор из нескольких файлов. Скопируйте их в foobar.0.1
и cd foobar.0.1
. Далее вам нужно запустить patch
команду. Это считывает из стандартного ввода, поэтому вы хотите передать .diff
файл в файл. Сложная часть - определить, что использовать для -p
опции (если в патче нет инструкций). Для этого вам нужно взглянуть на начало файла патча. Например:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
В данном случае comm.c
это имя исходного файла, который будет изменен. Однако обратите внимание, что к нему добавлен каталог. Поскольку это не один и тот же каталог («старый» и «новый»), это большой признак того, что эта часть пути является ненужной (для наших целей). Назначение -p
переключателя (см. man patch
) Состоит в том, чтобы устранить этот префикс. Требуется число, которое является числом слешей ( /
) для удаления, со всем между ними; в этом случае мы будем использовать, -p1
чтобы уменьшить путь до простого comm.c
.
Предполагается, comm.c
что на самом деле находится в том же каталоге, что будет еще одним ключом к правильности вашей интерпретации. Если обе эти строки были src/comm.c
и comm.c
находятся на самом деле в src
подкаталоге вашего дерева сборки, то вам нужно использовать -p0
- будьте осторожны, если не использовать -p
вообще, удалит ВСЕ косые черты. Если путь абсолютен (т. Е. Начинается с /
), это, вероятно, то, что вы хотите. Теперь примените патч:
patch -p1 < patch.diff
Источник теперь был изменен. Если есть еще .diff
файлы, примените их таким же образом.
3. Сборка и установка.
Это нормальный процесс , вы бы пройти , чтобы построить что - то из источника - первый ./configure
, то make
, make check
, make install
. Перед тем, как сделать последний, если у вас уже есть существующая установка foobar
, решите, хотите ли вы удалить или перезаписать это, или как вы собираетесь бороться с конфликтом имен. Вы, вероятно, хотите foobar
сослаться на свою новую исправленную версию, а не на старую.