Як застосувати програмні виправлення?


15

У мене є додаток, foobarдля якого хтось написав виправлення, щоб додати функцію, яка мені подобається. Як я можу використовувати патч?

Відповіді:


21

Патчі зазвичай містяться у .diffфайлах, оскільки патчі створюються за допомогою diffкоманди.

Патч - це серія вставок та видалень у вихідний код. З цієї причини, щоб використовувати патч, ви повинні побудувати додаток (наприклад, "foobar") з джерела після застосування патчу. Отже, поетапно:

1. Отримайте вихідний пакет для foobar .

Більшість дистрибутивів Linux (nb-виправлення не є унікальним для 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посилатися на нову, виправлену версію, а не на стару.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.