Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Nakat-on ka ba sa mga sugo sa Git apan gusto nimong mahanduraw kung giunsa ang padayon nga panagsama (CI) molihok sa tinuud? O tingali gusto nimo nga ma-optimize ang imong adlaw-adlaw nga mga kalihokan? Kini nga kurso maghatag kanimo ug praktikal nga kahanas sa padayon nga paghiusa gamit ang usa ka GitHub repository. Kini nga kurso wala gituyo aron mahimong usa ka wizard nga mahimo nimong i-klik lamang; sa kasukwahi, buhaton nimo ang parehas nga mga aksyon nga aktwal nga gibuhat sa mga tawo sa trabaho, sa parehas nga paagi nga ilang gibuhat kini. Akong ipatin-aw ang teorya sa imong pag-agi sa mga lakang nga nalangkit.

Unsay atong buhaton?

Samtang nag-uswag kami, anam-anam kami nga maghimo usa ka lista sa kasagaran nga mga lakang sa CI, nga usa ka maayong paagi sa paghinumdom niini nga lista. Sa laing pagkasulti, maghimo kami usa ka lista sa mga aksyon nga gihimo sa mga developer samtang naghimo sa padayon nga panagsama, paghimo sa padayon nga panagsama. Maggamit usab kami og usa ka yano nga hugpong sa mga pagsulay aron mapaduol ang among proseso sa CI sa tinuod.

Kini nga GIF eskematiko nga nagpakita sa mga commit sa imong repository samtang nag-uswag ka sa kurso. Sama sa imong nakita, wala’y komplikado dinhi ug ang labing kinahanglan.

Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Moagi ka sa mosunod nga sumbanan nga mga senaryo sa CI:

  • Pagtrabaho sa usa ka bahin;
  • Paggamit sa mga automated nga pagsulay aron masiguro ang kalidad;
  • Pagpatuman sa prayoridad nga buluhaton;
  • Resolusyon sa panagbangi kung maghiusa sa mga sanga (paghiusa sa panagbangi);
  • Usa ka sayup ang mahitabo sa usa ka palibot sa produksiyon.

Unsay imong makat-onan?

Makatubag ka sa mosunod nga mga pangutana:

  • Unsa ang padayon nga panagsama (CI)?
  • Unsa nga mga matang sa mga automated nga pagsulay ang gigamit sa CI, ug agig tubag sa unsa nga mga aksyon ang ilang gi-trigger?
  • Unsa ang mga hangyo sa pagbitad ug kanus-a kini gikinahanglan?
  • Unsa ang Test Driven Development (TDD) ug unsa ang kalabotan niini sa CI?
  • Kinahanglan ba nako nga i-merge o i-rebase ang mga pagbag-o?
  • Ibalik o ayuhon sa sunod nga bersyon?

Sa sinugdan gihubad nako ang mga butang sama sa "mga hangyo sa pagbira" bisan diin, apan ingon usa ka sangputanan nakahukom ako nga ibalik ang mga prase sa English sa pipila ka mga lugar aron makunhuran ang lebel sa kabuang sa teksto. Gigamit nako usahay ang "programmer surzhik" sama sa nindot nga berbo nga "commit" diin gigamit kini sa mga tawo sa trabaho.

Unsa ang padayon nga panagsama?

Padayon nga Paghiusa, o CI, usa ka teknikal nga praktis diin ang matag membro sa team nag-integrate sa ilang code ngadto sa usa ka komon nga repository labing menos kausa sa usa ka adlaw, ug ang resulta nga code kinahanglang matukod nga walay mga sayop.

Adunay mga dili pagsinabtanay bahin niini nga termino

Ang punto sa panagbingkil mao ang frequency sa integration. Ang uban nangatarungan nga ang paghiusa sa kodigo kausa lang sa usa ka adlaw dili igo aron tinuud nga mahiusa nga padayon. Usa ka pananglitan ang gihatag sa usa ka team diin ang tanan magkuha ug lab-as nga code sa buntag ug i-integrate kini kausa sa gabii. Samtang kini usa ka makatarunganon nga pagsupak, kasagaran nga gituohan nga ang kausa sa usa ka adlaw nga kahulugan makatarunganon nga praktikal, piho, ug angay alang sa mga grupo nga lainlain ang gidak-on.

Ang laing pagsupak mao nga ang C ++ dili na mao lamang ang pinulongan nga gigamit sa pag-uswag, ug ang yano nga nanginahanglan nga wala’y sayup nga asembliya ingon usa ka paagi sa pag-validate huyang. Ang pila ka set sa mga pagsulay (pananglitan, mga pagsulay sa yunit nga gihimo sa lokal) kinahanglan usab nga makompleto nga malampuson. Sa pagkakaron, ang komunidad naglihok sa paghimo niini nga usa ka kinahanglanon, ug sa umaabot nga "pagtukod + mga pagsulay sa yunit" lagmit mahimong komon nga praktis, kung wala pa.

