от S.Karadjov(19-01-2001)

рейтинг (17)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Какво е това пач
Пач(patch) идва от англииската дума patch - означаваща кръпка, а като глагол- скърпвам, изглаждам. В компютърния свят пачовете се свързват с корекции на дадена програма, обикновено с цел  да работи тя по-добре или  да и се добавят нови възможности. Пачовете са и едно много ефикасно решение, предложено от създателя на Perl - Лари Уол, за пренасяне само на необходимата част нужна за коригирането на дадена програма, вместо цялата нова версия на програмата.

Как да си направите сами "кръпка"
Нужно е единствено да имате програмата "diff" за Unix/Linux или нейна адаптирана версия за конкретната операционна система, която използвате. Целта на програмата "diff" е да показва различието между два файла или две директории. Нека видим как работи програмата при сравнението на два файла. За нашият пример ще използваме файлът old.pl със следното съдържание

#!/usr/local/perl

print "Здрасти Фенове";

и файлът new.pl, който изглежда така
#!/usr/local/perl

print "Здрасти linux-bg Фенове";

Стартирането на командата

diff old.pl new.pl

ще изведе следният резултат не екрана
3c3
< print "Здрасти Фенове";
\ No newline at end of file
---
> print "Здрасти linux-bg Фенове";
\ No newline at end of file

Резултатът от операцията може да има няколко формата, от които важни са context и unified. Задаването на това, кой формат да използвате става посредством опцията -c за context и -u за unified. Тези опции дават информация за файловете с които боравим. Не знам, кой от двата формата е за предпочитане, аз лично използвам unified но това едва ли е от голямо значение.

За да запишете промените е нужно да пренасочите изхода към файл. Това става по следния начин

diff -u old.pl new.pl > test.patch

Където файлът test.patch представлява кръпката, която е необходима за да се "поправи" файлът old.pl до състоянието на new.pl. По този начин вие направихте вашата първа "кръпка".

Освен да се сравняват файлове може да се сравнява и съдържанието на файловете в две директории, както и евентуално и техните под-директории. Ако има две под-директории на  директорията src, с имена new.dir и old.dir.

+--src/
        +--new.dir/
        +--old.dir/

За да сравним тяхното съдържание е необходимо да се напише следната команда(от src директорията)

diff -Naur news.dir old.dir

Забележете, че при задаването на директориите не се пишат "/". Опцията "r" инструктира командата diff да сравни и съдържанието на под-директориите на двете директории. С опцията "a" указвате, че файловете които сравнявате ще се третират като текстови файлове, дори и да не са такива. "N" опцията инструктира diff, когато сравнява файл от едната директория с файл, който не присъства във втората директория, да смята несъществувашия файл за съществуващ, само че с нулева дължина. В зависимост от областта на промените сами решавате дали да правите пачове на цели директории или само на даден файл.

Често се налага да изключвате някой, или няколко файла от сравнението. Това става с опцията -x. Ако искате да изключите от сравненито файлове с разширениe .txt е нужно да напишете

diff -x *.txt  -Naur news.dir old.dir

По някога файловете, които сравнявате, могат да  имат незначителни различия в броя на интервалите например. За да не се  вземат тези промени в предвид използвайте опцията --ignore-brackets. Аналогично и за игнориране на различия между малки и големи букви се използва опцията --ignore-case.

Тези напътствия са ви напълно достатъчни за да правите "кръпки". Ако все пак искате на научите нещо повече, прочетете ръковоството на diff командата. За новаците -- става с комадата командата

man diff

Как да приложите "кръпката"
Не е достатъчно да знаете само  как  да направите кръпка. Важно е да знете и  как да я приложите. Това става с командата "patch". Най-често командата се използва по следния  начин

patch -p0 < test.patch

където test.patch е името на вече създаденената кръпка.  Единствената опция, която използвахме по-горе е -p[номер]. За какво служи тя? Често когато сравнявате файлове те се записват с пълните си имена. Разгледайте една кръпка и ще видите нещо подобно:

++ /usr/local/test/src/old.dir/file1.pl
-- /usr/local/test/src/new.dir/file1.pl

Ако искате да се изполва името на програмата от първата наклонена черта "/" до края използвайте -p0. Ако искате от първата наклонена черта до края пишете -p1 резултатът от което е local/test/src/old.dir/file1.pl. Ако искате самото име на файла, без пътя, пишете -p без параметри. В нашия случай резултата е file1.pl.

Когато прилагате кръпката, може да кажете на програмата да запазва "закърпените" файлове. Това с става с опцията --backup или -b. Може също така да избере с какво разширение да се записват копията на тези файлове. Става с опцията --suffix=.bak, ако примерно искате разширението да е .bak.

Програмата patch сама се опитва да разбере кой формат сте използвали за създаване на вашата кръпка. Можете, ако искате, изрично да посочите формата: -c за context или -u за unified.

Повече информация за patch, както и за допълнителни опции

man patch
 

Ако сте прочели всичко до тук внимателно има голяма вероятност да започнете скоро да правите и прилагате собствени кръпки.

Успех!


<< С Java и Linux на път | GNOME на български >>