Uyifundile imiyalo ye-Git kodwa ufuna ukucabanga ukuthi ukuhlanganiswa okuqhubekayo (CI) kusebenza kanjani empeleni? Noma mhlawumbe ufuna ukwandisa imisebenzi yakho yansuku zonke? Lesi sifundo sizokunikeza amakhono asebenzayo ekuhlanganiseni okuqhubekayo usebenzisa inqolobane ye-GitHub. Lesi sifundo asihloselwe ukuba isilekeleli ongakwazi ukumane uchofoze kuso; ngokuphambene nalokho, uzokwenza izinto ezifanayo nalezo abantu abazenzayo emsebenzini, ngendlela efanayo abazenza ngayo. Ngizochaza ithiyori njengoba uqhubeka nezinyathelo ezihilelekile.
Senzenjani?
Njengoba sithuthuka, kancane kancane sizodala uhlu lwezinyathelo ezijwayelekile ze-CI, okuyindlela enhle yokukhumbula lolu hlu. Ngamanye amazwi, sizodala uhlu lwezenzo ezithathwa onjiniyela ngenkathi benza ukuhlanganiswa okuqhubekayo, benza ukuhlanganisa okuqhubekayo. Sizophinda sisebenzise isethi elula yokuhlola ukusondeza inqubo yethu ye-CI kweyangempela.
Le GIF ikhombisa ngohlelo lokho okwenziwayo endaweni yakho yokugcina njengoba uqhubeka nesifundo. Njengoba ubona, akukho lutho oluyinkimbinkimbi lapha futhi kuphela oludingekayo kakhulu.
Uzodlula ezimeni ezilandelayo ezijwayelekile ze-CI:
- Sebenza kusici;
- Ukusetshenziswa kokuhlolwa okuzenzakalelayo ukuze kuqinisekiswe ikhwalithi;
- Ukuqaliswa komsebenzi oseqhulwini;
- Ukuxazulula ukungqubuzana lapho kuhlanganiswa amagatsha (hlanganisa ukungqubuzana);
- Iphutha lenzeka endaweni yokukhiqiza.
Uzofundani?
Uzokwazi ukuphendula imibuzo elandelayo:
- Kuyini ukuhlanganiswa okuqhubekayo (CI)?
- Yiziphi izinhlobo zokuhlola okuzenzakalelayo ezisetshenziswa ku-CI, futhi ekuphenduleni yiziphi izenzo ezicushwayo?
- Ziyini izicelo zokudonsa futhi zidingeka nini?
- Iyini i-Test Driven Development (TDD) futhi ihlobana kanjani ne-CI?
- Ingabe kufanele ngihlanganise noma ngehlise kabusha izinguquko?
- Buyisela emuva noma ulungise enguqulweni elandelayo?
Ekuqaleni ngahumusha izinto ezinjengokuthi "izicelo zokudonsa" yonke indawo, kodwa ngenxa yalokho nganquma ukubuyisela imishwana ngesiNgisi kwezinye izindawo ukuze nginciphise izinga lokuhlanya embhalweni. Ngezinye izikhathi ngizosebenzisa "umhleli wezinhlelo" njengesenzo esihle "sokuzinikela" lapho abantu besisebenzisa khona emsebenzini.
Kuyini ukuhlanganiswa okuqhubekayo?
Ukuhlanganisa Okuqhubekayo, noma i-CI, umkhuba wobuchwepheshe lapho ilungu ngalinye leqembu lihlanganisa ikhodi yalo endaweni yokugcina eyodwa okungenani kanye ngosuku, futhi ikhodi ewumphumela kufanele okungenani yakhiwe ngaphandle kwamaphutha.
Kukhona ukungaboni ngaso linye ngaleli gama
Iphuzu lombango imvamisa yokuhlanganisa. Abanye baphikisa ngokuthi ukuhlanganisa ikhodi kanye kuphela ngosuku akwanele ukuhlanganisa ngokuqhubekayo. Isibonelo sinikezwa ngeqembu lapho wonke umuntu ethatha ikhodi entsha ekuseni futhi ayihlanganise kanye kusihlwa. Nakuba lokhu kuwukuphikisa okunengqondo, ngokuvamile kunenkolelo yokuthi incazelo yosuku olulodwa iyasebenza ngokunengqondo, icacile, futhi ifanele amaqembu anosayizi abahlukahlukene.
Okunye ukuphikisa ukuthi i-C++ akuselona ukuphela kolimi olusetshenziswa ekuthuthukisweni, futhi nje ukudinga ukuhlangana okungenaphutha njengendlela yokuqinisekisa akunamandla. Olunye isethi yokuhlola (isibonelo, ukuhlolwa kweyunithi okwenziwa endaweni) kufanele futhi kuqedelwe ngempumelelo. Okwamanje, umphakathi usuphokophele ekwenzeni lokhu kube yisidingo, futhi esikhathini esizayo "ukwakha + ukuhlolwa kwamayunithi" cishe kuzoba umkhuba ojwayelekile, uma kungakenziwa.
Ukuhlanganisa Okuqhubekayo ehlukile ku- ukulethwa okuqhubekayo (Ukulethwa Okuqhubekayo, i-CD) ngoba ayidingi ikhandidethi lokukhishwa ngemva komjikelezo ngamunye wokuhlanganisa.
Uhlu lwezinyathelo esizozisebenzisa kuso sonke isifundo
- Donsa ikhodi yakamuva. Dala igatsha kusuka
master
. Qala ukusebenza. - Dala izibophezelo egatsheni lakho elisha. Yakha futhi uhlole endaweni. Dlula? Iya esinyathelweni esilandelayo. Yehlulekile? Lungisa amaphutha noma izivivinyo bese uzama futhi.
- Phusha uye endaweni yakho yokugcina ekude noma igatsha elikude.
- Dala isicelo sokudonsa. Xoxa ngezinguquko, engeza ezinye izibophezelo njengoba ingxoxo iqhubeka. Yenza ukuhlolwa kudlule egatsheni lesici.
- Hlanganisa/buyisela kabusha izibophezelo ezivela ku-master. Yenza ukuhlolwa kudlule kumphumela wokuhlanganisa.
- Khipha kusukela egatsheni lesici kuye ekukhiqizeni.
- Uma yonke into ihamba kahle ekukhiqizeni isikhathi esithile, hlanganisa izinguquko ukuze ube uchwepheshe.
οΈ Ukulungiselela
Qiniseka ukuthi unesofthiwe efanele
Ukuthatha lesi sifundo uzodinga
Ungasebenzisa noma yiliphi iklayenti le-Git, kodwa ngizonikeza imiyalo yomugqa womyalo kuphela.
Qiniseka ukuthi uneklayenti le-Git elifakiwe elisekela umugqa womyalo
Uma ungakabi nalo iklayenti le-Git elisekela umugqa womyalo, ungathola imiyalelo yokufaka
Lungiselela inqolobane
Uzodinga ukwenza ikhophi yomuntu siqu (imfoloko)
Kwenziwe? Uma ungakashintshi izilungiselelo ezizenzakalelayo, inqolobane yakho yezifundo cishe izobizwa continuous-integration-team-scenarios-students
, itholakala ku-akhawunti yakho ye-GitHub futhi i-URL ibonakala kanje
https://github.com/<Π²Π°ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° GitHub>/continuous-integration-team-scenarios-students
Ngizovele ngibize leli kheli <URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>
.
Abakaki be-engela like
<ΡΡΡ>
kuzosho ukuthi kufanele ubeke inani elifanele esikhundleni somusho onjalo.
Qiniseka ukuthi Izenzo ze-GitHub kufakwe kule nqolobane yezifundo. Uma zingenziwanga amandla, sicela uzinike amandla ngokuchofoza inkinobho enkulu phakathi nekhasi, ongafika kukho ngokuchofoza Izenzo kusixhumi esibonakalayo se-GitHub.
Ngeke ukwazi ukuqedela isifundo ngokulandela imiyalelo yami uma Izenzo ze-GitHub zinganikwanga amandla.
Ungahlala usebenzisa ikhono le-GitHub lokunikeza i-Markdown ukuze ubone isimo samanje sohlu esiluqamba lapha.
https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md
Mayelana nezimpendulo
Yize indlela engcono kakhulu yokuqeda lesi sifundo ukuzenzela wena, ungase ube nobunzima obuthile.
Uma unomuzwa wokuthi awuqondi ukuthi yini okufanele uyenze futhi awukwazi ukuqhubeka, ungabheka uchungechunge solution
, esendaweni yakho yokugcina.
Sicela ungahlanganisi solution
Π² master
phakathi nesifundo. Ungasebenzisa leli gatsha ukuthola ukuthi yini okufanele uyenze, noma uqhathanise ikhodi yakho neyombhali, usebenzisa wonke amakhono esiwanikezwa i-Git. Uma ulahlekile ngokuphelele, ungashintsha ngokuphelele igatsha lakho master
egatsheni solution
bese usetha kabusha uhla lwakho lokusebenza kusinyathelo sesifundo osidingayo.
Sebenzisa lokhu kuphela uma ukudinga ngempela
Faka ikhodi yakho
git add .
git commit -m "Backing up my work"
Le miyalo
- qamba kabusha
master
Π²master-backup
; - qamba kabusha
solution
Π²master
; - phuma uye egatsheni elisha
master
futhi ubhale kabusha okuqukethwe kohla lwemibhalo olusebenzayo; - Dala igatsha elithi "isixazululo" ukusuka kokuthi "master" (okwakukade kwaba "isixazululo") uma kwenzeka udinga igatsha "lesixazululo" ngokuzayo.
git branch -m master master-backup
git branch -m solution master
git checkout master -f
git branch solution
Ngemva kwalezi zinyathelo ungasebenzisa git log master
ukuthola ukuthi iyiphi inkontileka oyidingayo.
Ungasetha kabusha inkomba yakho yokusebenza kulokhu kuzinikela kanje:
git reset --hard <the SHA you need>
Uma ujabulile ngomphumela, ngesinye isikhathi uzodinga ukushicilela inguqulo yakho yenqolobane endaweni yokugcina ekude. Ungakhohlwa ukucacisa ngokusobala igatsha elikude lapho wenza lokhu.
git push --force origin master
Sicela uqaphele ukuthi sisebenzisa git push --force
. Mancane amathuba okuthi uzofuna ukwenza lokhu kaningi, kodwa sinesimo esicacile lapha ngomsebenzisi oyedwa oyinqolobane, ngaphezu kwalokho, oqondayo ukuthi wenzani.
Iqala ukusebenza
Ake siqale ukuhlanganisa uhlu lwethu lwezinyathelo ze-CI. Ngokuvamile ungaqala lesi sinyathelo ngokubheka inguqulo yakamuva yekhodi esendaweni yenqolobane ekude, kodwa asikabi nayo inqolobane yasendaweni, ngakho-ke siyihlanganisa ukusuka kwesikude kunalokho.
οΈ Umsebenzi: buyekeza inqolobane yendawo, dala igatsha kusuka master
, qala ukusebenza
- Khipha inqolobane yesifundo kusuka
<URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>
. - Gijima
npm install
kumkhombandlela wenqolobane yezifundo; Siyidinga ukufaka i-Jest, esiyisebenzisela ukwenza izivivinyo. - Dala igatsha futhi uliqambe
feature
. Shintshela kulolu chungechunge. -
Engeza ikhodi yokuhlola ku
ci.test.js
phakathi kwamazwana engicela ukuthi ngenze lokhu.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); });
- Engeza umbhalo ngezinyathelo ezi-4 zokuqala efayeleni
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.
ΠΠΎΠΌΠ°Π½Π΄Ρ
# ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΊΡΡΡΠ°
git clone <repository URL>
cd <repository name>
# ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ npm install Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΊΡΡΡΠ°; ΠΎΠ½ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Jest, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ².
npm install
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ feature. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° ΡΡΡ Π² Π²Π΅ΡΠΊΡ.
git checkout -b feature
# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.test.js ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅.
# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.md ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
Dala ukuzibophezela egatsheni elisha, yakha futhi uhlole endaweni
Sizosetha ukuhlolwa okuzokwenziwa ngaphambi kokwenza, bese sifaka ikhodi.
Izimo ezijwayelekile lapho ukuhlola kusebenza ngokuzenzakalelayo
- Endaweni:
- Ngokuqhubekayo noma ekuphenduleni izinguquko ezifanele zamakhodi;
- Ekulondolozeni (ngolimi olutolikiwe noma oluhlanganiswe nge-JIT);
- Ngesikhathi sokuhlanganiswa (lapho ukuhlanganiswa kuyadingeka);
- Ekuzinikeleni;
- Lapho ushicilela endaweni yokugcina okwabelwana ngayo.
- Kuseva yokwakha noma indawo yokwakha:
- Lapho ikhodi ishicilelwa egatsheni/inqolobane yomuntu siqu.
- Ikhodi kulolu chungechunge iyahlolwa.
- Umphumela ongaba khona wokuhlanganisa uyahlolwa (ngokuvamile nge
master
). - Njengesigaba sokuhlanganisa esiqhubekayo/ipayipi lokulethwa okuqhubekayo
Ngokuvamile, lapho i-test suite igijima ngokushesha, yilapho ungakwazi ukukwazi ukuyiqhuba kaningi. Ukusatshalaliswa kwesiteji okujwayelekile kungase kubukeke kanje.
- Ukuhlolwa kweyunithi okusheshayo - ngesikhathi sokwakha, epayipini le-CI
- Ukuhlolwa kweyunithi okunensayo, ingxenye esheshayo nokuhlolwa kokuhlanganiswa - ekuzinikeleni, emgqeni we-CI
- Ukuhlolwa kwengxenye ehamba kancane nokuhlanganiswa - epayipini le-CI
- Ukuhlolwa kokuphepha, ukuhlolwa komthwalo nokunye ukuhlola okudla isikhathi noma okumba eqolo - kumapayipi e-CI/CD, kodwa kuphela kumamodi/izigaba/amapayipi athile okwakha, isibonelo, lapho ulungiselela ikhandidethi lokukhishwa noma lapho usebenza mathupha.
οΈUmsebenzi
Ngiphakamisa ukuthi wenze izivivinyo mathupha kuqala usebenzisa umyalo npm test
. Ngemuva kwalokho, ake sengeze i-git hook ukuze senze izivivinyo zethu ngokuzibophezela. Kukhona okukodwa okubanjwayo: Izingwegwe ze-Git azithathwa njengengxenye yendawo yokugcina impahla ngakho-ke azikwazi ukuqanjwa kusuka ku-GitHub kanye nezinye izinto zokufunda. Ukufaka i-hook udinga ukugijima install_hook.sh
noma kopisha ifayela repo/hooks/pre-commit
kunkomba yendawo .git/hooks/
.
Uma uzibophezela, uzobona ukuthi ukuhlolwa kuyenziwa futhi bayahlola ukuze babone ukuthi amagama angukhiye athile akhona yini ohlwini.
- Yenza izivivinyo mathupha ngokusebenzisa umyalo
npm test
kufolda yenqolobane yesifundo sakho. Qinisekisa ukuthi ukuhlola sekuqediwe. - Setha ihuku lokuzibophezela (ukuzibophezela kwangaphambili) ngokugijima
install_hook.sh
. - Nikeza izinguquko zakho kunqolobane yakho yasendaweni.
- Qinisekisa ukuthi ukuhlolwa kwenziwa ngaphambi kokuzibophezela.
Indawo yakho yokugcina izinto kufanele ibukeke kanje ngemva kokulandela lezi zinyathelo.
ΠΠΎΠΌΠ°Π½Π΄Ρ
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ pre-commit hook Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² install_hook.sh.
# ΠΠ°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ "Add first CI steps" Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ΅.
git add ci.md ci.test.js
git commit -m "Add first CI steps"
# Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ.
Shicilela ikhodi endaweni yokugcina eyihlane noma egatsheni elikude
Uma sebeqedile ukusebenza endaweni, onjiniyela ngokuvamile benza ikhodi yabo itholakale esidlangalaleni ukuze igcine ihlanganiswe nomphakathi. Nge-GitHub, lokhu ngokuvamile kufinyelelwa ngokushicilela umsebenzi kukhophi yomuntu siqu yendawo yokugcina (imfoloko yomuntu siqu) noma igatsha lomuntu siqu.
- Ngezimfoloko, umthuthukisi uhlanganisa inqolobane eyabelwe ekude, enze ikhophi yayo yomuntu siqu ekude, eyaziwa nangokuthi imfoloko. Bese ihlanganisa le nqolobane yomuntu siqu ukuze isebenze nayo endaweni. Lapho umsebenzi usuqediwe futhi kwenziwa izibophezelo, uziphusha emfolokoni yakhe, lapho zitholakala khona kwabanye futhi zingahlanganiswa endaweni yokugcina abantu. Le ndlela ivame ukusetshenziswa kumaphrojekthi womthombo ovulekile ku-GitHub. Ibuye isetshenziswe esifundweni sami esithuthukile [Umsebenzi Wethimba kanye ne-CI nge-Git] (
http://devops.redpill.solutions/ ). - Enye indlela iwukusebenzisa inqolobane eyodwa kuphela ekude nokubala igatsha kuphela
master
inqolobane eyabelwe "evikelwe". Kulesi simo, onjiniyela ngabanye bashicilela amakhodi abo emagatsheni ekhosombe elikude ukuze abanye bakwazi ukubheka le khodi, uma yonke into ihlelekile, bayihlanganise nayo.master
inqolobane eyabelwe.
Kulesi sifundo, sizosebenzisa ukugeleza komsebenzi okusebenzisa amagatsha.
Asishicilele ikhodi yethu.
οΈUmsebenzi
- Shicilela izinguquko egatsheni elikude elinegama elifanayo nelegatsha lakho elisebenzayo
ΠΠΎΠΌΠ°Π½Π΄Ρ
git push --set-upstream origin feature
Dala isicelo sokudonsa
Dala isicelo sokudonsa ngesihloko Izinyathelo zokubuyekeza. Faka feature
njenge "head branch" kanye master
njengokuthi "igatsha lesisekelo".
Qiniseka ukuthi uyifakile
master
kweyakhe foloko inqolobane "Njengegatsha eliyisisekelo", ngeke ngiphendule izicelo zoshintsho endaweni yokugcina izinto zesifundo.
Ngolimi lwe-GitHub, "igatsha eliyisisekelo" igatsha osekela kulo umsebenzi wakho, futhi "igatsha eliyinhloko" igatsha eliqukethe izinguquko ezihlongozwayo.
Xoxa ngezinguquko, engeza ukuzibophezela okusha njengoba ingxoxo iqhubeka
Donsela isicelo(PR)
Donsela isicelo(PR) kuyindlela yokuxoxa nokubhala ikhodi, kanye nokwenza ukubuyekezwa kwekhodi. Izicelo zokudonsa ziqanjwe ngendlela evamile yokuhlanganisa izinguquko zomuntu ngamunye kukhodi iyonke. Ngokuvamile, umuntu uhlanganisa inqolobane esemthethweni ekude yephrojekthi futhi asebenze ngekhodi endaweni. Ngemuva kwalokhu, ubeka ikhodi endaweni yakhe yokugcina ekude futhi acele labo ababhekele inqolobane esemthethweni ukuthi bayithathe(Donsa) ikhodi yayo kumakhosombe wendawo, lapho bebuyekeza khona futhi mhlawumbe bahlanganise (hlanganisa) yakhe. Lo mqondo waziwa nangamanye amagama, isibonelo, hlanganisa isicelo.
Awudingi ukusebenzisa isici sesicelo sokudonsa se-GitHub noma amapulatifomu afanayo. Amaqembu okuthuthukisa angase asebenzise ezinye izindlela zokuxhumana, okuhlanganisa ukuxhumana ubuso nobuso, izingcingo zezwi, noma i-imeyili, kodwa kusenezizathu eziningi zokusebenzisa izicelo zokudonsa ngendlela yenkundla. Nazi ezinye zazo:
- izingxoxo ezihleliwe ezihlobene nezinguquko ezithile zekhodi;
- njengendawo yokubuka impendulo mayelana nomsebenzi osaqhubekayo kubo bobabili abahlola ngokuzenzakalelayo kanye nontanga;
- ukwenziwa ngokusemthethweni kokubuyekezwa kwekhodi;
- ukuze kamuva ukwazi ukuthola izizathu nokucatshangelwa ngemuva kwalokhu noma leyo ngxenye yekhodi.
Ngokuvamile udala isicelo sokudonsa lapho udinga ukuxoxa ngokuthile noma uthole impendulo. Isibonelo, uma usebenza ngesici esingase sisetshenziswe ngezindlela ezingaphezu kweyodwa, ungakha isicelo sokudonsa ngaphambi kokubhala umugqa wokuqala wekhodi ukuze wabelane ngemibono yakho futhi uxoxe ngezinhlelo zakho nabahlanganyeli bakho. Uma umsebenzi ulula, isicelo sokudonsa sivulwa lapho okuthile sekwenziwe, kuzibophezele, futhi kungaxoxwa ngakho. Kwezinye izimo, ungase ufune ukuvula i-PR kuphela ngezizathu zokulawula ikhwalithi: ukwenza izivivinyo ezizenzakalelayo noma ukuqalisa ukubuyekezwa kwekhodi. Noma ngabe yini oyinqumayo, ungakhohlwa @sho abantu abafuna ukuvunyelwa kwabo esicelweni sakho sokudonsa.
Ngokuvamile, lapho udala i-PR, wenza okulandelayo.
- Khomba ukuthi yini ohlongoza ukuyishintsha futhi kuphi.
- Bhala incazelo echaza inhloso yezinguquko. Ungase ufune:
- engeza noma yini ebalulekile engabonakali ekhodini, noma okuthile okuwusizo ekuqondeni umongo, njengokuthi #bugs kanye nezinombolo zokuzibophezela ezifanele;
- @mention noma ubani ofuna ukuqala ukusebenza naye, noma unga @mention emazwaneni kamuva;
- cela ozakwabo ukuthi basize ngokuthile noma bahlole okuthile okuqondile.
Uma usuvule i-PR, ukuhlola okulungiselelwe ukuthi kusebenze ezimeni ezinjalo kuyenziwa. Esimweni sethu, lokhu kuzoba isethi efanayo yokuhlola esiye sagijima endaweni, kodwa kuphrojekthi yangempela kungase kube nokuhlolwa nokuhlolwa okwengeziwe.
Sicela ulinde ngenkathi ukuhlolwa kuqedwa. Ungabona isimo sokuhlolwa ngezansi kwengxoxo ye-PR kusixhumi esibonakalayo se-GitHub. Qhubeka uma ukuhlolwa sekuqediwe.
οΈ Engeza inothi mayelana nokungahleliwe kohlu lwezinyathelo ze-CI
Uhlu olusetshenziswe kulesi sifundo alunasizathu futhi luzimele, kufanele sengeze inothi ngalokhu.
οΈ Umsebenzi: dala isicelo sokudonsa kulawa mazwana
- Shintshela egatsheni
master
. - Dala igatsha elinegama
bugfix
. - Engeza umbhalo wenothi ekupheleni kwefayela
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 izinguquko.
- Shicilela uchungechunge
bugfix
endaweni yokugcina ekude. - Dala isicelo sokudonsa esiqanjwe Ukwengeza ukuphawula ngenhloko yegatsha
bugfix
kanye negatsha lesisekelomaster
.
Qiniseka ukuthi uyifakile
master
kweyakhe foloko inqolobane "Njengegatsha eliyisisekelo", ngeke ngiphendule izicelo zoshintsho endaweni yokugcina izinto zesifundo.
Yile ndlela inqolobane yakho okufanele ibukeke ngayo.
ΠΠΎΠΌΠ°Π½Π΄Ρ
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ 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 ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
Vumela isicelo sokudonsa "Ukwengeza ukuphawula"
οΈUmsebenzi
- Dala isicelo sokudonsa.
- Chofoza okuthi "Hlanganisa isicelo sokudonsa".
- Chofoza "Qinisekisa ukuhlanganisa".
- Chofoza okuthi "Susa igatsha", asisakudingi.
Lona umdwebo wokuzibophezela ngemva kokuhlanganisa.
οΈ Qhubeka usebenza futhi wengeza izivivinyo
Ukubambisana esicelweni sokudonsa kuvame ukuholela emsebenzini owengeziwe. Ngokuvamile lokhu kuwumphumela wokubuyekezwa kwekhodi noma ingxoxo, kodwa esifundweni sethu sizobonisa lokhu ngokungeza izinto ezintsha ohlwini lwethu lwezinyathelo ze-CI.
Ukuhlanganiswa okuqhubekayo kuvame ukubandakanya ukuhlolwa okuthile. Izidingo zokufakwa kokuhlolwa ziyahlukahluka futhi ngokuvamile zitholakala kudokhumenti ebizwa ngokuthile "njengemihlahlandlela yomnikelo". Sizokugcina kulula futhi sengeze ukuhlolwa komugqa ngamunye ohlwini lwethu lokuhlola.
Lapho wenza imisebenzi ezokwenziwa, zama ukwenza izivivinyo kuqala. Uma ufake kahle pre-commit
hook ngaphambili, ukuhlolwa okusha okungeziwe kuzokwenziwa, kuzohluleka, futhi akukho lutho oluzokwenziwa. Qaphela ukuthi le yindlela esazi ngayo ukuthi izivivinyo zethu empeleni zihlola okuthile. Kuyathakazelisa ukuthi uma siqale ngekhodi ngaphambi kokuhlolwa, ukuphumelela izivivinyo kungase kusho ukuthi ikhodi isebenze njengoba bekulindelekile, noma ukuthi ukuhlolwa bekungahloli lutho. Ngaphezu kwalokho, ukube asizange sizibhale izivivinyo kwasekuqaleni, ngabe sesizikhohliwe ngokuphelele, ngoba akukho obekuzosikhumbuza ngakho.
I-Test Driven Development (TDD)
I-TDD incoma ukubhala izivivinyo ngaphambi kwekhodi. Ukugeleza komsebenzi okuvamile usebenzisa i-TDD kubukeka kanje.
- Engeza isivivinyo.
- Yenza zonke izivivinyo futhi uqinisekise ukuthi uhlolo olusha luyahluleka.
- Bhala ikhodi.
- Yenza izivivinyo, qiniseka ukuthi zonke izivivinyo ziyaphumelela.
- Yenza kabusha ikhodi yakho.
- Phinda.
Ngenxa yokuthi imiphumela yokuhlolwa okungaphumeleli ngokuvamile iboniswa ngokubomvu, futhi leyo ephumelele ngokuvamile iboniswa ngohlaza, umjikelezo waziwa nangokuthi i-red-green-refactor.
οΈUmsebenzi
Okokuqala, zama ukwenza izivivinyo futhi uzivumele zehluleke, bese wengeza futhi uhambise umbhalo wohlu lwezinyathelo ze-CI ngokwalo. Uzobona ukuthi izivivinyo ziyadlula ("green").
Bese ushicilela ikhodi entsha endaweni yokugcina ekude futhi ubuke izivivinyo zisebenza kusixhumi esibonakalayo se-GitHub ngezansi kwengxoxo yesicelo sokudonsa kanye nokubuyekezwa kwesimo se-PR.
- Shintshela egatsheni
feature
. -
Engeza lezi zivivinyo ku
ci.test.js
ngemva kocingo lokugcinait (...);
.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 izivivinyo. Uma
pre-commit
i-hook ifakiwe, umzamo wokuzibophezela uzohluleka. - Bese wengeza 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 futhi wenze izinguquko endaweni.
- Thumela izinguquko egatsheni
feature
.
Manje kufanele ube nento efana nalena
ΠΠΎΠΌΠ°Π½Π΄Ρ
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π° Π²Π΅ΡΠΊΡ 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
Hlanganisa ukungqubuzana
Iya kokuthi Shintsha Isicelo Izinyathelo zokubuyekeza.
Nakuba singenzanga lutho olungalungile futhi nokuhlolwa kwekhodi yethu kwaphumelela, asikwazi ukuhlanganisa igatsha feature
ΠΈ master
. Kungenxa yokuthi omunye uchungechunge bugfix
yahlanganiswa ne master
ngenkathi sisasebenza kule PR.
Lokhu kudala isimo lapho igatsha elikude master
inenguqulo entsha kunalena esisekelwe kuyo igatsha feature
. Ngenxa yalokhu asikwazi nje ukuhlehlisa INHLOKO master
kuze kube sekupheleni kwentambo feature
. Kulesi simo, sidinga ukuhlanganisa noma ukufaka izicelo feature
hlehlisa master
. I-GitHub ingakwazi ukwenza ukuhlanganisa okuzenzakalelayo uma kungekho ukungqubuzana. Maye, esimweni sethu, womabili amagatsha anezinguquko eziqhudelanayo efayeleni ci.md
. Lesi simo saziwa njengengxabano yokuhlanganisa, futhi sidinga ukusixazulula mathupha.
Hlanganisa noma hlehlisa
Hlanganisa
- Idala isibopho esingeziwe sokuhlanganisa futhi ilondoloza umlando womsebenzi.
- Ilondoloza imisebenzi yoqobo yamagatsha ngezitembu zesikhathi zangempela nababhali.
- Ilondoloza i-SHA yezibopho futhi ixhuma kuzo ezingxoxweni zesicelo soshintsho.
- Idinga ukuxazululwa kwengxabano ngesikhathi esisodwa.
- Yenza indaba ingabi yomugqa.
- Indaba ingaba nzima ukuyifunda ngenxa yenani elikhulu lamagatsha (okukhumbuza ikhebula le-IDE).
- Yenza ukulungisa iphutha okuzenzakalelayo kube nzima kakhulu, isb.
git bisect
awusizo kangako - izothola kuphela isivumelwano sokuhlanganisa.
Phinda ukhiphe
- Ukudlala kabusha kwenziwa kusukela egatsheni lamanje phezu kwegatsha eliyisisekelo ngokulandelana.
- Ukuzibophezela okusha nama-SHA amasha kuyakhiqizwa, okubangela ukuthi ukuzibophezela ku-GitHub kufane nezicelo zangempela zokudonsa, kodwa hhayi amazwana ahambisanayo.
- Ukuzibophezela kungenziwa kabusha futhi kulungiswe ohlelweni, noma kuhlanganiswe kube kokukodwa.
- Izingxabano eziningi zingadinga ukuxazululwa.
- Ikuvumela ukuthi ugcine indaba yomugqa.
- Indaba ingase ibe lula ukuyifunda inqobo nje uma ingende kakhulu ngaphandle kwesizathu esizwakalayo.
- Ukulungisa iphutha okuzenzakalelayo nokuxazulula inkinga kulula kancane: kwenza kwenzeke
git bisect
, ingenza ukubuyisela emuva okuzenzakalelayo kucace futhi kubikezelwe.
- Idinga ukushicilela igatsha elinezibopho ezifudukayo ezinefulegi
--force
lapho isetshenziswa nezicelo zokudonsa.
Ngokuvamile, amaqembu avuma ukusebenzisa isu elifanayo lapho edinga ukuhlanganisa izinguquko. Lokhu kungaba ukuhlanganisa "okumsulwa" noma ukuzibophezela "okumsulwa" phezulu, noma okuthile phakathi, njengokwenza isibopho phezulu ngokuhlanganyela(git rebase -i
) endaweni yamagatsha angashicilelwe endaweni yokugcina umphakathi, kodwa ahlanganiswe amagatsha "asesidlangalaleni".
Lapha sizosebenzisa ukuhlanganisa.
οΈUmsebenzi
- Qiniseka ukuthi ikhodi isegatsheni lasendaweni
master
kubuyekezwe kusuka endaweni yokugcina eyihlane. - Shintshela egatsheni
feature
. - Qala ukuhlanganisa negatsha
master
. Ukuhlanganisa ukungqubuzana ngenxa yezinguquko ezincintisanayo ku-ci.md
. - Xazulula ukungqubuzana ukuze kokubili uhlu lwethu lwezinyathelo ze-CI nenothi elimayelana nakho kuhlale embhalweni.
- Shicilela isivumelwano sokuhlanganisa egatsheni elikude
feature
. - Hlola isimo sesicelo sokudonsa ku-GitHub UI bese ulinda kuze kube yilapho ukuhlanganisa sekuxazululiwe.
ΠΠΎΠΌΠ°Π½Π΄Ρ
# Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π²Π΅ΡΠΊΠ΅ `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 omuhle!
Usuqedile ngohlu futhi manje udinga ukugunyaza isicelo sokudonsa master
.
οΈ Umsebenzi: Vuma isicelo sokudonsa "Ukubuyekezwa kwezinyathelo"
- Vula isicelo sokudonsa.
- Chofoza okuthi "Hlanganisa isicelo sokudonsa".
- Chofoza "Qinisekisa ukuhlanganisa".
- Chofoza okuthi "Susa igatsha" njengoba singasalidingi.
Lena inqolobane yakho okwamanje
Iphutha lomkhiqizo
Kuthiwa βukuhlola kungasetshenziselwa ukubonisa ukuba khona kwamaphutha, kodwa ungalokothi ubonise ukungabikho kwawo.β Noma sibe nezivivinyo futhi azizange zisibonise amaphutha, iphutha elicashile lingene ekukhiqizweni.
Esimweni esinjengalesi, sidinga ukunakekela:
- yini etshalwe ekukhiqizeni;
- ikhodi emgqeni
master
ngephutha, lapho onjiniyela bangaqala khona umsebenzi omusha.
Ingabe kufanele ngiyibuyisele emuva noma ngiyilungise enguqulweni elandelayo?
Ukuhlehla kuyinqubo yokuthumela inguqulo yangaphambili eyaziwayo enhle ekukhiqizeni nasekubuyiseleni imisebenzi equkethe iphutha. "Ukulungisa phambili" kungukungezwa kokulungiswa kwe master
kanye nokusebenzisa inguqulo entsha ngokushesha okukhulu. Ngenxa yokuthi ama-API nezikimu zesizindalwazi ziyashintsha njengoba ikhodi idluliselwa ekukhiqizweni, ngokulethwa okuqhubekayo nokufakwa kahle kokuhlolwa, ukuhlehla ngokuvamile kunzima kakhulu futhi kuyingozi kunokuyilungisa enguqulweni elandelayo.
Njengoba ukuhlehla akuthwali ingozi kithi, sizohamba lo mzila, ngoba uyasivumela
- lungisa iphutha kumkhiqizo ngokushesha ngangokunokwenzeka;
- faka ikhodi
master
ngokushesha ilungele ukuqala umsebenzi omusha.
οΈUmsebenzi
- Shintshela egatsheni
master
endaweni. - Buyekeza inqolobane yasendaweni kusuka endaweni yokugcina ekude.
- Buyisela isivumelwano sokuhlanganisa se-PR Izinyathelo zokubuyekeza Π²
master
. - Shicilela izinguquko kwikhosombe elikude.
Lona umlando wenqolobane enesibopho esihlanganisiwe esibuyiselwe
ΠΠΎΠΌΠ°Π½Π΄Ρ
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ master.
git checkout master
# ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈΠ· ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
git pull
# ΠΡΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ PR Steps review Π² master.
# ΠΡ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π²Π΅ΡΠΊΡ ΠΈΡΡΠΎΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π·Π°Ρ
ΠΎΡΠΈΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ
git show HEAD
# ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π² Π²Π΅ΡΠΊΠ΅ master Π΄ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ, Π±ΡΠ» ΠΎΡΠΎΠ±ΡΠ°ΠΆΡΠ½ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΌ
git revert HEAD -m 1
# ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²
# ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
git push
οΈ Zihlole
Qiniseka ukuthi ci.md
awusaqukethe umbhalo othi "sneaky bug" ngemva kokubuyisela isivumelwano sokuhlanganisa.
Lungisa uhlu lwezinyathelo ze-CI futhi ulubuyisele kokuthi okuyinhloko
Sikubuyisele ngokuphelele isivumelwano sokuhlanganisa segatsha. feature
. Izindaba ezinhle ukuthi manje asinalo iphutha kulo master
. Izindaba ezimbi ukuthi uhlu lwethu oluyigugu lwezinyathelo zokuhlanganisa eziqhubekayo nalo alusekho. Ngakho-ke, ngokufanelekile, sidinga ukusebenzisa ukulungiswa kokusebenza kusuka feature
bese ubabuyisela ku master
kanye nokulungiswa.
Singabhekana nenkinga ngezindlela ezahlukene:
- buyisela isibopho esihlehlisa ukuhlanganisa
feature
Ρmaster
; - ukuthutha kuzibophezela kusukela kwasekuqaleni
feature
.
Amaqembu ahlukene okuthuthukisa asebenzisa izindlela ezihlukene kulesi simo, kodwa sizohambisa izibopho eziwusizo egatsheni elihlukile futhi sidale isicelo esihlukile sokudonsa saleli gatsha elisha.
οΈUmsebenzi
- Dala intambo ebizwa
feature-fix
bese ushintshela kuyo. -
Thutha zonke izibophezelo kusuka egatsheni langaphambili
feature
kuchungechunge olusha. Xazulula izingxabano zokuhlanganisa ezenzeke ngesikhathi sokufuduka. -
Engeza ukuhlolwa kokuhlehla ku
ci.test.js
:it('does not contain the sneaky bug', () => { expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false); });
- Yenza izivivinyo endaweni ukuze wenze isiqiniseko sokuthi awehluleki.
- Susa umbhalo othi "ngesiphazamisi esikhohlisayo" phakathi
ci.md
. - Engeza izinguquko zokuhlola kanye nezinguquko zohlu lwezinyathelo kunkomba futhi uzibophezele.
- Shicilela igatsha endaweni yokugcina ekude.
Kufanele ugcine ngokufana nalokhu:
ΠΠΎΠΌΠ°Π½Π΄Ρ
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 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
Dala isicelo sokudonsa.
Dala isicelo sokudonsa ngesihloko Ukulungisa isici. Faka feature-fix
njenge "head branch" kanye master
njengokuthi "igatsha lesisekelo".
Sicela ulinde ngenkathi ukuhlola kuqeda. Ungabona isimo sokuhlolwa ezansi kwengxoxo ye-PR.
Qiniseka ukuthi uyifakile
master
kweyakhe foloko inqolobane "Njengegatsha eliyisisekelo", ngeke ngiphendule izicelo zoshintsho endaweni yokugcina izinto zesifundo.
Gunyaza isicelo sokudonsa "Ukulungisa isici"
Siyabonga ngokulungisa! Sicela ugunyaze izinguquko ku master
kusuka kusicelo sokudonsa.
οΈUmsebenzi
- Chofoza okuthi "Hlanganisa isicelo sokudonsa".
- Chofoza "Qinisekisa ukuhlanganisa".
- Chofoza okuthi "Susa igatsha" njengoba singasalidingi.
Yilokhu okufanele ube nakho njengamanje.
Siyakuhalalisela!
Uqedele zonke izinyathelo abantu abajwayele ukuzithatha ngesikhathi sokuhlanganiswa okuqhubekayo.
Uma ubona izinkinga ngesifundo noma wazi ukuthi ungayithuthukisa kanjani, sicela udale inkinga kuyo
Source: www.habr.com