Padayon nga Paghiusa lahi sa padayon nga suplay (Continuous Delivery, CD) kay wala kini magkinahanglan ug release candidate human sa matag integration cycle.

Listahan sa mga lakang nga atong gamiton sa tibuok kurso

  1. Kuhaa ang pinakabag-o nga code. Paghimo og sanga gikan sa master. Pagsugod sa pagtrabaho.
  2. Paghimo og mga pasalig sa imong bag-ong branch. Pagtukod ug pagsulay sa lokal. Pass? Adto sa sunod nga lakang. Mapakyas? Ayuhon ang mga sayup o pagsulay ug sulayi pag-usab.
  3. Pagduso sa imong hilit nga repositoryo o hilit nga sanga.
  4. Paghimo og pull request. Hisguti ang mga pagbag-o, dugangi ang dugang nga mga pasalig samtang nagpadayon ang panaghisgot. Ipasa ang mga pagsulay sa feature branch.
  5. Paghiusa / pag-rebase nga gihimo gikan sa master. Ipasa ang mga pagsulay sa resulta sa paghiusa.
  6. I-deploy gikan sa feature branch ngadto sa production.
  7. Kung ang tanan maayo sa produksiyon sa pila ka yugto sa panahon, isagol ang mga pagbag-o sa master.

Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

️ Pagpangandam

Siguroha nga ikaw adunay husto nga software

Aron makuha kini nga kurso kinahanglan nimo Node.js ΠΈ Git nga kliyente.

Mahimo nimong gamiton ang bisan unsang kliyente sa Git, apan maghatag ra ako mga mando alang sa linya sa mando.

Siguroha nga ikaw adunay Git nga kliyente nga gi-install nga nagsuporta sa command line

Kung wala ka pa usa ka kliyente sa Git nga nagsuporta sa linya sa mando, makit-an nimo ang mga panudlo sa pag-install dinhi.

Pag-andam sa repositoryo

Kinahanglan ka nga maghimo usa ka personal nga kopya (tinidor) template repository nga adunay code alang sa kurso sa GitHub. Magkasabot ta nga tawgon kining personal nga kopya repository sa kurso.

Nahimo? Kung wala nimo gibag-o ang mga default setting, ang imong repository sa kurso lagmit nga gitawag continuous-integration-team-scenarios-students, kini nahimutang sa imong GitHub account ug ang URL ingon niini

https://github.com/<вашС имя ползоватСля Π½Π° GitHub>/continuous-integration-team-scenarios-students

Tawga lang ko ani nga adres <URL рСпозитория>.

Angle bracket sama sa <Ρ‚ΡƒΡ‚> nagpasabut nga kinahanglan nimong pulihan ang ingon nga ekspresyon sa angay nga kantidad.

Siguroha nga Mga aksyon sa GitHub gilakip alang niini nga tipiganan sa kurso. Kung dili sila ma-enable, palihug pagana sila pinaagi sa pag-klik sa dako nga buton sa tunga-tunga sa panid, nga mahimo nimong makuha pinaagi sa pag-klik sa Mga Aksyon sa interface sa GitHub.

Dili nimo makompleto ang kurso nga nagsunod sa akong mga panudlo kung ang GitHub Actions dili mahimo.

Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Mahimo nimong gamiton kanunay ang abilidad sa GitHub sa pag-render sa Markdown aron makita ang karon nga kahimtang sa lista nga among gihimo dinhi.

https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md

Mahitungod sa mga tubag

Samtang ang pinakamaayong paagi sa pagkompleto niini nga kurso mao ang pagbuhat niini sa imong kaugalingon, tingali adunay ka mga kalisdanan.

Kung gibati nimo nga dili nimo masabtan kung unsa ang buhaton ug dili ka makapadayon, mahimo nimong tan-awon ang hilo solution, nga anaa sa imong start repository.
Palihug ayaw paghiusa solution Π² master sa panahon sa kurso. Mahimo nimong gamiton kini nga sanga aron mahibal-an kung unsa ang buhaton, o aron itandi ang imong code sa tagsulat, gamit ang tanan nga mga kapabilidad nga gihatag sa Git kanamo. Kung hingpit ka nga nawala, mahimo nimong hingpit nga ilisan ang imong sanga master sa usa ka sanga solution ug dayon i-reset ang imong working directory sa lakang sa kurso nga imong gikinahanglan.

Gamita lang kini kung kinahanglan nimo kini

Itugyan ang imong code

git add .
git commit -m "Backing up my work"

Kini nga mga sugo

  • ilisan ang ngalan master Π² master-backup;
  • ilisan ang ngalan solution Π² master;
  • checkout sa bag-ong branch master ug isulat pag-usab ang mga sulod sa working directory;
  • Paghimo ug "solusyon" nga sanga gikan sa "master" (nga kaniadto "solusyon") kung kinahanglan nimo ang usa ka "solusyon" nga sanga sa umaabot.

git branch -m master master-backup
git branch -m solution master
git checkout master -f
git branch solution

