frunze galben - articol - Comenzi de utilizare dif și patch-uri

Comenzi dif patch-uri și reprezintă o combinație puternică. Ele sunt adesea folosite pentru a obține diferența dintre fișierele originale și actualizate, astfel încât alte persoane care au doar doar fișierele originale le pot actualiza folosind fișierele care conțin numai diferența. Acest articol ilustrează principiile de bază ale utilizării acestor comenzi.

Folosind dif pentru a crea un patch simplu

Cel mai simplu exemplu de utilizare a comenzii dif - obtinerea diferențele dintre două fișiere, un original și actualizat. Puteți, de exemplu, a scrie cuvinte ca text simplu, pentru a face orice modificări, și de a salva modificările în al doilea fișier. Acum puteți compara aceste două fișiere folosind comanda dif:

Desigur, este necesar să se înlocuiască originalfile și updatedfile nume de fișiere corespunzătoare. Rezultatul ar trebui sa arate ceva de genul asta:

Notă: Pentru a demonstra crearea unui plasture simplu, am folosit fișierul original care conține șirul „Acestea sunt câteva cuvinte.“, Iar imaginea care conține șirul „Acestea încă mai sunt doar câteva cuvinte.“ Puteți crea aceste fișiere le, dacă doriți să rulați din articol și pentru a obține același rezultat.

1C1 arată numărul liniei și faptul că aceasta trebuie să fie făcut. Rețineți că pot exista mai multe linii (de exemplu, 12,15, ceea ce înseamnă că, la linia 12 la linia 15). Simbolul „C“ indică faptul că patch-ul va înlocui acea linie. Există alte două personaje: „o“ și „d“. Ei înseamnă "add" (add) și "șterge", respectiv (șterge). Astfel, următoarea sintaxă: (numărul liniei sau interval) (c, a sau d) (numărul liniei sau interval), dar atunci când este utilizat „un“ sau „d“, una dintre piesele (numărul liniei sau interval) poate Acesta conține doar un singur număr de linie.

Când se utilizează „c“, numerele de linie de pe stânga - este o linie în fișierul original, care trebuie să fie înlocuite cu linii care sunt în patch-uri, precum și numărul de linii pe dreapta - este o linie care trebuie să fie patch-uri de fișiere.

Când utilizați „a“, numărul la stânga nu poate fi decât un singur număr de linie, care arată în cazul în care trebuie să adăugați o linie la versiunea patch-uri de fișier și linie numerele la dreapta - este o linie care trebuie să fie patch-uri de fișiere.

Când se utilizează „d“, numerele de linie de pe stânga - un șir de caractere pentru a fi eliminate pentru a obține versiunea patch-uri a numărului de fișiere și linia de pe dreapta poate fi doar un singur număr de linie, care arată în cazul în care linia va fi în fișierele de patch-uri în cazul în care acestea sunt șterse. S-ar putea crede că ultimul număr nu este necesară, dar nu uitați că plasturele poate fi aplicat pentru restabilirea fișierului original. Acest lucru va fi explicat mai târziu.

semneze "<" означает, что патч должен удалить символы после этого знака, а знак ">. „Înseamnă că personajele după acest semn ar trebui să fie adăugat atunci când este necesar pentru a înlocui un șir de caractere (“ c „între numerele rândurilor), veți vedea ambele semne: și“<", и ">„Atunci când este necesar să se adauge o linie (“ o «între numerele rândurilor), veți vedea doar semnul»> „iar atunci când este necesar pentru a elimina linia (“ d «între numerele rândurilor), veți vedea doar semnul»<".

Șirul „\ Nu NEWLINE la sfârșitul fișierului“ a apărut din cauza faptului că nu am apăsat Enter după cuvântul tastat. Se consideră formă bună pentru a termina textul printr-o linie goală. Unele programe au nevoie de ea pentru a lucra. Prin urmare, această linie a apărut după comanda dif. Adăugați o linie goală la sfârșitul fișierului, și de a obține o ieșire mai scurtă de dif:

