Paano Mag-apply ng isang Patch sa isang File (at Lumikha ng Mga Patch) sa Linux

Ang Linux tambalan Hinahayaan ka ng utos na ilipat ang mga pagbabago mula sa isang hanay ng mga file sa isa pang hanay ng mga file nang mabilis at ligtas. Alamin kung paano gamitin tambalan ang simpleng paraan.

Ang patch at diff Command

Isipin na mayroon kang isang file ng teksto sa iyong computer. Nakatanggap ka ng isang nabagong bersyon ng text file na iyon mula sa iba. Paano mo mabilis na maililipat ang lahat ng mga pagbabago mula sa binagong file sa iyong orihinal na file? Doon tambalan at naiiba maglaro. tambalan at naiiba ay matatagpuan sa Linux at iba pang mga operating system na Tulad ng Unix, tulad ng macOS.

Ang naiiba Sinusuri ng utos ang dalawang magkakaibang bersyon ng isang file at inililista ang mga pagkakaiba sa pagitan nila. Ang mga pagkakaiba ay maaaring maiimbak sa isang file na tinatawag na isang patch file.

Angtambalan Maaaring basahin ng utos ang isang file ng patch at gamitin ang mga nilalaman bilang isang hanay ng mga tagubilin. Sa pamamagitan ng pagsunod sa mga tagubiling iyon, ang mga pagbabago sa binagong file ay kinopya sa orihinal na file.

Ngayon isipin ang prosesong iyon na nangyayari sa isang buong direktoryo ng mga file ng teksto. Lahat ng sabay. Iyon ang lakas ng tambalan.

Minsan hindi mo maipapadala ang binago na mga file. Ang naipadala mo lang ay ang patch file. Bakit ka magpapadala ng dose-dosenang mga file na ikot kung maaari kang magpadala ng isang file, o mag-post ng isang file para sa madaling pag-download?

Ano ang gagawin mo sa patch file upang i-patch ang iyong mga file? Bukod sa halos pagiging isang dila, magandang tanong din iyan. Dadalhin ka namin sa artikulong ito.

Ang tambalan Ang utos ay madalas na ginagamit ng mga taong nagtatrabaho kasama ang mga file ng code ng mapagkukunan ng software, ngunit gumagana itong pantay na rin sa anumang hanay ng mga file ng teksto anuman ang kanilang hangarin, source code o hindi.

KAUGNAYAN:Paano Paghambingin ang Dalawang Mga File ng Teksto sa Linux Terminal

Ang aming Halimbawa ng Senaryo

Sa senaryong ito, nasa isang direktoryo kami na tinatawag na trabaho na naglalaman ng dalawang iba pang mga direktoryo. Ang isa ay tinawag nagtatrabaho, at ang isa pa ay tinawag pinakabagong. Ang nagtatrabaho na direktoryo ay nagtataglay ng isang hanay ng mga file ng source code. Ang pinakabagong direktoryo ay nagtataglay ng pinakabagong bersyon ng mga file ng source code, na ang ilan ay binago.

Upang maging ligtas, ang gumaganang direktoryo ay isang kopya ng kasalukuyang bersyon ng mga text file. Hindi lamang ito ang kopya ng mga ito.

Paghahanap ng Mga Pagkakaiba sa Pagitan ng Dalawang Mga Bersyon ng isang File

Ang naiiba nahahanap ng utos ang mga pagkakaiba sa pagitan ng dalawang mga file. Ang default na pagkilos nito ay upang ilista ang binagong mga linya sa window ng terminal.

Isang file ang tinawag slang.c. Ihahambing namin ang bersyon sa gumaganang direktoryo sa isa sa pinakabagong direktoryo.

