Ngaba uyifundile imiyalelo yeGit kodwa ufuna ukuba nomfanekiso ngqondweni wendlela udibaniso oluqhubekayo (CI) olusebenza ngayo ngokwenyani? Okanye mhlawumbi ufuna ukwandisa imisebenzi yakho yemihla ngemihla? Le khosi iya kukunika izakhono ezisebenzayo ekudityanisweni okuqhubekayo usebenzisa i-GitHub yokugcina. Le khosi ayenzelwanga ukuba yiwizadi onokuthi ucofe kuyo ngokulula; ngokuchaseneyo, uya kwenza kwa ezo zenzo abantu bazenzayo ngokwenene emsebenzini, ngendlela efanayo abazenza ngayo. Ndiza kuchaza ithiyori njengoko uhamba ngamanyathelo abandakanyekayo.
Senza ntoni?
Njengoko siqhubela phambili, siya kudala ngokuthe ngcembe uluhlu lwamanyathelo aqhelekileyo e-CI, eyona ndlela ilungileyo yokukhumbula olu luhlu. Ngamanye amazwi, siya kudala uluhlu lwezenzo ezithathwa ngabaphuhlisi ngelixa besenza udibaniso oluqhubekayo, besenza indibaniselwano eqhubekayo. Siza kusebenzisa iiseti ezilula zovavanyo ukusondeza inkqubo yethu yeCI kufutshane neyokwenene.
Le GIF ibonisa ngokucwangcisekileyo ukuzibophelela kwindawo yakho yokugcina njengoko uqhubeka nekhosi. Njengoko ubona, akukho nto inzima apha kwaye kuphela eyona nto ifunekayo.
Uya kudlula kwezi meko zilandelayo ze-CI:
- Sebenza kuphawu;
- Ukusetyenziswa kovavanyo oluzenzekelayo ukuqinisekisa umgangatho;
- Ukuphunyezwa komsebenzi ophambili;
- Ukusombulula ingxabano xa kudityaniswa amasebe (ukudibanisa impixano);
- Impazamo yenzeka kwindawo yemveliso.
Uza kufunda ntoni?
Uya kuba nakho ukuphendula le mibuzo ilandelayo:
- Yintoni ukuhlanganiswa okuqhubekayo (CI)?
- Ziziphi iintlobo zeemvavanyo ezizenzekelayo ezisetyenziswa kwi-CI, kwaye ekuphenduleni zeziphi izenzo ezibangelwayo?
- Ziziphi izicelo zokutsalwa kwaye zifuneka nini?
- Yintoni uPhuhliso oluqhutywa kuVavanyo (TDD) kwaye lunxulumana njani neCI?
- Ngaba kufuneka ndidibanise okanye ndimise utshintsho kwakhona?
- Buyela emva okanye ulungise kuguqulelo olulandelayo?
Ekuqaleni ndaguqulela izinto ezinjengokuthi "izicelo zokutsala" kuyo yonke indawo, kodwa ngenxa yoko ndagqiba ekubeni ndibuyisele amabinzana ngesiNgesi kwezinye iindawo ukunciphisa iqondo lobuhlanya kwisicatshulwa. Ngamanye amaxesha ndiya kusebenzisa "umdwelisi wenkqubo surzhik" njengesenzi esimangalisayo "ukuzibophelela" apho abantu bayisebenzisa ngokwenene emsebenzini.
Yintoni ukuhlanganiswa okuqhubekayo?
Umanyano oluqhubekayo, okanye i-CI, yinkqubo yobugcisa apho ilungu ngalinye leqela lidibanisa ikhowudi yabo kwindawo yogcino oluqhelekileyo ubuncinane kanye ngosuku, kwaye ikhowudi ephumelayo kufuneka ubuncinane yakhiwe ngaphandle kwamaphutha.
Kukho ukungavisisani malunga neli gama
Inqaku lengxabano kukuphindaphinda kokudibanisa. Abanye bathi ukudibanisa ikhowudi kanye kuphela ngosuku akwanelanga ukudibanisa ngokuqhubekayo. Umzekelo unikwe iqela apho wonke umntu ethatha ikhowudi entsha kusasa kwaye ayidibanise kanye ngokuhlwa. Ngelixa oku kuyinkcaso efanelekileyo, kukholelwa ngokubanzi ukuba inkcazo yosuku-kanye iyasebenza ngokufanelekileyo, icacile, kwaye ifanelekile kumaqela anobukhulu obahlukeneyo.
Enye inkcaso kukuba i-C++ ayiselulo kuphela ulwimi olusetyenziswayo kuphuhliso, kwaye ifuna nje indibano engenaziphene njengendlela yokuqinisekisa ibuthathaka. Ezinye iiseti zovavanyo (umzekelo, iimvavanyo zeyunithi ezenziwa ekuhlaleni) nazo kufuneka zigqitywe ngempumelelo. Okwangoku, uluntu luqhubela phambili ekwenzeni oku kube yimfuneko, kwaye kwixesha elizayo "ukwakha + iimvavanyo zeyunithi" mhlawumbi kuya kuba yinto eqhelekileyo, ukuba ayikabikho.
Umanyano oluqhubekayo zahlukile kwi unikezelo oluqhubekayo (I-Continuous Delivery, CD) kuba ayifuni umviwa okhutshwe emva komjikelo ngamnye wokudibanisa.
Uluhlu lwamanyathelo esiya kuwasebenzisa kwikhosi yonke
- Tsala ikhowudi yamva nje. Yenza isebe ukusuka
master
. Qala ukusebenza. - Yenza izibophelelo kwisebe lakho elitsha. Yakha kwaye uvavanye ekuhlaleni. Ukupasa? Yiya kwinyathelo elilandelayo. Ngaba uyasilela? Lungisa iimpazamo okanye iimvavanyo kwaye uzame kwakhona.
- Cofa kwindawo yakho ekude okanye isebe elikude.
- Yenza isicelo sokutsala. Xoxa ngotshintsho, yongeza ezinye izibophelelo njengoko ingxoxo iqhubeka. Yenza iimvavanyo ziphumelele kwicandelo lesici.
- Dibanisa/buyisela kwakhona izibophelelo ezivela kumphathi. Yenza iimvavanyo ziphumelele kwisiphumo sokudibanisa.
- Sebenzisa ukusuka kwisebe elibonakalayo ukuya kwimveliso.
- Ukuba yonke into ilungile kwimveliso kangangexesha elithile, dibanisa utshintsho kwinkosi.
οΈ Ukulungiselela
Qinisekisa ukuba unesoftware efanelekileyo
Ukuthatha le khosi uya kuyidinga
Ungasebenzisa nawuphi na umxhasi weGit, kodwa ndiza kubonelela ngemiyalelo yomgca womyalelo kuphela.
Qinisekisa ukuba unomxhasi weGit ofakelweyo oxhasa umgca womyalelo
Ukuba awukabinaye umxhasi weGit oxhasa umgca womyalelo, unokufumana imiyalelo yokufakela
Lungisa indawo yokugcina
Kuya kufuneka uzenzele ikopi yakho (ifolokhwe)
Ugqibile? Ukuba awukatshintshi useto olungagqibekanga, indawo yokugcina ikhosi idla ngokubizwa continuous-integration-team-scenarios-students
, ifumaneka kwiakhawunti yakho yeGitHub kwaye i-URL ibonakala ngolu hlobo
https://github.com/<Π²Π°ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° GitHub>/continuous-integration-team-scenarios-students
Ndiza kuyibiza ngokulula le dilesi <URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>
.
Izibiyeli ze-engile njenge
<ΡΡΡ>
Izakuthetha ukuba kufuneka ubuyisele imbonakalo enjalo ngexabiso elifanelekileyo.
Qinisekisa ukuba Iintshukumo zeGitHub ibandakanyiwe kule khosi yokugcina. Ukuba ayenziwanga, nceda uzenze ngokunqakraza iqhosha elikhulu embindini wephepha, onokufika kulo ngokunqakraza iintshukumo kujongano lweGitHub.
Awuyi kukwazi ukugqiba ikhosi ngokulandela imiyalelo yam ukuba i-GitHub Actions ayenziwanga.
Ungasoloko usebenzisa amandla eGitHub ukunika iMarkdown ukubona imeko yangoku yoluhlu esilubumbayo apha.
https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md
Malunga neempendulo
Ngelixa eyona ndlela yokugqiba le khosi kukwenza ngokwakho, unokuba nobunzima.
Ukuba uziva ngathi awuyiqondi into omawuyenze kwaye awukwazi ukuqhubeka, ungajonga kumsonto solution
, ekwindawo yakho yokugcina yokugcina.
Nceda ungadibanisi solution
Π² master
ngexesha lekhosi. Ungasebenzisa eli sebe ukufumanisa ukuba wenze ntoni na, okanye uthelekise ikhowudi yakho neyombhali, usebenzisa zonke izakhono ezinikwa iGit. Ukuba ulahlekile ngokupheleleyo, ungabuyisela ngokupheleleyo isebe lakho master
esebeni solution
kwaye emva koko usete kwakhona ulawulo lwakho lokusebenza kwinyathelo lesifundo olifunayo.
Sebenzisa oku kuphela ukuba uyifuna ngenene
Faka ikhowudi yakho
git add .
git commit -m "Backing up my work"
Le miyalelo
- ithiya ngokutsha
master
Π²master-backup
; - ithiya ngokutsha
solution
Π²master
; - phuma kwisebe elitsha
master
kwaye ubhale kwakhona imixholo yoluhlu olusebenzayo; - Yenza i-"solution" yesebe ukusuka ku-"master" (eyayifudula iyi "solution") ukwenzela ukuba ufune isebe le-"solution" kwixesha elizayo.
git branch -m master master-backup
git branch -m solution master
git checkout master -f
git branch solution
Emva kwala manyathelo ungasebenzisa git log master
ukufumanisa ukuba yeyiphi imbopheleleko oyifunayo.
Ungaphinda usete uluhlu lwakho lokusebenza kolu kuzinikela ngolu hlobo:
git reset --hard <the SHA you need>
Ukuba uyonwabile ngesiphumo, ngexesha elithile kuya kufuneka upapashe inguqulelo yakho yendawo yokugcina kwindawo ekude. Ungalibali ukuxela ngokucacileyo isebe elikude xa usenza oku.
git push --force origin master
Nceda uqaphele ukuba sisebenzisa git push --force
. Akunakwenzeka ukuba ufune ukuyenza le nto rhoqo, kodwa sinemeko ethile apha kunye nomsebenzisi omnye wogcino othi, ukongeza, aqonde into ayenzayo.
Ukuqala ukusebenza
Masiqalise ukuqulunqa uluhlu lwethu lwamanyathelo eCI. Ngokwesiqhelo ungaqala eli nyathelo ngokujonga uguqulelo lwamva nje lwekhowudi kwindawo yokugcina ekude, kodwa asikabinayo indawo yokugcina yasekhaya, ke siyayifanisa isuka kwindawo ekude endaweni yoko.
οΈ Umsebenzi: hlaziya indawo yokugcina indawo, yenza isebe ukusuka master
, qala ukusebenza
- Clone indawo yokugcina ikhosi ukusuka
<URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>
. - Qhuba
npm install
kuvimba wogcino lwezifundo; Siyidinga ukufaka i-Jest, esiyisebenzisayo ukuqhuba iimvavanyo. - Yenza isebe kwaye ulinike igama
feature
. Tshintshela kulo msonto. -
Yongeza ikhowudi yovavanyo ku
ci.test.js
phakathi kwezimvo endicela ukuba ndenze oku.it('1. pull latest code', () => { expect(/.*pull.*/ig.test(fileContents)).toBe(true); }); it('2. add commits', () => { expect(/.*commit.*/ig.test(fileContents)).toBe(true); }); it('3. push to the remote branch with the same name', () => { expect(/.*push.*/ig.test(fileContents)).toBe(true); }); it('4. create a pull request and continue working', () => { expect(/.*pulls+request.*/ig.test(fileContents)).toBe(true); });
- Yongeza okubhaliweyo ngamanyathelo ama-4 okuqala kwifayile
ci.md
.1. Pull in the latest code. Create a branch from `master`. Start working. 2. Create commits on your new branch. Build and test locally. Pass? Go to the next step. Fail? Fix errors or tests and try again. 3. Push to your remote repository or remote branch. 4. Create a pull request. Discuss the changes, add more commits as discussion continues. Make tests pass on the feature branch.
Izixhobo
# ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΊΡΡΡΠ°
git clone <repository URL>
cd <repository name>
# ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ npm install Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΊΡΡΡΠ°; ΠΎΠ½ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Jest, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ².
npm install
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ feature. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° ΡΡΡ Π² Π²Π΅ΡΠΊΡ.
git checkout -b feature
# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.test.js ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅.
# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.md ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
Yenza imisebenzi kwisebe elitsha, yakha kwaye uvavanye ekuhlaleni
Siza kuseka iimvavanyo ukuze siqhube phambi kokwenza, kwaye emva koko senze ikhowudi.
Iimeko eziqhelekileyo xa iimvavanyo ziqhutywa ngokuzenzekelayo
- ekuhlaleni:
- Ngokuqhubekayo okanye ukuphendula kutshintsho lwekhowudi efanelekileyo;
- Ekugcineni (kwiilwimi ezitolikiweyo okanye ezihlanganiswe ngeJIT);
- Ngexesha lokudibanisa (xa ukuhlanganiswa kuyadingeka);
- Ngokuzibophelela;
- Xa upapasha kwindawo yokugcina ekwabelwana ngayo.
- Kumncedisi wokwakha okanye indawo yokwakha:
- Xa ikhowudi ipapashwa kwisebe lomntu / kwindawo yokugcina.
- Ikhowudi kulo msonto iyavavanywa.
- Isiphumo esinokubakho sokudityaniswa siyavavanywa (ngokuqhelekileyo nge
master
). - Njengenqanaba lokudibanisa okuqhubekayo / umbhobho wokuhanjiswa oqhubekayo
Ngokuqhelekileyo, okukhona i-suite yovavanyo ibaleka ngokukhawuleza, kokukhona unokukwazi ukuyiqhuba. Ukuhanjiswa kweqonga okuqhelekileyo kunokujongeka ngolu hlobo.
- Uvavanyo lweeyunithi ezikhawulezayo - ngexesha lokwakha, kwipayipi yeCI
- Iimvavanyo zeyunithi ezicothayo, icandelo elikhawulezayo kunye novavanyo lokudibanisa - ekuzibopheleleni, kumbhobho weCI
- Icandelo elicothayo kunye novavanyo lokudibanisa - kumbhobho weCI
- Uvavanyo lokhuseleko, uvavanyo lomthwalo kunye nezinye iimvavanyo ezichitha ixesha okanye ezibizayo - kwiipayipi zeCI / CD, kodwa kuphela kwiindlela ezithile / izigaba / iipayipi zokwakha, umzekelo, xa ulungiselela umviwa wokukhululwa okanye xa usebenza ngesandla.
οΈUmsebenzi
Ndicebisa ukuqhuba iimvavanyo ngesandla kuqala usebenzisa umyalelo npm test
. Emva koko, masidibanise i-git hook ukuze siqhube iimvavanyo zethu ekuzibopheleleni. Kukho enye into yokubambisa: Iihuku zeGit azithathwa njengenxalenye yendawo yokugcina kwaye ke ngoko azikwazi ukuveliswa ukusuka kwi-GitHub kunye nezinye izixhobo zekhosi. Ukufakela hook kufuneka ubaleke install_hook.sh
okanye khuphela ifayile repo/hooks/pre-commit
kulawulo lwasekuhlaleni .git/hooks/
.
Xa uzibophelela, uya kubona ukuba iimvavanyo ziyaqhutywa kwaye zijonga ukubona ukuba amagama athile aphambili akhona kuluhlu.
- Yenza iimvavanyo ngesandla ngokuqhuba umyalelo
npm test
kwisiqulathi seefayili sakho sogcino lwekhosi. Qinisekisa ukuba uvavanyo lugqityiwe. - Seta ikhonkco lokuzibophelela (ukuzibophelela kwangaphambili) ngokubaleka
install_hook.sh
. - Nikela utshintsho lwakho kwindawo yakho yokugcina.
- Qinisekisa ukuba iimvavanyo ziqhutywa phambi kokuba uzibophelele.
Indawo yakho yokugcina kufuneka ijongeke ngolu hlobo emva kokulandela la manyathelo.
Izixhobo
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ pre-commit hook Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² install_hook.sh.
# ΠΠ°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ "Add first CI steps" Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ΅.
git add ci.md ci.test.js
git commit -m "Add first CI steps"
# Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ.
Papasha ikhowudi kwindawo yokugcina ekude okanye kwisebe elikude
Xa sele begqibile ukusebenza ekuhlaleni, abaphuhlisi badla ngokwenza ikhowudi yabo ifumaneke esidlangalaleni ukuze ekugqibeleni idityaniswe noluntu. Nge-GitHub, oku kudla ngokuphunyezwa ngokupapasha umsebenzi nokuba yikopi yobuqu yendawo yokugcina (ifolokhwe yobuqu) okanye isebe lomntu.
- Ngeefolokhwe, umphuhlisi udibanisa indawo yokugcina ekwabelwana ngayo, esenza ikopi yayo ekude, eyaziwa ngokuba yifolokhwe. Ithi ke idibanise le ndawo yokugcina umntu ukuze isebenze nayo ekuhlaleni. Xa umsebenzi ugqityiwe kwaye ukuzinikela kwenziwe, uyazityhala kwifolokhwe yakhe, apho zifumaneka khona kwabanye kwaye zinokudityaniswa kwindawo yokugcina eqhelekileyo. Le ndlela isetyenziswa ngokuqhelekileyo kwiiprojekthi zomthombo ovulekileyo kwi-GitHub. Ikwasetyenziswa kwikhosi yam ephambili [uMsebenzi weQela kunye neCI ngeGit] (
http://devops.redpill.solutions/ ). - Enye indlela kukusebenzisa indawo yokugcina ekude nokubala isebe kuphela
master
indawo yokugcina ekwabelwana ngayo "ekhuselweyo". Kulo mzekelo, abaphuhlisi ngabanye bapapasha ikhowudi yabo kumasebe ogcino olukude ukuze abanye bajonge kule khowudi, ukuba yonke into ilungile, yidibanise ne.master
indawo yokugcina ekwabelwana ngayo.
Kwesi sifundo sikhethekileyo, siya kusebenzisa inkqubo yokusebenza esebenzisa amasebe.
Masipapashe ikhowudi yethu.
οΈUmsebenzi
- Papasha utshintsho kwisebe elikude elinegama elifanayo nelomsebenzi wesebe lakho
Izixhobo
git push --set-upstream origin feature
Yenza isicelo sokutsala
Yenza isicelo sokutsalwa ngesihloko Uphononongo lwamanyathelo... Faka feature
njenge "intloko yesebe" kunye master
njenge "base base".
Qinisekisa ukuba uyifakile
master
kweyakhe ifolokhwe yokugcina "Njengesebe elisisiseko", andizukuphendula kwizicelo zotshintsho kwindawo yokugcina izinto zekhosi.
Kwi-GitHub lingo, "isebe lesiseko" lisebe osekela kulo umsebenzi wakho, kwaye "intloko yesebe" lisebe eliqulethe utshintsho olucetywayo.
Xoxa ngotshintsho, yongeza izibophelelo ezintsha njengoko ingxoxo iqhubeka
Tsala isicelo(PR)
Tsala isicelo(PR) yindlela yokuxoxa kunye noxwebhu lwekhowudi, kunye nokuziphatha ngokutsha kwekhowudi. Izicelo zokutsalwa zithiywa ngendlela eqhelekileyo yokudibanisa utshintsho lomntu kwikhowudi iyonke. Ngokuqhelekileyo, umntu udibanisa indawo yokugcina esemthethweni yeprojekthi kwaye asebenze kwikhowudi ekuhlaleni. Emva koku, ubeka ikhowudi kwindawo yakhe yokugcina ekude kwaye ucela abo banoxanduva logcino olusemthethweni ukuba bathathe (Tsala) ikhowudi yayo kwiindawo zabo zokugcina, apho baphonononga khona kwaye mhlawumbi badibanise (uhlanganise) yakhe. Le ngcamango yaziwa nangamanye amagama, umzekelo, ukudibanisa isicelo.
Awunyanzelekanga ukuba usebenzise inqaku lesicelo sokutsalwa kweGitHub okanye amaqonga afanayo. Amaqela ophuhliso anokusebenzisa ezinye iindlela zonxibelelwano, kubandakanywa unxibelelwano lobuso ngobuso, iifowuni zezwi, okanye i-imeyile, kodwa kusekho izizathu ezininzi zokusebenzisa izicelo zokutsalwa kweforum. Nazi ezinye zazo:
- iingxoxo ezicwangcisiweyo ezinxulumene notshintsho lwekhowudi ethile;
- njengendawo yokujonga ingxelo malunga nomsebenzi oqhubekayo kubo bobabini oomatshini kunye noontanga;
- ukwenziwa ngokusesikweni kophononongo lwekhowudi;
- ukuze kamva ufumane izizathu kunye neengqwalasela emva koku okanye iqhekeza lekhowudi.
Ngokwesiqhelo wenza isicelo sokutsala xa ufuna ukuxoxa ngento ethile okanye ufumane impendulo. Umzekelo, ukuba usebenza kwinqaku elinokuphunyezwa ngeendlela ezininzi, unokwenza isicelo sokutsalwa ngaphambi kokuba ubhale umgca wokuqala wekhowudi ukwabelana ngezimvo zakho kwaye uxoxe ngezicwangciso zakho nabalingane bakho. Ukuba umsebenzi ulula, isicelo sokutsala sivulwa xa kukho into esele yenziwe, izinikele, kwaye ingaxoxwa. Kwezinye iimeko, unokufuna ukuvula i-PR kuphela ngenxa yezizathu zokulawula umgangatho: ukuqhuba iimvavanyo ezizenzekelayo okanye ukuqalisa ukuhlolwa kwekhowudi. Nokuba wenze ntoni na, ungalibali uku-@khankanya abantu abafuna ukuvunyelwa kwabo kwisicelo sakho sokutsala.
Ngokuqhelekileyo, xa udala i-PR, wenza oku kulandelayo.
- Bonisa ukuba uceba ukutshintsha ntoni kwaye phi.
- Bhala inkcazo echaza injongo yotshintsho. Ungafuna:
- yongeza nantoni na ebalulekileyo engacacanga kwikhowudi, okanye into eluncedo ekuqondeni umxholo, njenge #bugs ezifanelekileyo kunye namanani azibophelele;
- @mention nabani na ofuna ukuqala ukusebenza naye, okanye unako @mention kubo kwizimvo kamva;
- cela oogxa babo ukuba bancede ngento ethile okanye bajonge into ethile.
Nje ukuba uvule i-PR, iimvavanyo ezilungiselelwe ukuqhuba kwiimeko ezinjalo ziyenziwa. Kwimeko yethu, oku kuya kuba yisethi efanayo yovavanyo esiye saqhuba kwindawo, kodwa kwiprojekthi yangempela kunokubakho iimvavanyo ezongezelelweyo kunye neetshekhi.
Nceda ulinde ngelixa uvavanyo lugqityiwe. Ungayibona imeko yovavanyo ezantsi kwengxoxo yePR kwi-interface ye-GitHub. Qhubeka xa iimvavanyo zigqityiwe.
οΈ Yongeza inqaku malunga nokungakhethi koluhlu lwamanyathelo eCI
Uluhlu olusetyenziswe kule khosi alunasizathu kwaye luxhomekeke, kufuneka songeze inqaku malunga noku.
οΈ Umsebenzi: yenza isicelo sokutsalwa kwala mazwana
- Tshintshela kwisebe
master
. - Yenza isebe elinegama
bugfix
. - Yongeza inqaku elibhaliweyo ekupheleni kwefayile
ci.md
.> **GitHub flow** is sometimes used as a nickname to refer to a flavor of trunk-based development when code is deployed straight from feature branches. This list is just an interpretation that I use in my [DevOps courses](http://redpill.solutions). The official tutorial is [here](https://guides.github.com/introduction/flow/).
- Yenza utshintsho.
- Papasha umsonto
bugfix
kwindawo yokugcina ekude. - Yenza isicelo sokutsalwa esinikwe igama Yongeza inkcazo ngentloko yesebe
bugfix
kunye nesiseko sesebemaster
.
Qinisekisa ukuba uyifakile
master
kweyakhe ifolokhwe yokugcina "Njengesebe elisisiseko", andizukuphendula kwizicelo zotshintsho kwindawo yokugcina izinto zekhosi.
Yile nto kufuneka ibukeke indawo yakho yokugcina.
Izixhobo
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ master. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ bugfix.
git checkout master
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ bugfix-remark.
git checkout -b bugfix
# ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅ΠΊΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ Π²Π½ΠΈΠ·Ρ ci.md.
# ΠΠ°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
git add ci.md
git commit -m "Add a remark about the list being opinionated"
# ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ Π²Π΅ΡΠΊΡ bugfix Π² ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
git push --set-upstream origin bugfix
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ pull request ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° GitHub ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
Vuma isicelo sokutsala "Yongeza inqaku"
οΈUmsebenzi
- Yenza isicelo sokutsala.
- Cofa "Dibanisa isicelo sokutsala".
- Cofa "Qinisekisa ukudibanisa".
- Cofa u-"Delete branch", asisayifuni.
Lo ngumzobo wokuzibophelela emva kokudibanisa.
οΈ Qhubeka usebenza kwaye wongeza iimvavanyo
Ukusebenzisana kwisicelo sokutsalwa kudla ngokukhokelela kumsebenzi owongezelelweyo. Oku kudla ngokuba sisiphumo sophononongo lwekhowudi okanye ingxoxo, kodwa kwikhosi yethu siza kuyenza imodeli yoku ngokongeza izinto ezintsha kuluhlu lwethu lwamanyathelo eCI.
Udibaniso oluqhubekayo lubandakanya ukugubungela uvavanyo. Iimfuno zofikelelo lovavanyo ziyahluka kwaye zidla ngokufunyanwa kuxwebhu olubizwa ngokuba yi "contribution guidelines". Siza kuyigcina ilula kwaye songeze uvavanyo kumgca ngamnye kuluhlu lwethu lokukhangela.
Xa uqhuba izabelo, zama ukwenza iimvavanyo kuqala. Ukuba ufake ngokuchanekileyo pre-commit
hook ngaphambili, uvavanyo olutshanje luya kwenziwa, luya kusilela, kwaye akukho nto iya kwenziwa. Qaphela ukuba le yindlela esazi ngayo ukuba iimvavanyo zethu zivavanya into ethile. Okubangela umdla kukuba, ukuba siqale ngekhowudi phambi kweemvavanyo, ukuphumelela iimvavanyo kunokuthetha ukuba ikhowudi isebenze njengoko bekulindelwe, okanye iimvavanyo bezingenakuvavanya nantoni na. Ngaphezu koko, ukuba besingazibhalanga ezi mvavanyo kwasekuqaleni, ngekhe sazilibala kwaphela, ekubeni bekungekho nto isikhumbuzayo ngayo.
Uphuhliso oluqhutywayo kuvavanyo (TDD)
I-TDD icebisa iimvavanyo zokubhala phambi kwekhowudi. Ukuqhutywa komsebenzi oqhelekileyo usebenzisa i-TDD kujongeka ngolu hlobo.
- Yongeza uvavanyo.
- Qhuba zonke iimvavanyo kwaye uqinisekise ukuba uvavanyo olutsha aluphumeleli.
- Bhala ikhowudi.
- Qhuba iimvavanyo, qinisekisa ukuba zonke iimvavanyo ziyaphumelela.
- Hlaziya ikhowudi yakho.
- Phinda.
Ngenxa yokuba iziphumo zovavanyo olungaphumeleliyo zidla ngokuboniswa ngombala obomvu, kwaye ezo ziphumeleleyo zidla ngokuboniswa ngombala oluhlaza, umjikelo ukwabizwa ngokuba yi-red-green-refactor.
οΈUmsebenzi
Okokuqala, zama ukwenza iimvavanyo kwaye ubayeke bangaphumeleli, uze udibanise kwaye wenze okubhaliweyo koluhlu lwamanyathelo eCI ngokwawo. Uya kubona ukuba iimvavanyo ziyadlula ("luhlaza").
Emva koko upapashe ikhowudi entsha kwindawo ekude kwaye ujonge iimvavanyo eziqhutywa kwi-interface ye-GitHub ezantsi kwengxoxo yesicelo sokutsala kunye nokuhlaziywa kwesimo se-PR.
- Tshintshela kwisebe
feature
. -
Yongeza ezi mvavanyo ku
ci.test.js
emva kwefowuni yokugqibelait (...);
.it('5. Merge/rebase commits from master. Make tests pass on the merge result.', () => { expect(/.*merge.*commits.*testss+pass.*/ig.test(fileContents)).toBe(true); }); it('6. Deploy from the feature branch to production.', () => { expect(/.*Deploy.*tos+production.*/ig.test(fileContents)).toBe(true); }); it('7. If everything is good in production for some period of time, merge changes to master.', () => { expect(/.*merge.*tos+master.*/ig.test(fileContents)).toBe(true); });
- Zama ukwenza iimvavanyo. Ukuba
pre-commit
hook ifakiwe, umzamo wokuzibophelela uya kusilela. - Emva koko yongeza lo mbhalo ku
ci.md
.5. Merge/rebase commits from master. Make tests pass on the merge result. 6. Deploy from the feature branch with a sneaky bug to production. 7. If everything is good in production for some period of time, merge changes to master.
- Yenza kwaye wenze utshintsho ekuhlaleni.
- Thumela utshintsho kwisebe
feature
.
Kufuneka ube nento enje ngoku
Izixhobo
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π° Π²Π΅ΡΠΊΡ feature
git checkout feature
# ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΡΡΡ Π² ci.test.js ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
# ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΠΈΠ½Π΄Π΅ΠΊΡ ci.test.js ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·ΠΆΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠΈΡΡ
git add ci.test.js
# ΠΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠΈΡΡ ΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ pre-commit hook ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ, ΠΊΠΎΠΌΠΌΠΈΡ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ.
git commit
# Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅ΠΊΡΡ Π² ci.md ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
# ΠΠ½Π΅ΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΈΡ
git add ci.md
git commit -m "Add the remaining CI steps"
# ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π²Π΅ΡΠΊΡ feature
git push
Dibanisa impixano
Yiya ku Tshintsha isicelo Uphononongo lwamanyathelo.
Nangona singenzanga nto iphosakeleyo kwaye iimvavanyo zekhowudi yethu ziphumelele, asikwazi ukudibanisa isebe feature
ΠΈ master
. Kungenxa yokuba omnye umsonto bugfix
yadityaniswa nayo master
ngelixa sasisebenza kule PR.
Oku kudala imeko apho isebe elikude master
inoguqulelo olutsha kunale sisekele isebe kuyo feature
. Ngenxa yoku asinakuvele sibuyisele umva INTLOKO master
ukuya kutsho ekupheleni komsonto feature
. Kule meko, kufuneka sidibanise okanye sisebenzise izibophelelo feature
hlehlisa master
. I-GitHub inokwenza udibaniso oluzenzekelayo ukuba akukho ngquzulwano. Ewe, kwimeko yethu, omabini amasebe aneenguqu ezikhuphisanayo kwifayile ci.md
. Le meko yaziwa njengengxabano yokudibanisa, kwaye kufuneka siyisombulule ngesandla.
Hlanganisa okanye ubuyisele kwakhona
Hlanganisa
- Yenza isibophelelo sokudibanisa esongezelelweyo kwaye igcina imbali yomsebenzi.
- Ugcina umsebenzi wokuqala wamasebe kunye nesitampu sawo sangaphambili kunye nababhali.
- Igcina i-SHA yokuzibophelela kunye nokunxibelelana nabo kwiingxoxo zesicelo sotshintsho.
- Ifuna isisombululo sexesha elinye.
- Wenza ukuba ibali lingangqamani.
- Ibali linokuba nzima ukufunda ngenxa yenani elikhulu lamasebe (okukhumbuza intambo ye-IDE).
- Yenza ulungiso oluzenzekelayo lubenzima ngakumbi, umz.
git bisect
luncedo oluncinci- luzakufumana kuphela ukudibanisa ukuzibophelela.
Ukukhutshwa kwakhona
- Uphinda-phinda wenza isebe langoku ngaphezulu kwesiseko sesebe emva kwenye.
- Ukuzibophelela okutsha ngee-SHA ezintsha kuyenziwa, okubangela ukuba ukuzinikela kwi-GitHub kuhambelane nezicelo zokuqala zokutsalwa, kodwa hayi izimvo ezihambelanayo.
- Izibophelelo zinokudityaniswa kwaye zilungiswe kwinkqubo, okanye zidityaniswe zibe nye.
- Iingxabano ezininzi zinokufuna ukusonjululwa.
- Ikuvumela ukuba ugcine ibali elinomgca.
- Ibali lisenokuba lula ukulifunda logama nje lingelide kakhulu ngaphandle kwesizathu esibambekayo.
- Ukulungisa okuzenzekelayo kunye nokusombulula ingxaki kulula kancinci: kwenza ukuba kwenzeke
git bisect
, inokwenza ukuba ii-rollbacks ezizenzekelayo zicace kwaye ziqikeleleke ngakumbi.
- Ifuna ukupapasha isebe elinezibophelelo ezifudukayo ezineflegi
--force
xa isetyenziswe kunye nezicelo zokutsalwa.
Ngokuqhelekileyo, amaqela avuma ukuhlala esebenzisa isicwangciso esifanayo xa efuna ukudibanisa utshintsho. Oku kunokuba "kusulungekile" ukudibanisa okanye "okusulungekileyo" ukuzibophelela phezulu, okanye into ephakathi, njengokwenza ukuzibophelela phezulu ngokusebenzisana (git rebase -i
) ekuhlaleni kumasebe angapapashwanga kwindawo yokugcina uluntu, kodwa adityaniselwe amasebe "oluntu".
Apha siza kusebenzisa ukudibanisa.
οΈUmsebenzi
- Qinisekisa ukuba ikhowudi ikwisebe lendawo
master
ihlaziywe ukusuka kwindawo yokugcina ekude. - Tshintshela kwisebe
feature
. - Qalisa ukudibanisa nesebe
master
. Impixano yokudibanisa ngenxa yotshintsho olukhuphisanayo kwici.md
. - Sombulula impixano ukuze zombini uluhlu lwethu lwamanyathelo eCI kunye nenqaku malunga nalo lihlale kwisicatshulwa.
- Papasha isibophelelo sokudibanisa kwisebe elikude
feature
. - Jonga imeko yesicelo sokutsala kwi-GitHub UI kwaye ulinde de udibaniso lusonjululwe.
Izixhobo
# Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π²Π΅ΡΠΊΠ΅ `master` ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½ ΠΈΠ· ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
git checkout master
git pull
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ feature
git checkout feature
# ΠΠ½ΠΈΡΠΈΠΈΡΡΠΉΡΠ΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Ρ Π²Π΅ΡΠΊΠΎΠΉ master
git merge master
# A merge conflict related to concurrent changes to ci.md will be reported
# => Auto-merging ci.md
# CONFLICT (content): Merge conflict in ci.md
# Automatic merge failed; fix conflicts and then commit the result.
# Π Π°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈ Π½Π°Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°Π³ΠΎΠ² CI, ΠΈ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ Π½Π΅ΠΌ ΠΎΡΡΠ°Π»ΠΈΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅.
# ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.md ΡΡΠΎΠ± ΠΎΠ½ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΠΌΠ°ΡΠΊΠ΅ΡΠΎΠ² ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ
git add ci.md
git merge --continue
# ΠΏΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
# ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ Π² ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΠΊΡ feature.
git push
# ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΠ°ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ GitHub, Π΄ΠΎΠΆΠ΄ΠΈΡΠ΅ΡΡ ΠΏΠΎΠΊΠ° ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ.
Umsebenzi omhle kakhulu!
Ugqibile ngoluhlu kwaye ngoku kufuneka uvume isicelo sokutsala ngaphakathi master
.
οΈ Umsebenzi: Vuma isicelo sokutsala "Amanyathelo ophononongo"
- Vula isicelo sokutsala.
- Cofa "Dibanisa isicelo sokutsala".
- Cofa "Qinisekisa ukudibanisa".
- Cofa u-"Delete branch" kuba asisayifuni.
Le yindawo yakho yokugcina okwangoku
Impazamo yemveliso
Kuthiwa βuvavanyo lunokusetyenziswa ukubonisa ubukho beempazamo, kodwa ungaze ubonise ukungabikho kwazo.β Nangona besinovavanyo kwaye abasibonisanga zimpazamo, ibug efihlakeleyo iye yangena kwimveliso.
Kwimeko efana nale, kufuneka sinyamekele:
- yintoni esasazwa kwimveliso;
- ikhowudi kumsonto
master
ngemposiso, apho abaphuhlisi banokuqala khona umsebenzi omtsha.
Ngaba kufuneka ndiyibuyisele umva okanye ndiyilungise kuhlelo olulandelayo?
Ukubuyisela umva yinkqubo yokuthumela inguqulelo eyaziwayo yangaphambili kwimveliso kunye nokubuyisela uxanduva oluqulethe impazamo. "Ukulungisa phambili" kukongeza ukulungiswa kwi master
kunye nokuhambisa inguqulelo entsha ngokukhawuleza. Ngenxa yokuba ii-APIs kunye nee-schemas zedatha zitshintsha njengoko ikhowudi ifakwe kwimveliso, kunye nokuhanjiswa okuqhubekayo kunye novavanyo oluhle lokuvavanya, ukubuyisela umva ngokuqhelekileyo kunzima kakhulu kwaye kuyingozi kunokulungisa kwinguqulo elandelayo.
Ekubeni ukubuyisela umva akuthwali nayiphi na ingozi kwimeko yethu, siya kuhamba ngale ndlela, kuba iyasivumela
- lungisa impazamo kwimveliso ngokukhawuleza;
- yenza ikhowudi ngaphakathi
master
ngokukhawuleza ilungele ukuqala umsebenzi omtsha.
οΈUmsebenzi
- Tshintshela kwisebe
master
ekuhlaleni. - Hlaziya ugcino lwasekuhlaleni ukusuka kwindawo yokugcina ekude.
- Buyisela isibophelelo sodibaniso lwePR Uphononongo lwamanyathelo Π²
master
. - Papasha utshintsho kwindawo yokugcina ekude.
Le yimbali yendawo yokugcina enesivumelwano sokudibanisa esibuyiselweyo
Izixhobo
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ master.
git checkout master
# ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈΠ· ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
git pull
# ΠΡΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ PR Steps review Π² master.
# ΠΡ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π²Π΅ΡΠΊΡ ΠΈΡΡΠΎΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π·Π°Ρ
ΠΎΡΠΈΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ
git show HEAD
# ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π² Π²Π΅ΡΠΊΠ΅ master Π΄ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ, Π±ΡΠ» ΠΎΡΠΎΠ±ΡΠ°ΠΆΡΠ½ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΌ
git revert HEAD -m 1
# ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²
# ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
git push
οΈ Ukuzivavanya
Qiniseka ukuba ci.md
ayisekho umbhalo othi "sneaky bug" emva kokubuyisela udibaniso lwesibophelelo.
Lungisa uluhlu lwamanyathelo eCI kwaye ulubuyisele kumphathi
Sisibuyisele ngokupheleleyo isibophelelo sokudityaniswa kwesebe. feature
. Iindaba ezimnandi zezokuba ngoku asinampazamo master
. Iindaba ezimbi zezokuba uluhlu lwethu oluxabisekileyo lwamanyathelo okudibanisa okuqhubekayo alusekho. Ke, ngokufanelekileyo, kufuneka sisebenzise ukulungiswa kwezibophelelo ukusuka feature
kwaye uzibuyisele ku master
kunye nokulungiswa.
Sinokuyijonga le ngxaki ngeendlela ezahlukeneyo:
- buyisela isibophelelo esirhoxisa udibaniso
feature
Ρmaster
; - intshukumo izibophelela ukusuka ekuqaleni
feature
.
Amaqela ahlukeneyo ophuhliso asebenzisa iindlela ezahlukeneyo kulo mzekelo, kodwa siya kuhambisa izinto eziluncedo kwisebe elahlukileyo kwaye senze isicelo esahlukileyo sokutsala eli sebe litsha.
οΈUmsebenzi
- Yenza umsonto obizwa ngokuba
feature-fix
kwaye utshintshele kuyo. -
Susa zonke izibophelelo ukusuka kwisebe langaphambili
feature
kumgca omtsha. Sombulula iingxabano zokudibanisa ezenzeke ngexesha lokufuduka. -
Yongeza uvavanyo lokuhlehla ku
ci.test.js
:it('does not contain the sneaky bug', () => { expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false); });
- Qhuba iimvavanyo endaweni ukuqinisekisa ukuba abasileli.
- Susa okubhaliweyo "nge-bug ekhohlisayo" kuyo
ci.md
. - Yongeza utshintsho lovavanyo kunye notshintsho loluhlu lwamanyathelo kwisalathiso kwaye uzibophelele.
- Papasha isebe kwindawo ekude yokugcina izinto.
Kuya kufuneka ugqibe ngento efana nale:
Izixhobo
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ feature-fix ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π½Π΅Π΅.
git checkout -b feature-fix
# ΠΠ΅ΡΠ΅Π½Π΅ΡΠΈΡΠ΅ Π²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈΠ· Π±ΡΠ²ΡΠ΅ΠΉ Π²Π΅ΡΠΊΠΈ feature Π² Π½ΠΎΠ²ΡΡ Π²Π΅ΡΠΊΡ. Π Π°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΡΠ»ΠΈΡΠ½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅.
# ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΡΡΠΎΡΠΈΡ ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Ρ
ΡΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²:
# - ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΠΏΠΈΡΠΊΠ°: C0
# - Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ°: C2
git log --oneline --graph
git cherry-pick C0..C2
# ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΡΠ»ΠΈΡΠ½ΠΈΡ
# - ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.md ΠΈ/ΠΈΠ»ΠΈ ci.test.js
# - Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² ΠΈΠ½Π΄Π΅ΠΊΡ
# - Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ "git cherry-pick --continue", ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΠ°
# ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ΅ΡΡ Π² ci.test.js
# ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
# Π£Π΄Π°Π»ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ " with a sneaky bug" Π² ci.md.
# ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ² ΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠ°Π³ΠΎΠ² ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΈΡ
.
git add ci.md ci.test.js
git commit -m "Fix the bug in steps list"
# ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ Π²Π΅ΡΠΊΡ Π² ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
git push --set-upstream origin feature-fix
Yenza isicelo sokutsala.
Yenza isicelo sokutsalwa ngesihloko Ukulungisa uphawu... Faka feature-fix
njenge "intloko yesebe" kunye master
njenge "base base".
Nceda ulinde ngelixa uvavanyo lugqityiwe. Ungabona ubume beemvavanyo ezantsi kwengxoxo yePR.
Qinisekisa ukuba uyifakile
master
kweyakhe ifolokhwe yokugcina "Njengesebe elisisiseko", andizukuphendula kwizicelo zotshintsho kwindawo yokugcina izinto zekhosi.
Vumela isicelo sokutsalwa "Ukulungisa isici"
Enkosi ngolungiso! Nceda uvume utshintsho kwi master
kwisicelo sokutsala.
οΈUmsebenzi
- Cofa "Dibanisa isicelo sokutsala".
- Cofa "Qinisekisa ukudibanisa".
- Cofa u-"Delete branch" kuba asisayifuni.
Le yinto ekufuneka ubenayo ngalo mzuzu.
Sivuyisana nawe!
Uwagqibile onke amanyathelo abantu abadla ngokuwathatha ngexesha lokudityaniswa okuqhubekayo.
Ukuba ubona naziphi na iingxaki ngekhosi okanye uyazi indlela yokuyiphucula, nceda wenze umba kuyo
umthombo: www.habr.com