Pagkahuman niini nga mga lakang mahimo nimong gamiton git log master aron mahibal-an kung unsang commit ang imong kinahanglan.
Mahimo nimong i-reset ang imong direktoryo sa pagtrabaho niini nga commit sama niini:

git reset --hard <the SHA you need>

Kung nalipay ka sa resulta, sa usa ka punto kinahanglan nimo nga imantala ang imong bersyon sa repository sa usa ka hilit nga repository. Ayaw kalimti nga klaro nga ipiho ang hilit nga sanga kung buhaton nimo kini.

git push --force origin master

Palihug timan-i nga among gigamit git push --force. Dili tingali nga gusto nimo nga buhaton kini kanunay, apan kami adunay usa ka piho nga senaryo dinhi nga adunay usa ka tiggamit sa repository nga, dugang pa, nakasabut sa iyang gibuhat.

Pagsugod sa pagtrabaho

Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Atong sugdan ang paghugpong sa atong listahan sa mga lakang sa CI. Kasagaran sugdan nimo kini nga lakang pinaagi sa pagsusi sa pinakabag-o nga bersyon sa code gikan sa hilit nga repository, apan wala pa kami usa ka lokal nga repositoryo, mao nga among gi-clone kini gikan sa hilit.

️ Buluhaton: i-update ang lokal nga repositoryo, paghimo og branch gikan sa master, magsugod sa pagtrabaho

  1. I-clone ang repository sa kurso gikan sa <URL рСпозитория>.
  2. Pagdagan npm install sa direktoryo sa repository sa kurso; Kinahanglan namon kini aron ma-install ang Jest, nga among gigamit sa pagpadagan sa mga pagsulay.
  3. Paghimo ug branch ug nganli kini feature. Pagbalhin sa kini nga thread.
  4. Idugang ang code sa pagsulay sa ci.test.js tali sa mga komento nga naghangyo kanako sa pagbuhat niini.

    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);
    });

  5. Idugang ang teksto sa una nga 4 nga mga lakang sa file 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.  

    Mga grupo

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ курса
git clone <repository URL>
cd <repository name>

# Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ npm install Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ рСпозитория курса; ΠΎΠ½ установит Jest, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для запуска тСстов.
npm install

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π΅ feature. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° эту Π² Π²Π΅Ρ‚ΠΊΡƒ.
git checkout -b feature

# ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ci.test.js ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅.
# ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ci.md ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅

Paghimo mga pasalig sa usa ka bag-ong sanga, paghimo ug pagsulay sa lokal

Atong i-set up ang mga pagsulay nga modagan sa dili pa mobuhat, ug dayon i-commit ang code.

Kasagaran nga mga senaryo kung ang mga pagsulay awtomatikong modagan

  • Lokal:
    • Padayon o agig tubag sa angay nga mga pagbag-o sa code;
    • Sa pagtipig (alang sa gihubad o JIT-compiled nga mga pinulongan);
    • Atol sa asembliya (kung gikinahanglan ang pag-compile);
    • Sa pasalig;
    • Kung nagmantala sa usa ka gipaambit nga repository.

  • Sa build server o build environment:
    • Kung ang code gipatik sa usa ka personal nga sanga / repository.
    • Ang code sa kini nga thread gisulayan.
    • Ang potensyal nga resulta sa paghiusa gisulayan (kasagaran uban sa master).
    • Ingon usa ka padayon nga yugto sa panagsama / padayon nga pipeline sa pagpadala

Kasagaran, ang mas paspas nga pagdagan sa usa ka test suite, mas kanunay nimo nga makaya ang pagpadagan niini. Ang usa ka tipikal nga pag-apod-apod sa entablado mahimong ingon niini.

  • Paspas nga mga pagsulay sa yunit - sa panahon sa pagtukod, sa pipeline sa CI
  • Mahinay nga mga pagsulay sa yunit, paspas nga sangkap ug mga pagsulay sa panagsama - on commit, sa pipeline sa CI
  • Hinay nga component ug integration tests - sa CI pipeline
  • Pagsulay sa seguridad, pagsulay sa pagkarga ug uban pang mga pagsulay sa oras o mahal - sa mga pipeline sa CI / CD, apan sa pipila lamang nga mga mode / yugto / pipeline sa pagtukod, pananglitan, kung nag-andam sa usa ka kandidato sa pagpagawas o kung mano-mano ang pagdagan.

️Buluhaton

Gisugyot nako ang pagpadagan sa mga pagsulay nga mano-mano una gamit ang mando npm test. Pagkahuman niana, magdugang kita usa ka git hook aron mapadagan ang among mga pagsulay sa pag-commit. Adunay usa ka catch: Ang Git hooks wala isipa nga bahin sa repository ug busa dili ma-clone gikan sa GitHub uban sa uban nga mga materyales sa kurso. Aron ma-install ang hook kinahanglan nimo nga modagan install_hook.sh o kopyaha ang file repo/hooks/pre-commit ngadto sa lokal nga direktoryo .git/hooks/.
Kung mopasalig ka, imong makita nga ang mga pagsulay gipadagan ug ilang susihon kung naa ba ang pipila nga mga keyword sa lista.

  1. Pagdalagan ang mga pagsulay pinaagi sa pagpadagan sa mando npm test sa imong course repository folder. Tinoa nga ang mga pagsulay nahuman na.
  2. Pagbutang og commit hook (pre-commit hook) pinaagi sa pagdagan install_hook.sh.
  3. Itugyan ang imong mga pagbag-o sa imong lokal nga tipiganan.
  4. Siguruha nga ang mga pagsulay gipadagan sa dili pa mopasalig.