După cum probabil ați observat, nu am explicat ce se înțelege prin 3 „-“ semn. Ei înseamnă sfârșitul siruri de caractere, care trebuie să fie înlocuite, iar începutul liniei pe care este necesar să se înlocuiască. Separarea liniilor vechi și noi. Veți vedea un semn numai la înlocuirea ( „c“ între numerele de linie).

Din nou, nu uitați să înlocuiți și originalfile updatedfile numele fișierelor relevante. Probabil știți că opțiunea bash „>“ funcționează cu toate echipele. Aceasta este o caracteristică foarte utilă.

Utilizarea unui plasture simplu pe care l-am creat

Putem folosi un patch care tocmai a creat pentru a obține actualizate din fișierul original. Pentru a face acest lucru, copiați fișierul original și patch-uri în același loc. Și apoi aplicați patch:

Desigur, aici este necesar să se schimbe numele fișierelor de pe necesare. Dacă totul merge bine, ar trebui să obțineți un fișier care este identic cu actualizarea. Puteți verifica acest lucru utilizând comanda dif cu opțiunea „-s“:

Înlocuiți textul între [i] cu calea către fișierul original. De exemplu, dacă fișierul actualizat pe care l-ați utilizat pentru a crea patch-ul este în directorul părinte al actualului Witzlaus, a „[/ calea / a / a / originalul / updatedfile]“ ar trebui să fie înlocuit cu „..“ (bash înțelege ca directorul părinte al curentului ). Și, desigur, este necesar să se modifice numele fișierelor de pe dreapta.

Felicitări! În cazul în care dif raportat că fișierele identice le-ați creat doar cu succes și au aplicat patch-uri! Cu toate acestea, formatul de patch-uri, pe care le-am folosit pur si simplu nu este singurul. În capitolul următor ne vom uita la un alt format de patch-uri.

În primul capitol am creat un plasture utilizând formatul normal de comandă dif. Cu toate acestea, acest format nu oferă dependență de context, și de a folosi întreaga linie. Creați un patch pentru același fișier, dar utilizând formatul kontektsny:

Rezultatul va fi următorul:

După cum puteți vedea aici, inclusiv numele fișierului. Acest lucru înseamnă că nu trebuie să-l introduceți în timp ce aplicați plasturele. În continuare este data și ora ultimei modificări. linia 15, „*“ indică începutul schimbărilor. Ele arată că este necesar să se facă următorul bloc de text. Două camere 1 - „!“, Un număr de rânduri (aici, de asemenea, poate fi doar câteva linii), și Aceasta înseamnă că linia trebuie să fie înlocuit. Linia cu „!“ „!“ - în fața a trei „“ ar trebui să fie înlocuit cu un al doilea șir care vine după trei, „-“ (Bineînțeles că nu vor fi incluse;. Acest format sintaxă context). După cum puteți vedea, nu există nici un semn de „c“, „o“ și „d“ .Deystvie care trebuie făcut este determinată de simbolul de la începutul liniei. "!" Aceasta înseamnă că înlocuirea. Alte personaje - "+", "-" și "" (spațiu). „+“ Înseamnă a adăuga, „-“ înseamnă eliminarea, și „“ înseamnă că nu face nimic: Patch-l folosește pentru a vă asigura că este corectă o parte a modificărilor de fișiere.

Aplică acest patch este mai ușor: în aceleași condiții ca și pentru plasturele anterior (scrie de ieșire dif într-un fișier, apoi copiați patch-uri și originalul în același loc), trebuie să executați următoarea comandă:

S-ar putea crede acum: de ce avem nevoie pentru a specifica noul nume de fișier? Acest lucru trebuie făcut, din cauza faptului că patch-uri încearcă să schimbe fișierul existent, mai degrabă decât a crea una nouă. Acest lucru este util atunci când creați un patch pentru mai multe fișiere simultan. Acest lucru ne conduce la următoarele obiective: crearea de patch-uri la arborele de fișiere. Să examinăm acest lucru în capitolul următor.