Ang -u (Pinag-isang) pagpipilian na nagsasabi naiiba upang mailista din ang ilan sa mga hindi nabagong mga linya ng teksto mula bago at pagkatapos ng bawat nabago na mga seksyon. Ang mga linyang ito ay tinatawag na mga linya ng konteksto. Tinutulungan nila angtambalan utos hanapin nang eksakto kung saan dapat gawin ang isang pagbabago sa orihinal na file.

Ibinibigay namin ang mga pangalan ng mga file nang sa gayon naiiba alam kung aling mga file ang ihahambing. Ang orihinal na file ay nakalista muna, pagkatapos ay ang binagong file. Ito ang utos na inilabas namin naiiba:

diff -u nagtatrabaho / slang.c pinakabagong / slang.c

naiiba gumagawa ng isang listahan ng output na nagpapakita ng mga pagkakaiba sa pagitan ng mga file. Kung ang mga file ay magkapareho, walang output na nakalista sa lahat. Nakikita ang ganitong uri ng output mula sa naiiba Kinukumpirma na mayroong mga pagkakaiba sa pagitan ng dalawang mga bersyon ng file at na ang orihinal na file ay nangangailangan ng pag-patch.

Paggawa ng isang Patch FIle

Upang makuha ang mga pagkakaiba sa isang patch file, gamitin ang sumusunod na utos. Ito ay ang parehong utos tulad ng nasa itaas, na may output mula sa naiiba nai-redirect sa isang file na tinatawag na slang.patch.

diff -u nagtatrabaho / slang.c pinakabagong / slang.c> slang.patch

Ang pangalan ng patch file ay arbitrary. Maaari mo itong tawagan kahit anong gusto mo. Ang pagbibigay nito ng isang ".patch" na extension ay isang magandang ideya; gayunpaman, dahil nililinaw nito kung anong uri ng file ito.

Gumawatambalan kumilos sa file ng patch at baguhin ang gumaganang / slang.c file, gamitin ang sumusunod na utos. Ang -u Pinapayagan ang pagpipiliang (pinag-isa) tambalan malaman na ang patch file ay naglalaman ng pinag-isang mga linya ng konteksto. Sa madaling salita, ginamit namin ang -u na pagpipilian na may diff, kaya ginagamit namin ang -u pagpipilian sa tambalan.

patch -u nagtatrabaho.slang.c -i slang.patch

Kung maayos ang lahat, mayroong isang linya ng output na nagsasabi sa iyo tambalan ay tinatapik ang file.

Gumagawa ng isang Pag-backup ng Orihinal na Pag-ayos

Maaari tayong magturo tambalan upang makagawa ng isang backup na kopya ng mga naka-patch na file bago sila mabago sa pamamagitan ng paggamit ng-b (backup) na pagpipilian. Ang -ako Sinasabi ng pagpipiliang (input) na i-patch ang pangalan ng patch file na gagamitin:

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

Ang file ay na-patch tulad ng dati, na walang nakikitang pagkakaiba sa output. Gayunpaman, kung titingnan mo ang gumaganang folder, makikita mo ang file na tinatawag na slang.c.orig ay nilikha. Ang mga selyo ng petsa at oras ng mga file ay nagpapakita na ang slang.c.orig ay ang orihinal na file at ang slang.c ay isang bagong file na nilikha ng tambalan.

Paggamit ng diff Sa Mga Direktoryo

Pwede natin gamitin naiiba upang lumikha ng isang file ng patch na naglalaman ng lahat ng mga pagkakaiba sa pagitan ng mga file sa dalawang direktoryo. Maaari naming magamit ang patch file na iyon gamit ang tambalan na mailapat ang mga pagkakaiba sa mga file sa gumaganang folder na may isang solong utos.

Ang mga pagpipilian na gagamitin namin naiiba ay ang -u (Pinag-isang konteksto) na pagpipilian na ginamit namin nang mas maaga, ang -r (Recursive) na pagpipilian upang magawa naiiba tumingin sa anumang mga sub-direktoryo at ang -N (bagong file) na pagpipilian.