Ang imong repository kinahanglan nga ingon niini pagkahuman sa pagsunod niini nga mga lakang.
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Mga grupo

# УстановитС pre-commit hook Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² install_hook.sh.  

# Π—Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ измСнСния Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "Add first CI steps" Π² качСствС сообщСния ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.
git add ci.md ci.test.js
git commit -m "Add first CI steps"

# Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ тСсты Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ.  

I-publish ang code sa usa ka hilit nga repository o hilit nga sanga

Kung nahuman na sila sa pagtrabaho sa lokal, kasagaran nga gihimo sa mga developer ang ilang code nga magamit sa publiko aron kini sa katapusan maapil sa publiko. Uban sa GitHub, kini kasagarang makab-ot pinaagi sa pagmantala sa trabaho ngadto sa usa ka personal nga kopya sa repository (personal nga tinidor) o usa ka personal nga sanga.

  • Uban sa mga tinidor, ang usa ka developer nag-clone sa usa ka hilit nga gipaambit nga repository, nga naghimo sa usa ka personal nga hilit nga kopya niini, nga nailhan usab nga usa ka tinidor. Gi-clone niini ang kini nga personal nga tipiganan aron magtrabaho sa lokal. Kung nahuman na ang trabaho ug nahimo na ang mga commit, iduso niya kini sa iyang tinidor, diin magamit kini sa uban ug mahimong i-integrate sa komon nga repository. Kini nga pamaagi kasagarang gigamit sa open source nga mga proyekto sa GitHub. Gigamit usab kini sa akong advanced nga kurso [Team Work ug CI uban sa Git] (http://devops.redpill.solutions/).
  • Ang laing paagi mao ang paggamit lamang sa usa ka hilit nga repository ug ihap lamang ang sanga master gipaambit nga repository nga "gipanalipdan". Niini nga senaryo, ang indibidwal nga mga developers nagmantala sa ilang code ngadto sa mga sanga sa usa ka hilit nga repository aron ang uban makakita niini nga code, kung ang tanan maayo, iusa kini sa master gipaambit nga repository.

Niini nga partikular nga kurso, mogamit kami og workflow nga naggamit sa mga sanga.

Atong imantala ang atong code.

️Buluhaton

  • I-publish ang mga pagbag-o sa usa ka hilit nga sanga nga adunay parehas nga ngalan sa imong nagtrabaho nga sanga

Mga grupo

git push --set-upstream origin feature

Paghimo og pull request

Paghimo og pull request nga adunay titulo Pagrepaso sa mga lakang. Pag-instalar feature sama sa "head branch" ug master sama sa "base nga sanga".

Siguroha nga imong na-install master sa iyang tinidor ang repositoryo Ingon usa ka "base nga sanga", dili ako motubag sa mga hangyo alang sa mga pagbag-o sa tipiganan sa mga materyales sa kurso.

Sa GitHub lingo, ang "base nga sanga" mao ang sanga nga imong gibasehan sa imong trabaho, ug ang "ulo nga sanga" mao ang sanga nga adunay gisugyot nga mga pagbag-o.

Hisguti ang mga pagbag-o, idugang ang mga bag-ong commit samtang nagpadayon ang diskusyon

Paghangyo sa pagbitad (PR)

Paghangyo sa pagbitad (PR) usa ka paagi sa paghisgot ug pagdokumento sa code, ingon man sa pagpahigayon sa pagrepaso sa code. Ang mga hangyo sa pagbitad ginganlan sunod sa kinatibuk-ang paagi sa pag-integrate sa indibidwal nga mga kausaban ngadto sa kinatibuk-ang code. Kasagaran, ang usa ka tawo nag-clone sa layo nga opisyal nga repository sa proyekto ug nagtrabaho sa code sa lokal. Pagkahuman niini, gibutang niya ang code sa iyang personal nga hilit nga tipiganan ug gihangyo ang mga responsable sa opisyal nga tipiganan sa pagkuha (pagbitad) ang kodigo niini ngadto sa ilang lokal nga mga repositoryo, diin ilang girepaso ug posibleng i-integrate(paghiusa) iya. Kini nga konsepto nailhan usab sa ubang mga ngalan, pananglitan, hangyo sa paghiusa.

Dili nimo kinahanglan nga gamiton ang feature sa pull request sa GitHub o susama nga mga plataporma. Ang mga development team mahimong mogamit sa ubang mga paagi sa komunikasyon, lakip ang nawong-sa-nawong nga komunikasyon, voice call, o email, apan aduna gihapoy ubay-ubay nga mga rason sa paggamit sa forum-style nga pull requests. Ania ang pipila niini:

  • organisado nga mga diskusyon nga may kalabutan sa piho nga mga pagbag-o sa code;
  • isip usa ka dapit sa pagtan-aw sa feedback sa work-in-progress gikan sa mga autotester ug mga kaedad;
  • pormalisasyon sa mga pagsusi sa code;
  • aron sa ulahi mahibal-an nimo ang mga hinungdan ug konsiderasyon sa luyo niini o kana nga piraso sa code.

Kasagaran maghimo ka usa ka hangyo sa pagbitad kung kinahanglan nimo nga hisgutan ang usa ka butang o makakuha og feedback. Pananglitan, kung nagtrabaho ka sa usa ka bahin nga mahimong ipatuman sa labaw sa usa ka paagi, mahimo ka maghimo usa ka hangyo sa pagbitad sa dili pa isulat ang una nga linya sa code aron ipaambit ang imong mga ideya ug hisgutan ang imong mga plano sa imong mga kauban. Kung ang trabaho mas simple, ang usa ka hangyo sa pagbitad maablihan kung adunay nahimo na, nahimo, ug mahimong hisgutan. Sa pipila ka mga senaryo, mahimo nimong ablihan ang usa ka PR alang lamang sa mga hinungdan sa pagkontrol sa kalidad: sa pagpadagan sa mga awtomatiko nga pagsulay o pagsugod sa mga pagsusi sa code. Bisan unsa ang imong desisyon, ayaw kalimti nga @mention ang mga tawo kansang pagtugot gusto nimo sa imong hangyo sa pagbitad.

Kasagaran, sa paghimo sa usa ka PR, imong buhaton ang mosunod.

  • Itudlo kung unsa ang imong gisugyot nga usbon ug asa.
  • Pagsulat ug deskripsyon nga nagpatin-aw sa katuyoan sa mga pagbag-o. Mahimong gusto nimo:
    • idugang ang bisan unsang importante nga dili klaro gikan sa code, o butang nga mapuslanon sa pagsabot sa konteksto, sama sa may kalabutan nga #bugs ug commit numbers;
    • @paghisgot sa bisan kinsa nga gusto nimong sugdan sa pagtrabaho, o mahimo nimo @paghisgot sila sa mga komento sa ulahi;
    • hangyoa ang mga kauban sa pagtabang sa usa ka butang o pagsusi sa usa ka piho nga butang.

Sa higayon nga imong ablihan ang PR, ang mga pagsulay nga gi-configure nga modagan sa maong mga kaso gipatuman. Sa among kaso, kini ang parehas nga hugpong sa mga pagsulay nga among gipadagan sa lokal, apan sa usa ka tinuud nga proyekto mahimo’g adunay dugang nga mga pagsulay ug pagsusi.

Palihug paghulat samtang ang mga pagsulay makompleto. Makita nimo ang kahimtang sa mga pagsulay sa ilawom sa panaghisgot sa PR sa interface sa GitHub. Ipadayon kung mahuman na ang mga pagsulay.

️ Pagdugang usa ka nota bahin sa randomness sa lista sa mga lakang sa CI

Ang lista nga gigamit niini nga kurso kay arbitraryo ug suhetibo, kinahanglan nga magdugang kita usa ka nota bahin niini.

️ Buluhaton: paghimo ug pull request para ani nga comment

  1. Pagbalhin sa sanga master.
  2. Paghimo og sanga nga ginganlan bugfix.
  3. Idugang ang teksto sa nota sa katapusan sa file 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/).
  4. Itugyan ang mga pagbag-o.
  5. I-publish ang thread bugfix sa usa ka hilit nga tipiganan.
  6. Paghimo og pull request nga ginganlan Pagdugang og komento nga adunay usa ka sanga sa ulo bugfix ug ang base nga sangamaster.

