Lucrul cu patch-urile - linux

Lucrul cu patch-uri

În lumea Linux, câteva programe diff și patch sunt utilizate pe scară largă. diff creează un fișier în care diferențele sunt înregistrate între 2 fișiere sau 2 directoare (așa-numitul patch), iar patch-ul vă permite să "suprapuneți" acest patch, adică Având un patch și unul dintre cele două fișiere (directoare), obțineți unul. Principala aplicație a acestor programe este crearea, distribuirea și aplicarea de patch-uri la codul sursă al programelor. De exemplu, am găsit o eroare în. program și după ce a studiat codul sursă a dat seama că pentru a remedia această eroare, adăugați 2 linii, iar în altul pentru a schimba câteva caractere. Vreau să le spun dezvoltatorului despre asta, dar cum să-i spun schimbările necesare? Puteți face acest lucru în limba obișnuită, dar este mult mai bine (și mai convenabil pentru amândoi) să facem un patch și să îl trimitem dezvoltatorului.







Sau un alt exemplu. Kernel-ul Linux, ambalat în .tar.bz2, cântărește mai mult de 30MB, indiferent de versiunea sa. Dar diferențele de fișiere între versiunile 2.6.6 și 2.6.7, ambalate în .bz2, cantareste doar 3 MB, astfel încât pentru a obține sursa kernel-ului 2.6.7 din sursa de kernel 2.6.6 doar 3 MB este suficient pentru a descărca, nu de pompare din nou, toate cele 32 de MB.

Cu toate acestea, de multe ori trebuie doar să vă uitați la diferențele de 2 fișiere aproape identice, și pentru aceasta este de asemenea convenabil să utilizați diff, afișând rezultatul muncii sale nu într-un fișier, ci direct pe ecran.

Acum, să vedem în practică activitatea acestor utilități. Luați un fișier text și faceți o copie a acestuia, apoi editați această copie - ștergeți 1-2 linii, adăugați ceva, modificați doar câteva linii. Apoi rulați diff oldfile newfile. Obțineți fișierul diferențial în formatul obișnuit. Afișează numai rânduri modificate, iar modificările sunt marcate cu simboluri <и> (ceea ce înseamnă că linia corespunzătoare aparține fișierului din stânga sau din dreapta din linia de comandă). Acest format este potrivit numai pentru studierea persoanei cu mici diferențe între două fișiere. Pentru a crea patch-uri, utilizați alte formate de ieșire specificate prin opțiuni suplimentare, în timp ce rezultatul diff este redirecționat către fișierul de patch-uri prin intermediul instrumentelor shell standard.







Adăugați comutatorul -u la linia de difere a apelului. Acum, rezultatul programului va fi un patch într-un format unificat, care este utilizat în majoritatea cazurilor (există și un format contextual inclus în opțiunea -c, dar este folosit mult mai puțin frecvent). Acest patch conține, de asemenea, mai multe șiruri neschimbate în vecinătate (așa-numitul context), care ajută programul patch-ului să găsească un loc în fișierul în care sa produs schimbarea. Liniile adăugate în al doilea fișier sunt marcate cu plusuri, șterse - minusuri. Dacă linia sa schimbat, este afișată de 2 ori - vechea versiune cu minus și cea nouă cu un plus. În plus, la început este adăugat un antet, care specifică numele și datele schimbării ambelor fișiere.

diff vă permite să faceți o distincție între două directoare. Acest lucru este folosit, de regulă, pentru a obține un patch comun pentru întregul arbore sursă al programului dacă au fost modificate mai multe fișiere. Pentru a face acest lucru, se utilizează tastele -urN, iar în loc de 2 fișiere sunt specificate numele celor 2 directoare (vechi și modificate). În acest caz, situația cu fișiere create / șterse este tratată corect (fișierul care lipsește într-unul din directoare este considerat existent și gol).

Pentru a aplica un patch, trebuie să mergeți la directorul unde este localizat vechiul fișier / director și să executați comanda

Atunci când se utilizează patch-uri la directoare, de obicei, face acest lucru: un plasture este creat, așa cum este descris mai sus (în timp ce titlurile patch-uri pentru fișiere individuale calea pentru el să înceapă cu un nou nume de director), și aplicat într-un catalog variabil. Atunci comanda va arata astfel:

patch-p1 <файл_патча

Aici, -p1 înseamnă că directorul de pornire ar trebui să fie eliminat din antetele de patch-uri. Voi explica toate acestea cu un exemplu. Avem un copac sursă 2.6.0. Acesta este directorul linux-2.6.0, care conține driverele directoare, arcul etc. Și avem un patch până la versiunea 2.6.1, care conține astfel de anteturi:

Vedem că atunci când creați un patch, directoarele vechi și noi au fost numite a și b, respectiv. La noi, directorul este chemat într-un alt mod, iar patch-ul nu poate face nimic. Așa că mergem la directorul linux-2.6.0 și executăm comanda de mai sus. Acum, rubricile vor fi interpretate ca

iar plasturele se va aplica în mod normal.







Articole similare

Trimiteți-le prietenilor: