Com aplicar un pegat a un fitxer (i crear pegats) a Linux

El Linux pegat L'ordre us permet transferir els canvis d'un conjunt de fitxers a un altre conjunt de fitxers de forma ràpida i segura. Apreneu a utilitzar-lo pegat la forma senzilla.

Els comandes de patch i diff

Imagineu-vos que teniu un fitxer de text al vostre ordinador. Rebreu una versió modificada d'aquest fitxer de text d'una altra persona. Com es transfereixen ràpidament tots els canvis del fitxer modificat al fitxer original? Aquí és on pegat i dif entra en joc. pegat i dif es troben a Linux i altres sistemes operatius semblants a Unix, com ara macOS.

El dif L'ordre examina dues versions diferents d'un fitxer i enumera les diferències entre elles. Les diferències es poden emmagatzemar en un fitxer anomenat fitxer de pegat.

Elpegat L'ordre pot llegir un fitxer de pedaç i utilitzar el contingut com a conjunt d'instruccions. Seguint aquestes instruccions, els canvis al fitxer modificat es repliquen al fitxer original.

Ara imagineu que aquest procés passa a tot un directori de fitxers de text. Tot d’una tirada. Aquest és el poder de pegat.

De vegades no se us envien els fitxers modificats. Tot el que s’envia és el fitxer de pegat. Per què envieu dotzenes de fitxers quan podeu enviar un fitxer o publicar-ne un per facilitar-ne la descàrrega?

Què feu amb el fitxer de pegat per actualitzar els fitxers? A part de ser gairebé un trabuc de llengua, també és una bona pregunta. En aquest article us el guiarem.

El pegat l'ordre s'utilitza més sovint per a persones que treballen amb fitxers de codi font de programari, però funciona igual de bé amb qualsevol conjunt de fitxers de text sigui quin sigui el seu propòsit, codi font o no.

RELACIONATS:Com es comparen dos fitxers de text al terminal de Linux

El nostre escenari d’exemple

En aquest escenari, ens trobem en un directori anomenat treball que conté dos directoris més. Un es diu treball, i l’altra es diu últim. El directori de treball conté un conjunt de fitxers de codi font. L'últim directori conté la versió més recent d'aquests fitxers de codi font, alguns dels quals han estat modificats.

Per ser segur, el directori de treball és una còpia de la versió actual dels fitxers de text. No és l’única còpia d’ells.

Trobar les diferències entre dues versions d’un fitxer

El dif L'ordre troba les diferències entre dos fitxers. La seva acció per defecte és llistar les línies modificades a la finestra del terminal.

Es diu un fitxer argot.c. Compararem la versió del directori de treball amb la versió del directori més recent.

El -u (unificat) opció diu dif per llistar també algunes de les línies de text sense modificar abans i després de cadascuna de les seccions modificades. Aquestes línies s’anomenen línies de context. Ajuden a lapegat ordre localitzar amb precisió on s'ha de fer un canvi al fitxer original.

Proporcionem els noms dels fitxers perquè dif sap quins fitxers heu de comparar. Primer apareix el fitxer original i després el fitxer modificat. Aquest és l'ordre al qual emetem dif:

diff -u working / slang.c latest / slang.c

dif produeix una llista de sortida que mostra les diferències entre els fitxers. Si els fitxers fossin idèntics, no hi hauria cap sortida a la llista. Veure aquest tipus de sortida des de dif confirma que hi ha diferències entre les dues versions del fitxer i que el fitxer original necessita pegat.

Creació d'un fitxer de pegat

Per capturar aquestes diferències en un fitxer de pedaç, utilitzeu l'ordre següent. És la mateixa ordre que l'anterior, amb la sortida de dif redirigit a un fitxer anomenat slang.patch.

diff -u working / slang.c latest / slang.c> slang.patch

El nom del fitxer de pedaç és arbitrari. Podeu anomenar-lo com vulgueu. Donar-li una extensió ".patch" és una bona idea; tanmateix, ja que deixa clar quin tipus de fitxer es tracta.

Ferpegat actuar sobre el fitxer de pedaç i modificar el fitxer working / slang.c, utilitzeu l'ordre següent. El -u (unificat) opció permet pegat sàpiga que el fitxer de pedaç conté línies de context unificades. En altres paraules, hem utilitzat l'opció -u amb diff, de manera que fem servir el fitxer -u opció amb pegat.

