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.