Siguroha nga imong na-install master sa iyang tinidor ang repositoryo Ingon usa ka "base nga sanga", dili ako motubag sa mga hangyo alang sa mga pagbag-o sa tipiganan sa mga materyales sa kurso.

Mao kini ang hitsura sa imong repository.
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Mga grupo

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ 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 ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅

Aprobahan ang hangyo sa pagbitad "Pagdugang usa ka komento"

️Buluhaton

  1. Paghimo og pull request.
  2. I-klik ang "Paghiusa sa paghangyo sa pagbitad".
  3. I-klik ang "Kumpirma ang paghiusa".
  4. I-klik ang "Delete branch", dili na namo kinahanglan.

Kini usa ka diagram sa mga commit pagkahuman sa usa ka paghiusa.
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

️ Padayon sa pagtrabaho ug pagdugang sa mga pagsulay

Ang pagtinabangay sa usa ka hangyo sa pagbitad sagad moresulta sa dugang nga trabaho. Kasagaran kini ang resulta sa usa ka pagrepaso sa code o diskusyon, apan sa among kurso himuon namon kini nga modelo pinaagi sa pagdugang mga bag-ong butang sa among lista sa mga lakang sa CI.

Ang padayon nga paghiusa kasagarang naglangkit sa pipila ka sakup sa pagsulay. Ang mga kinahanglanon sa pagsakup sa pagsulay magkalainlain ug kasagaran makita sa usa ka dokumento nga gitawag usa ka butang sama sa "mga giya sa kontribusyon". Himoon namo kini nga simple ug magdugang og pagsulay alang sa matag linya sa among checklist.