pegat -u working.slang.c -i slang.patch

Si tot va bé, hi ha una única línia de sortida que us ho indica pegat està pegant el fitxer.

Fent una còpia de seguretat del fitxer original

Podem instruir pegat per fer una còpia de seguretat dels fitxers pegats abans de canviar-los mitjançant el fitxer-b (còpia de seguretat). El -i L'opció (d'entrada) indica al pedaç el nom del fitxer de pedaç a utilitzar:

 patch -u -b working.slang.c -i slang.patch 

El fitxer està pegat com abans, sense diferències visibles en la sortida. Tanmateix, si mireu la carpeta de treball, veureu que s’ha creat el fitxer anomenat slang.c.orig. Els segells de data i hora dels fitxers mostren que slang.c.orig és el fitxer original i slang.c és un fitxer nou creat per pegat.

Ús de diff Amb directoris

Podem utilitzar dif per crear un fitxer de pedaç que contingui totes les diferències entre els fitxers de dos directoris. Després podem utilitzar aquest fitxer de pedaç amb pegat per aplicar aquestes diferències als fitxers de la carpeta de treball amb una sola ordre.

Les opcions que farem servir dif són els -u (context unificat) que hem utilitzat anteriorment, l'opció -r (recursiva) opció per fer dif busqueu qualsevol subdirectori i el fitxer -N opció (fitxer nou).

El -N opció diu dif com gestionar fitxers del darrer directori que no es troben al directori de treball. Obliga dif per posar instruccions al fitxer de pedaç perquèpegat crea fitxers que es troben al darrer directori però que falten al directori de treball.

Podeu agrupar les opcions de manera que facin servir un sol guió (-).

Tingueu en compte que només proporcionem els noms de directori, no ho estem dient dif per mirar fitxers específics:

diff -ruN working / latest /> slang.patch

Mirant dins del fitxer de pegats

Fem una ullada ràpida al fitxer de pedaços. L’utilitzarem menys per mirar-ne el contingut.

La part superior del fitxer mostra les diferències entre les dues versions de slang.c.

Desplaçant-nos més avall pel fitxer de pedaç, veiem que després descriu els canvis en un altre fitxer anomenat structs.h. Això verifica que el fitxer de pedaç conté definitivament les diferències entre les diferents versions de diversos fitxers.

Mira abans de saltar

Emplaçar una gran col·lecció de fitxers pot ser una mica desconcertant, de manera que farem servir el fitxer --execute l'opció de comprovar que tot està bé abans de donar-nos el pas i comprometre'ns a fer els canvis.

El --execute opció diu pegat fer tot a part de modificar els fitxers. pegat realitzarà tots els controls previs al vol dels fitxers i, si es troba amb algun problema, els informa. Sigui com sigui, no es modifiquen fitxers.

Si no s'informa de cap problema, podem repetir l'ordre sense el fitxer --execute opció i corregir amb confiança els nostres fitxers.

El -d (directori) opció tell pegat a quin directori treballar.

Tingueu en compte que ho som no utilitzant el -i (entrada) opció per explicar pegat quin fitxer de pedaç conté les instruccions de dif. En lloc d’això, estem redirigint el fitxer de pedaç a pegat amb <.

patch --dry-run -ruN -d working <slang.patch

De tot el directori, dif s'han trobat dos fitxers per corregir. Les instruccions sobre les modificacions d’aquests dos fitxers han estat revisades per pegat i no s’han informat de problemes.

Els controls previs al vol estan bé; ja estem preparats per a l’enlairament.

Patching d'un directori

Per aplicar realment els pegats als fitxers, utilitzem l'ordre anterior sense el fitxer --execute opció.

patch -ruN -d treballant <slang.patch

Aquesta vegada, cada línia de sortida no comença amb "comprovació", cada línia comença amb "pegat".

I no s’informa de problemes. Podem compilar el nostre codi font i estarem a la darrera versió del programari.

Arregla les teves diferències

Aquesta és, amb diferència, la forma més fàcil i segura d’utilitzar pegat. Copieu els fitxers de destinació a una carpeta i pegueu-la. Torneu-los a copiar quan estigueu contents que el procés de pegat hagi finalitzat sense errors.


$config[zx-auto] not found$config[zx-overlay] not found