Ang -N Sinasabi ng pagpipilian naiiba kung paano hawakan ang mga file sa pinakabagong direktoryo na wala sa gumaganang direktoryo. Pinipilit nito naiiba upang ilagay ang mga tagubilin sa patch file upangtambalan lumilikha ng mga file na naroroon sa pinakabagong direktoryo ngunit nawawala mula sa gumaganang direktoryo.

Maaari mong sama-sama ang mga pagpipilian upang magamit nila ang isang solong gitling (-).

Tandaan na nagbibigay lang kami ng mga pangalan ng direktoryo, hindi namin sinasabi naiiba upang tumingin sa mga tukoy na file:

diff -ruN nagtatrabaho / pinakabagong /> slang.patch

Sumisilip sa Loob ng Patch File

Tingnan natin ang isang mabilis na file sa patch. Gagamitin namin mas kaunti upang tingnan ang mga nilalaman nito.

Ipinapakita ng tuktok ng file ang mga pagkakaiba sa pagitan ng dalawang bersyon ng slang.c.

Pag-scroll sa karagdagang pababa sa pamamagitan ng patch file, nakikita namin na pagkatapos ay inilalarawan nito ang mga pagbabago sa isa pang file na tinatawag na structs.h. Napatunayan nito na ang patch file ay tiyak na naglalaman ng mga pagkakaiba sa pagitan ng iba't ibang mga bersyon ng maraming mga file.

Tumingin Bago Ka Tumalon

Ang paglalagay ng isang malaking koleksyon ng mga file ay maaaring maging medyo nakakainis, kaya gagamitin namin ang -dry-run pagpipilian upang suriin ang lahat ay mabuti bago tayo tumalon at ipako ang ating sarili sa paggawa ng mga pagbabago.

Ang -dry-run Sinasabi ng pagpipilian tambalan upang gawin ang lahat bukod sa talagang binabago ang mga file. tambalan isasagawa ang lahat ng mga pagsusuri bago ang paglipad nito sa mga file at kung nakatagpo ito ng anumang mga problema, iniuulat nito ang mga ito. Alinmang paraan, walang mga file na nabago.

Kung walang naiulat na problema, maaari naming ulitin ang utos nang wala ang -dry-run pagpipilian at tiwala na i-patch ang aming mga file.

Ang -d (direktoryo) sabihin ang pagpipilian tambalan aling direktoryo upang gumana.

Tandaan na tayo hindi gamit ang -ako (input) na pagpipilian upang sabihin tambalan aling patch file ang naglalaman ng mga tagubilin mula sa naiiba. Sa halip, nai-redirect namin ang patch file sa tambalan kasama si <.

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

Sa labas ng buong direktoryo, naiiba natagpuan ang dalawang mga file upang i-patch. Ang mga tagubilin tungkol sa mga pagbabago para sa dalawang mga file ay nasuri ng tambalan , at walang mga naiulat na problema.

OK ang mga tseke bago ang paglipad; handa na kaming mag-take-off.

Pagdaragdag ng isang Direktoryo

Upang tunay na mailapat ang mga patch sa mga file na ginagamit namin ang nakaraang utos nang wala ang -dry-run pagpipilian

patch -ruN -d nagtatrabaho <slang.patch

Sa pagkakataong ito ang bawat linya ng output ay hindi nagsisimula sa "pag-check," ang bawat linya ay nagsisimula sa "pagtambal."

At walang mga naiulat na problema. Maaari naming ipagsama ang aming source code, at makakasama kami sa pinakabagong bersyon ng software.

Makuntento ang Iyong Mga Pagkakaiba

Ito ay ang pinakamadali at pinakaligtas na paraan upang magamit tambalan. Kopyahin ang iyong mga target na file sa isang folder at i-patch ang folder na iyon. Kopyahin muli ang mga ito kapag masaya ka na ang proseso ng pag-patch ay nakumpleto nang walang error.


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