Kung nagdagan sa mga buluhaton, sulayi una ang paghimo sa mga pagsulay. Kung imong gi-install sa husto pre-commit hook sa sayo pa, ang bag-ong gidugang nga pagsulay ipahigayon, mapakyas, ug walay mahimo. Timan-i nga kini ang paagi nga nahibal-an namon nga ang among mga pagsulay sa tinuud nagsulay sa usa ka butang. Makapainteres, kung nagsugod kami sa code sa wala pa ang mga pagsulay, ang pagpasa sa mga pagsulay mahimong magpasabut nga ang code nagtrabaho sama sa gipaabut, o nga ang mga pagsulay wala gyud nagsulay bisan unsa. Dugang pa, kung wala pa namo gisulat ang mga pagsulay sa una, tingali nakalimtan na namon kini sa tanan, tungod kay wala’y makapahinumdom kanamo niini.

Test Driven Development (TDD)

Girekomenda sa TDD ang pagsulat sa mga pagsulay sa wala pa ang code. Ang kasagaran nga workflow gamit ang TDD ingon niini.

  1. Pagdugang usa ka pagsulay.
  2. Pagdalagan ang tanan nga mga pagsulay ug siguruha nga ang bag-ong pagsulay mapakyas.
  3. Isulat ang code.
  4. Pagdalagan ang mga pagsulay, siguruha nga ang tanan nga mga pagsulay makapasar.
  5. I-refactor ang imong code.
  6. Balika.

Tungod kay ang mga resulta sa mga pagsulay nga mapakyas kasagarang gipakita sa pula, ug ang mga nakapasar kasagarang gipakita sa berde, ang siklo nailhan usab nga pula-berde-refactor.

️Buluhaton

Una, sulayi paghimo ang mga pagsulay ug pasagdi nga mapakyas sila, dayon idugang ug itugyan ang teksto sa lista sa lakang sa CI mismo. Imong makita nga ang mga pagsulay milabay ("berde").
Dayon i-publish ang bag-ong code sa hilit nga repository ug tan-awa ang mga pagsulay nga gipadagan sa GitHub interface sa ubos sa pull request nga diskusyon ug ang PR status update.

  1. Pagbalhin sa sanga feature.
  2. Idugang kini nga mga pagsulay sa ci.test.js pagkahuman sa katapusang tawag it (...);.

    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);
    });

  3. Sulayi ang paghimo sa mga pagsulay. Kung pre-commit gi-install ang hook, mapakyas ang pagsulay sa commit.
  4. Dayon idugang kini nga teksto sa 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. 
  5. Paghimo ug paghimo og mga pagbag-o sa lokal.
  6. I-post ang mga pagbag-o sa sanga feature.

Kinahanglan nga aduna kay butang nga sama niini
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Mga grupo


# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π° Π²Π΅Ρ‚ΠΊΡƒ 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

Paghiusa sa panagbangi

Adto sa Change Request Pagrepaso sa mga lakang.

Bisag wala mi nabuhat nga sayop ug nakapasar na ang mga test sa among code, dili gihapon namo ma-merge ang branch feature ΠΈ master. Kay naa sa pikas thread bugfix gihiusa sa master samtang nagtrabaho kami niini nga PR.
Naghimo kini og sitwasyon diin ang hilit nga sanga master adunay mas bag-ong bersyon kaysa sa among gibasehan sa sanga feature. Tungod niini dili na lang nato ma-rewind ang HEAD master hangtod sa katapusan sa thread feature. Niini nga sitwasyon, kinahanglan natong i-merge o i-apply ang mga commit feature rebase master. Ang GitHub makahimo gayud sa mga awtomatikong paghiusa kung walay mga panagbangi. Alaut, sa among kahimtang, ang duha nga mga sanga adunay kompetisyon nga pagbag-o sa file ci.md. Kini nga kahimtang nailhan nga usa ka panagsama nga panagbangi, ug kinahanglan naton nga sulbaron kini nga mano-mano.

Paghiusa o pag-rebase

Maghiusa

  • Naghimo ug dugang nga merge commit ug nagtipig sa kasaysayan sa trabaho.
    • Gipreserbar ang orihinal nga commit sa mga sanga sa ilang orihinal nga mga timestamp ug mga tagsulat.
    • Gitipigan ang SHA sa mga pasalig ug mga link sa kanila sa mga panaghisgot sa paghangyo sa pagbag-o.
  • Nagkinahanglan usa ka higayon nga resolusyon sa panagbangi.
  • Naghimo sa istorya nga dili linear.
    • Mahimong lisod basahon ang istorya tungod sa kadaghan sa mga sanga (nagpahinumdom sa IDE cable).
    • Gihimo nga mas lisud ang awtomatikong pag-debug, pananglitan. git bisect dili kaayo mapuslanon - makit-an ra ang merge commit.