Diferențele de pregătire între mai multe fișiere

Cel mai simplu mod de a obține diferențele dintre mai multe fișiere - este de a le pune într-un singur director și rulați comanda dif la directorul în întregime. Puteți trece pur și simplu dif comanda cu un nume de directoare în loc de nume de fișiere:

Notă: Dacă directorul are un subdirector, este necesar să se folosească opțiunea „-r“.

Ca urmare, ar trebui să obțineți ceva de genul:

După cum puteți vedea, formatul obișnuit conține numai numele fișierelor și modifica linia.

Acum vom folosi formatul de context:

Primul lucru pe care ar trebui să observați - este de a crește dimensiunea; Formatul de context conține mai multe informații decât în ​​mod normal. Acest lucru nu a fost evident în primul Premera, pentru că nu a existat nici un context. Acum, cu toate acestea, contextul este, în detrimentul dimensiunii sale de patch-uri a crescut. Mai mult decât atât, probabil ați observat că numele fișierului se repetă de două ori. Acest lucru poate fi făcut pentru a face mai ușor de înțeles atunci când a început să patch-uri fișierul următor sau pentru a oferi o recuperare mai bună.

O altă modalitate de a obține diferența între între mai multe fișiere - este de a scrie un script care efectuează comanda dif de mai multe ori și adaugă rezultatul unui singur fișier. Nu vom lua în considerare această metodă pentru a pune toate fișierele dintr-un director mult mai ușor.

Creați un patch a fost ușor, dar utilizarea de directoare pune următoarea problemă: în cazul în care plasturele schimba numai fișierele corespunzătoare bedut în directorul curent, sau se va folosi calea corespunzătoare în fișierul? Pentru a afla, a se vedea capitolul următor!

Aplicarea patch-uri la mai multe fișiere

În capitolul precedent am creat un patch pentru mai multe fișiere, utilizați următoarea comandă:

Notă: vom folosi formatul de patch-uri contextuale, din moment ce acest lucru este de rigoare.

Acum trebuie să utilizați plasturele rezultat. Copiați directorul original și patch-uri undeva și folosiți următoarea comandă:

Cu toate acestea, există o eroare care nu puteți găsi fișierele de patch-uri. Echipa încearcă să găsească FIȘIER1 fișierul în directorul curent (implicit, plasturele elimină tot drumul în fața numelui fișierului). Și koneno fișier nu este, așa cum am încerca să actualizeze fișierele din directorul originaldirectory. Prin urmare, avem nevoie pentru a face un patch pentru a utiliza calea completă. Acest lucru se face după cum urmează:

Notă: Ați putea crede că vă puteți muta pur și simplu și să înceapă patch-uri originaldirectory. Dar nu este așa! Deci nu ar trebui să facă: dacă în plasturele conține un subdirector, acesta le va căuta în directorul de lucru, și nu vor, sau nu vor ei. Utilizați opțiunea „-p“, pentru a face aspectul patch-uri pentru fișierele din subdirectoare.

Opțiunea „-p“, spune patch-uri cât de multe slash-uri (inclusiv ceea ce este în fața lor, de obicei, un director) trebuie să fie tăiate înainte de numele fișierului (rețineți că atunci când se utilizează opțiunea „-p0“, patch-ul va fi pentru a căuta fișiere și originaldirectory și updateddirectory) .La am stabilit 0, acest lucru înseamnă că nu este necesar să se elimine modul, dar puteți pune 1 pentru a elimina prima bară oblică, sau 2, pentru a îndepărta cele două slash-uri, etc. Acest lucru poate fi util dacă este utilizat într-un plasture în cazul în care structura de directoare, care este diferită de a ta. De exemplu, în cazul în care structura de directoare utilizată în plasture:

