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.