Rebase

  • Ang mga replay nag-commit gikan sa kasamtangan nga sanga sa ibabaw sa base nga sanga sunod-sunod.
    • Ang mga bag-ong commit sa bag-ong mga SHA namugna, hinungdan nga ang mga commit sa GitHub mohaum sa orihinal nga mga hangyo sa pagbitad, apan dili ang katugbang nga mga komento.
    • Ang mga pasalig mahimong i-recombine ug usbon sa proseso, o bisan i-merge sa usa.
  • Daghang mga panagbangi mahimong kinahanglan nga masulbad.
  • Nagtugot kanimo sa pagpadayon sa usa ka linear nga istorya.
    • Mahimong mas sayon ​​basahon ang istorya basta dili kaayo taas sa walay rason nga rason.
    • Ang awtomatik nga pag-debug ug pag-troubleshoot mas sayon: nagpaposible niini git bisect, makahimo sa mga awtomatikong rollback nga mas klaro ug mas matag-an.
  • Nagkinahanglan og pagmantala sa usa ka sanga nga adunay migrated commit nga adunay bandila --force kung gigamit sa mga hangyo sa pagbitad.

Kasagaran, ang mga team nagkauyon nga kanunay mogamit sa parehas nga estratehiya kung kinahanglan nila nga i-merge ang mga pagbag-o. Mahimo kini nga usa ka "pure" nga panagsama o usa ka "pure" nga pasalig sa ibabaw, o usa ka butang sa taliwala, sama sa pagbuhat sa usa ka pasalig sa ibabaw nga interactive (git rebase -i) lokal para sa mga sanga nga wala gipatik sa publikong repositoryo, apan gihiusa para sa "publiko" nga mga sanga.

Dinhi atong gamiton ang merge.

️Buluhaton

  1. Siguroha nga ang code anaa sa lokal nga sanga master updated gikan sa usa ka hilit nga repository.
  2. Pagbalhin sa sanga feature.
  3. Pagsugod sa usa ka paghiusa sa usa ka sanga master. Usa ka panagsama nga panagbangi tungod sa nagkompetensya nga mga pagbag-o sa ci.md.
  4. Pagsulbad sa panagbangi aron ang among lista sa mga lakang sa CI ug usa ka nota bahin niini magpabilin sa teksto.
  5. Imantala ang usa ka merge commit sa usa ka hilit nga sanga feature.
  6. Susiha ang kahimtang sa hangyo sa pagbitad sa GitHub UI ug paghulat hangtod masulbad ang paghiusa.

Mga grupo

# Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π² локальноС Π²Π΅Ρ‚ΠΊΠ΅ `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, Π΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ ΠΏΠΎΠΊΠ° слияниС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ.

Nindot nga trabaho!

Nahuman ka sa lista ug karon kinahanglan nimo nga aprubahan ang hangyo sa pagbitad master.

️ Buluhaton: Aprobahan ang hangyo sa pagbitad "Pagrepaso sa mga lakang"

  1. Ablihi ang usa ka hangyo sa pagbitad.
  2. I-klik ang "Paghiusa sa paghangyo sa pagbitad".
  3. I-klik ang "Kumpirma ang paghiusa".
  4. I-klik ang "Delete branch" kay dili na namo kinahanglan.

Kini ang imong repository sa pagkakaron
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Kasaypanan sa produkto

Giingon nga "ang pagsulay mahimong magamit aron ipakita ang presensya sa mga sayup, apan dili aron ipakita ang ilang pagkawala." Bisan kung kami adunay mga pagsulay ug wala sila nagpakita kanamo nga mga sayup, usa ka maliputon nga bug ang nakasulod sa produksiyon.

Sa usa ka senaryo nga sama niini, kinahanglan naton atimanon:

  • unsa ang gipakatap sa produksyon;
  • code sa thread master nga adunay sayup, diin ang mga developers makasugod ug bag-ong trabaho.

Kinahanglan ba nako nga ibalik o ayohon kini sa sunod nga bersyon?

Ang pagpabalik mao ang proseso sa pag-deploy sa usa ka nahibal-an nga mas sayo nga bersyon sa produksiyon ug pag-uli sa mga nahimo nga adunay sulud nga sayup. Ang "pag-ayo sa unahan" mao ang pagdugang sa usa ka pag-ayo sa master ug pag-deploy sa bag-ong bersyon sa labing dali nga panahon. Tungod kay ang mga API ug database schemas nag-usab-usab samtang ang code gipakatap sa produksiyon, uban ang padayon nga paghatud ug maayo nga pagsakup sa pagsulay, ang pag-roll back kasagaran mas lisud ug peligro kay sa pag-ayo niini sa sunod nga bersyon.