Trebuie doar să conta numărul de linii oblice (/ (1) acasă / (2) numele de utilizator / (3) surse / (4) / program (5)) și pentru a transfera acest număr la optsie "-p". Dacă utilizați „P5“, patch-ul va fi căutat în originaldirectory / fișier1 și updateddirectory / fișier1. Nu uitați că patch-ul adresele două slash reciproc (ca în / home / username // surse) ca unul. Acest lucru se datorează faptului că, uneori, script-uri de patch-uri adaugă un slash în plus între directoare.

Restaurarea fișierul original al peticite

Uneori este necesar să restaurați fișierul original al peticite. De exemplu, în cazul în care o eroare este conținută în ea. Pentru a face acest lucru, utilizați opțiunea „R“:

De obicei, această operațiune are loc fără erori, și le-ați luat fișierul original. Dar este mai bine, în orice caz, pentru a face o copie de rezervă înainte de restabilirea a fișierelor.

Există o altă diferență format de ieșire de comandă dif: format uniform. Este mult mai compact, deoarece conține linia de context mai mici. Cu toate acestea, ea este susținută doar de dif GNU și patch-uri. Dacă îl utilizați, trebuie să fiți sigur că utilizatorii care au folosit patch-uri, patch-uri GNU. Linux permite utilizarea acestui format.

Formatul unificat este similar cu contextul, dar nu este același lucru. Patch-ul este în format unificat pot fi create după cum urmează:

Rezultatul va fi seduyuschy:

După cum puteți vedea, numerele de linie sunt între „@“. În plus, există un spațiu suplimentar după „+“ sau „-“. Acest lucru economisește câțiva octeți. O altă diferență: într-un format unitar, nu există nici un semn special pentru înlocuire. El pur și simplu îndepărtează vechea linie ( „-“) și adaugă un nou ( „+“). Diferența dintre aceste acțiuni este faptul că înlocuirea utilizat același număr de linie, și atunci când scoateți și adăugarea de diferite.

Citind despre cele trei formate diferite, probabil te gandesti: ce să aleg? Iată o comparație rapidă:

Formatul normală este cel mai compatibil. Orice comenzi, cum ar fi dif / patch-uri ar trebui să-l înțeleagă. dezavantaj - este lipsa de context.

Format context pe scară largă, dar nu toate echipa sa inteleaga. Avantajul său în contextul stocului.

Formatul unificat include, de asemenea, contextul, și, astfel, mai compact. Dar acceptă numai dif GNU și patch-uri.

Dacă sunteți sigur că plasturele va fi utilizat numai pentru utilizatorii cu dif GNU / patch-uri, cel mai bine este de a alege un format standardizat, deoarece este mai compact. În cele mai multe alte cazuri, cea mai bună alegere - este un format de context. Formatul normal ar trebui să fie utilizat în cazul în care sunteți sigur că utilizatorul va aplica comenzile de patch-uri care nu suportă formatul de context.

Modificarea numărului de linii de context

Puteți face comanda dif incluse în numărul senshee patch-uri de linii de context decât ar trebui să fie. În patch-uri mari de Sillon se poate reduce dimensiunea sa. Cu toate acestea, dacă vom reduce numărul de linii de context, care ar putea duce la inoperabilitate de patch-uri. Citate din referinte GNU dif: „Pentru majoritatea operațiunilor în plasture trebuie să fie de cel puțin două linii de context.“

Kontestnyh Indicați numărul de rânduri în mai multe moduri:

Dacă utilizați formatul de context hotit, puteți puteti combina, se adaugă „-C“ opțiune. exemplu:

] $ Diff -C2 originaldirectory / updateddirectory /

Comanda anterioară va folosi formatul de context, cu două linii de context.

Dacă utilizați formatul de context hotit, puteți puteti combina, se adaugă „-U“ în opțiunea. exemplu:

] $ Dif -U 2 originaldirectory / updateddirectory /

Urmatoarea echipa va folosi un format unitar cu două linii de context.

Dacă nu specificați ce format doriți să utilizați comanda va arata ceva de genul:

] $ Diff -2 originaldirectory / updateddirectory /

Cu toate acestea, acest lucru va funcționa numai dacă definiți formatul. Trebuie să utilizați această opțiune sau „-c“ sau „U“.