Tungod kay ang pagpabalik wala’y peligro sa among kaso, moadto kami sa kini nga ruta, tungod kay gitugotan kami niini

  • ayuhon ang sayup sa produkto sa labing madali;
  • paghimo sa code sa master haom dayon sa pagsugod ug bag-ong trabaho.

️Buluhaton

  1. Pagbalhin sa sanga master sa lokal nga lugar.
  2. I-update ang lokal nga repositoryo gikan sa hilit nga repositoryo.
  3. Ibalik ang PR merge commit Pagrepaso sa mga lakang Π² master.
  4. I-publish ang mga pagbag-o sa usa ka hilit nga repository.

Kini ang kasaysayan sa usa ka repository nga adunay gibalik nga merge commit
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Mga grupo

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master.
git checkout master

# ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория.
git pull

# ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния PR Steps review Π² master.
# ΠœΡ‹ отмСняСм ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния, поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ истории, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ
git show HEAD

# ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» послСдним Π² Π²Π΅Ρ‚ΠΊΠ΅ master Π΄ΠΎ слияния, Π±Ρ‹Π» ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΡ‘Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ
git revert HEAD -m 1
# ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

# ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ измСнСния Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
git push

️ Pagsulay sa kaugalingon

Siguruha nga ci.md wala na maglangkob sa teksto nga "sneaky bug" pagkahuman gibalik ang usa ka merge commit.

Ayuhon ang lista sa mga lakang sa CI ug ibalik kini sa master

Hingpit namong gibalik ang merge commit sa branch. feature. Ang maayong balita mao nga wala na kami'y sayup master. Ang dili maayo nga balita mao nga ang among bililhon nga lista sa padayon nga mga lakang sa panagsama nawala usab. Mao nga, sa tinuud, kinahanglan naton i-apply ang pag-ayo sa mga commit gikan feature ug ibalik sila sa master kauban ang pag-ayo.

Mahimo natong sulbaron ang problema sa lainlaing paagi:

  • ibalik ang usa ka pasalig nga nag-undo sa usa ka panagsama feature с master;
  • paglihok commit gikan sa kanhi feature.

Ang lain-laing mga development team naggamit ug lain-laing mga pamaagi niini nga kaso, apan atong ibalhin ang mapuslanong mga commit ngadto sa usa ka bulag nga branch ug maghimo og lain nga pull request para niining bag-ong branch.

️Buluhaton

  1. Paghimo ug thread nga gitawag feature-fix ug ibalhin kini.
  2. I-migrate ang tanang commit gikan sa kanhi branch feature sa bag-ong thread. Pagsulbad sa mga panagbangi nga nahitabo sa panahon sa paglalin.

    Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

  3. Pagdugang usa ka pagsulay sa pagbalik sa ci.test.js:

    it('does not contain the sneaky bug', () => {
    expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false);
    });

  4. Pagdalagan ang mga pagsulay sa lokal aron masiguro nga dili kini mapakyas.
  5. Kuhaa ang teksto nga "with a sneaky bug" in ci.md.
  6. Idugang ang mga pagbag-o sa pagsulay ug mga pagbag-o sa lista sa lakang sa indeks ug itugyan kini.
  7. Imantala ang sanga sa usa ka hilit nga tipiganan.

Kinahanglan nimo nga adunay usa ka butang nga susama niini:
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Mga grupo

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 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

Paghimo og pull request.

Paghimo og pull request nga adunay titulo Pag-ayo sa bahin. Pag-instalar feature-fix sama sa "head branch" ug master sama sa "base nga sanga".
Palihug paghulat samtang makompleto ang mga pagsulay. Makita nimo ang kahimtang sa mga pagsulay sa ilawom sa panaghisgot sa PR.

Siguroha nga imong na-install master sa iyang tinidor ang repositoryo Ingon usa ka "base nga sanga", dili ako motubag sa mga hangyo alang sa mga pagbag-o sa tipiganan sa mga materyales sa kurso.

Aprobahan ang pull request "Pag-ayo sa feature"

Salamat sa pagtul-id! Palihug aprubahan ang mga pagbag-o sa master gikan sa pull request.

️Buluhaton

  1. I-klik ang "Paghiusa sa paghangyo sa pagbitad".
  2. I-klik ang "Kumpirma ang paghiusa".
  3. I-klik ang "Delete branch" kay dili na namo kinahanglan.

Kini ang angay nimong mabatonan sa pagkakaron.
Kasagaran nga mga sitwasyon nga adunay padayon nga panagsama

Mga pahalipay!

Nakompleto na nimo ang tanang mga lakang nga kasagarang himoon sa mga tawo atol sa padayon nga paghiusa.

Kung namatikdan nimo ang bisan unsang mga problema sa kurso o nahibal-an kung giunsa kini pagpauswag, palihug paghimo usa ka isyu sa mga repository nga adunay mga materyales sa kurso. Kini nga kurso usab adunay interactive nga bersyon gamit ang GitHub Learning Lab isip plataporma.

Source: www.habr.com

Idugang sa usa ka comment