Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Koj puas tau kawm Git cov lus txib tab sis xav xav txog kev sib koom ua ke txuas ntxiv (CI) ua haujlwm li cas? Los yog tej zaum koj xav optimize koj cov dej num txhua hnub? Hoob no yuav muab cov txuj ci tsim nyog rau koj hauv kev sib koom ua ke txuas ntxiv siv GitHub repository. Cov chav kawm no tsis yog npaj los ua tus wizard uas koj tuaj yeem yooj yim nyem los ntawm; ntawm qhov tsis sib xws, koj yuav ua tib yam kev ua uas tib neeg tau ua hauv kev ua haujlwm, tib yam li lawv ua. Kuv yuav piav qhia txoj kev xav thaum koj mus dhau cov kauj ruam uas cuam tshuam.

Peb ua li cas?

Thaum peb ua tiav, peb yuav maj mam tsim cov npe ntawm cov kauj ruam CI, uas yog ib txoj hauv kev zoo kom nco ntsoov cov npe no. Hauv lwm lo lus, peb yuav tsim cov npe ntawm cov haujlwm uas cov neeg tsim khoom ua thaum ua kev sib koom ua ke tsis tu ncua, ua haujlwm txuas ntxiv. Peb kuj tseem yuav siv cov kev sim yooj yim los coj peb cov txheej txheem CI kom ze rau qhov tseeb.

Qhov GIF schematically qhia txog kev cog lus hauv koj qhov chaw cia thaum koj ua tiav hauv chav kawm. Raws li koj tuaj yeem pom, tsis muaj dab tsi nyuaj ntawm no thiab tsuas yog qhov tsim nyog tshaj plaws.

Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Koj yuav mus dhau cov txheej txheem CI hauv qab no:

  • Ua haujlwm ntawm ib qho tshwj xeeb;
  • Kev siv cov kev xeem automated los xyuas kom zoo;
  • Kev ua raws li txoj haujlwm tseem ceeb;
  • Kev daws teeb meem thaum sib koom ua ke (merge kev tsis sib haum xeeb);
  • Ib qho yuam kev tshwm sim hauv ib puag ncig tsim khoom.

Koj yuav kawm dab tsi?

Koj yuav tuaj yeem teb cov lus nug hauv qab no:

  • Kev sib txuas txuas ntxiv (CI) yog dab tsi?
  • Dab tsi ntawm cov kev xeem automated siv nyob rau hauv CI, thiab teb rau cov kev nqis tes ua yog dab tsi?
  • Dab tsi yog rub thov thiab thaum twg lawv xav tau?
  • Test Driven Development (TDD) yog dab tsi thiab nws cuam tshuam li cas rau CI?
  • Kuv puas yuav tsum sib koom ua ke lossis rov pib qhov kev hloov pauv?
  • Yob rov qab los yog kho nyob rau hauv lub tom ntej version?

Thaum xub thawj kuv tau txhais tej yam xws li "rub thov" txhua qhov chaw, tab sis vim li ntawd kuv tau txiav txim siab rov qab cov lus ua lus Askiv hauv qee qhov chaw kom txo qis qhov kev npau taws hauv cov ntawv nyeem. Qee zaum kuv yuav siv "programmer surzhik" zoo li cov lus qhia zoo "coj" qhov twg tib neeg siv nws thaum ua haujlwm.

Kev sib koom ua ke tas mus li yog dab tsi?

Kev koom ua ke tsis tu ncua, lossis CI, yog ib qho kev xyaum ua haujlwm uas txhua tus tswvcuab koom ua ke lawv cov cai rau hauv ib qho chaw cia khoom tsawg kawg ib hnub ib zaug, thiab cov lej tshwm sim yuav tsum tau tsim yam tsis muaj qhov yuam kev.

Muaj kev tsis pom zoo txog lo lus no

Lub ntsiab lus ntawm kev sib cav yog qhov zaus ntawm kev sib koom ua ke. Qee qhov sib cav tias kev sib koom ua ke code tsuas yog ib zaug ib hnub tsis txaus los ua kom sib koom ua ke tsis tu ncua. Ib qho piv txwv yog muab los ntawm ib pab neeg uas txhua tus siv cov cai tshiab thaum sawv ntxov thiab sib koom ua ke ib zaug thaum yav tsaus ntuj. Thaum qhov no yog qhov kev tawm tsam tsim nyog, nws feem ntau ntseeg tias kev txhais ib zaug ib hnub yog qhov tsim nyog siv tau, tshwj xeeb, thiab haum rau pab pawg sib txawv.

Lwm qhov kev tsis pom zoo yog tias C ++ tsis yog hom lus nkaus xwb siv hauv kev txhim kho, thiab tsuas yog xav tau kev sib dhos tsis raug yuam kev raws li txoj hauv kev siv tau tsis muaj zog. Qee qhov kev xeem (piv txwv li, chav ntsuas ntsuas hauv zos) yuav tsum ua kom tiav. Tam sim no, lub zej zog tab tom hloov mus ua qhov yuav tsum tau ua, thiab yav tom ntej "tsim + kev xeem" tej zaum yuav dhau los ua kev coj ua, yog tias nws tsis tau ua.

Kev koom ua ke tsis tu ncua sib txawv los ntawm kev xa khoom tsis tu ncua (Kev xa khoom tas mus li, CD) hauv qhov uas nws tsis tas yuav muaj tus neeg sib tw tso tawm tom qab txhua lub voj voog kev koom ua ke.

Daim ntawv teev cov kauj ruam peb yuav siv thoob plaws hauv chav kawm

  1. Rub tus lej tshiab. Tsim ib ceg los ntawm master. Pib ua haujlwm.
  2. Tsim kev cog lus rau koj ceg tshiab. Tsim thiab sim hauv zos. Hla? Mus rau kauj ruam tom ntej. Ua tsis tiav? Txhim kho qhov yuam kev lossis kev sim thiab sim dua.
  3. Thawb mus rau koj lub chaw khaws cia tej thaj chaw deb lossis chaw nyob deb.
  4. Tsim ib qho kev thov rub. Sib tham txog cov kev hloov pauv, ntxiv cov lus cog tseg ntxiv thaum kev sib tham txuas ntxiv mus. Ua cov ntawv xeem dhau ntawm cov ceg ua haujlwm.
  5. Merge / rebase ua los ntawm tus tswv. Ua cov ntawv xeem dhau ntawm qhov kev sib koom ua ke.
  6. Deploy los ntawm feature ceg mus rau ntau lawm.
  7. Yog tias txhua yam zoo hauv kev tsim khoom rau qee lub sijhawm, sib koom ua ke hloov pauv mus rau tus tswv.

Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

️ Kev Npaj

Xyuas kom tseeb tias koj muaj qhov zoo software

Yuav kom kawm tau qhov kev kawm no koj yuav xav tau node.js ΠΈ Git neeg.

Koj tuaj yeem siv txhua tus neeg siv Git, tab sis kuv tsuas yog muab cov lus txib rau kab hais kom ua.

Nco ntsoov tias koj muaj Git tus thov kev teeb tsa uas txhawb cov kab hais kom ua

Yog tias koj tseem tsis tau muaj tus neeg siv khoom Git uas txhawb cov kab hais kom ua, koj tuaj yeem nrhiav cov lus qhia kev teeb tsa no.

Npaj lub repository

Koj yuav tsum tau tsim ib daim qauv ntawm tus kheej (fork) template repository nrog code rau chav kawm ntawm GitHub. Wb pom zoo hu rau tus kheej daim ntawv no chav kawm repository.

Ua tiav? Yog tias koj tsis tau hloov qhov kev teeb tsa ua ntej, koj qhov chaw khaws cia cov chav kawm feem ntau hu ua continuous-integration-team-scenarios-students, nws nyob hauv koj tus account GitHub thiab qhov URL zoo li no

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

Kuv tsuas hu qhov chaw nyob no xwb <URL рСпозитория>.

Angle brackets zoo li <Ρ‚ΡƒΡ‚> yuav txhais tau tias koj yuav tsum hloov qhov kev qhia no nrog tus nqi tsim nyog.

Nco ntsoov tias GitHub ua suav nrog rau qhov chaw khaws cia chav kawm no. Yog tias lawv tsis tau qhib, thov pab kom lawv los ntawm nias lub pob loj nyob hauv nruab nrab ntawm nplooj ntawv, uas koj tuaj yeem tau txais los ntawm kev nyem Ua Haujlwm hauv GitHub interface.

Koj yuav tsis tuaj yeem ua tiav cov chav kawm raws li kuv cov lus qhia yog tias GitHub Actions tsis qhib.

Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Koj tuaj yeem siv GitHub lub peev xwm los ua Markdown kom pom lub xeev tam sim no ntawm cov npe peb tab tom sau ntawm no

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

Hais txog cov lus teb

Txawm hais tias txoj hauv kev zoo tshaj los ua kom tiav cov chav kawm no yog ua koj tus kheej, tej zaum koj yuav muaj teeb meem.

Yog tias koj xav tias koj tsis nkag siab tias yuav ua li cas thiab tsis tuaj yeem txuas ntxiv, koj tuaj yeem saib hauv xov solution, uas yog nyob rau hauv koj pib repository.
Thov tsis txhob sib koom ua ke solution Π² master thaum kawm. Koj tuaj yeem siv ceg no los txiav txim seb yuav ua li cas, lossis sib piv koj cov cai nrog tus kws sau ntawv, siv txhua lub peev xwm uas Git muab rau peb. Yog tias koj poob tag, koj tuaj yeem hloov koj ceg master ntawm ib ceg solution thiab tom qab ntawd rov pib koj daim ntawv teev npe ua haujlwm mus rau cov kauj ruam uas koj xav tau.

Tsuas yog siv qhov no yog tias koj xav tau tiag tiag

Ua koj tus lej

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

Cov lus txib no

  • hloov npe master Π² master-backup;
  • hloov npe solution Π² master;
  • checkout mus rau ib ceg tshiab master thiab rov sau cov ntsiab lus ntawm daim ntawv teev npe ua haujlwm;
  • Tsim ib ceg "kev daws teeb meem" los ntawm "tus tswv" (uas siv los ua "kev daws teeb meem") yog tias koj xav tau ib ceg "kev daws teeb meem" yav tom ntej.

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

Tom qab cov kauj ruam no koj tuaj yeem siv git log master txhawm rau txheeb xyuas qhov koj xav tau.
Koj tuaj yeem rov pib koj daim ntawv teev npe ua haujlwm rau qhov kev cog lus zoo li no:

git reset --hard <the SHA you need>

Yog tias koj txaus siab rau qhov tshwm sim, ntawm qee lub sijhawm koj yuav tsum tau tshaj tawm koj cov ntaub ntawv ntawm qhov chaw cia khoom mus rau qhov chaw cia khoom nyob deb. Tsis txhob hnov ​​​​qab qhia meej meej txog cov ceg ntoo nyob deb thaum koj ua qhov no.

git push --force origin master

Thov nco ntsoov tias peb siv git push --force. Nws tsis zoo li koj yuav xav ua qhov no ntau zaus, tab sis peb muaj qhov xwm txheej tshwj xeeb ntawm no nrog ib tus neeg siv khoom khaws cia uas, ntxiv rau, nkag siab tias nws ua dab tsi.

Pib ua haujlwm

Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Cia peb pib sau peb cov npe ntawm CI cov kauj ruam. Feem ntau koj yuav pib cov kauj ruam no los ntawm kev txheeb xyuas qhov tseeb version ntawm cov cai los ntawm cov chaw cia khoom nyob deb, tab sis peb tsis muaj lub chaw khaws cia hauv zos, yog li peb clone nws los ntawm cov chaw taws teeb hloov pauv.

️ Ua Haujlwm: hloov kho lub chaw cia khoom hauv zos, tsim ib ceg los ntawm master, pib ua haujlwm

  1. Clone cov chav kawm repository los ntawm <URL рСпозитория>.
  2. Khiav npm install nyob rau hauv cov chav kawm repository directory; Peb xav tau nws los nruab Jest, uas peb siv los khiav kev xeem.
  3. Tsim ib ceg thiab npe rau nws feature. Hloov mus rau kab lus no.
  4. Ntxiv cov lej xeem rau ci.test.js ntawm cov lus thov kom kuv ua qhov no.

    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. Ntxiv cov ntawv nrog thawj 4 kauj ruam rau cov ntaub ntawv 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.  

    Lus txib

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

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

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

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

Tsim kev cog lus rau ib ceg tshiab, tsim thiab sim hauv zos

Peb tab tom yuav teeb tsa cov kev xeem kom khiav ua ntej cog lus, thiab tom qab ntawd ua qhov chaws.

Tej yam xwm txheej thaum cov kev ntsuam xyuas ua tiav

  • Hauv zos:
    • Tsis tu ncua los yog teb rau cov kev hloov pauv uas tsim nyog;
    • Ntawm kev txuag (rau cov lus txhais lossis JIT-sau cov lus);
    • Thaum sib dhos (thaum yuav tsum tau muab tso ua ke);
    • Ntawm kev cog lus;
    • Thaum luam tawm mus rau ib qho chaw khaws cia.

  • Ntawm tus tsim server lossis tsim ib puag ncig:
    • Thaum cov cai luam tawm mus rau tus kheej ceg / chaw cia khoom.
    • Txoj cai hauv xov no tab tom sim.
    • Lub peev xwm tshwm sim ntawm kev sib koom ua ke yog kuaj (feem ntau nrog master).
    • Raws li kev sib koom ua ke tsis tu ncua / txuas txuas txuas txuas ntxiv

Feem ntau, qhov nrawm dua qhov kev xeem suite khiav, ntau zaus koj tuaj yeem them taus khiav nws. Ib theem kev faib tawm yuav zoo li no.

  • Kev ntsuas ceev ceev - thaum tsim, hauv CI pipeline
  • Kev sim qeeb hauv tsev, kev sib txuas ceev thiab kev sib koom ua ke - ntawm kev cog lus, hauv CI pipeline
  • Kev tivthaiv qeeb thiab kev sib xyaw ua ke - hauv CI pipeline
  • Kev ntsuam xyuas kev ruaj ntseg, kev sim thauj khoom thiab lwm yam kev sim siv sij hawm los yog kim - hauv CI / CD cov kav dej, tab sis tsuas yog nyob rau hauv qee hom / theem / cov kav dej ntawm kev tsim, piv txwv li, thaum npaj tus neeg sib tw tso tawm lossis thaum khiav manually.

️ Kev ua haujlwm

Kuv xav kom khiav cov kev xeem manually ua ntej siv cov lus txib npm test. Tom qab ntawd, cia peb ntxiv git nuv kom khiav peb cov kev xeem ntawm kev cog lus. Muaj ib qho kev ntes: Git hooks tsis suav tias yog ib feem ntawm qhov chaw cia khoom thiab yog li tsis tuaj yeem cloned los ntawm GitHub nrog rau cov khoom siv hauv chav kawm. Txhawm rau nruab nuv koj yuav tsum tau khiav install_hook.sh los yog luam cov ntaub ntawv repo/hooks/pre-commit mus rau lub zos directory .git/hooks/.
Thaum koj cog lus, koj yuav pom tias cov kev xeem tau khiav thiab lawv tshawb xyuas seb puas muaj qee cov ntsiab lus tseem ceeb hauv cov npe.

  1. Khiav cov kev xeem manually los ntawm kev khiav cov lus txib npm test nyob rau hauv koj qhov chaw khaws ntaub ntawv khaws cia. Xyuas kom tseeb tias cov kev xeem tau ua tiav lawm.
  2. Teem ib qho kev sib txuas (pre-commit nuv) los ntawm kev khiav install_hook.sh.
  3. Muab koj cov kev hloov pauv rau koj qhov chaw khaws cia hauv zos.
  4. Xyuas kom tseeb tias cov kev ntsuam xyuas tau ua ua ntej ua tiav.

Koj qhov chaw khaws cia yuav tsum zoo li qhov no tom qab ua raws cov kauj ruam no.
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Lus txib

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

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

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

Tshaj tawm cov lej rau ib lub chaw khaws cia tej thaj chaw deb lossis chaw nyob deb

Thaum lawv ua tiav hauv zos, cov neeg tsim khoom feem ntau ua lawv cov cai rau pej xeem kom nws thiaj li tuaj yeem koom nrog pej xeem. Nrog GitHub, qhov no feem ntau ua tiav los ntawm kev tshaj tawm txoj haujlwm rau ib tus kheej daim ntawv theej ntawm lub chaw khaws cia (tus kheej diav rawg) lossis ib ceg ntawm tus kheej.

  • Nrog rab rawg, tus tsim tawm clones cov chaw taws teeb sib koom ua ke, tsim cov ntawv luam ntawm tus kheej ntawm nws, tseem hu ua rab rawg. Nws ces clones no tus kheej repository ua hauj lwm nrog hauv zos. Thaum ua tiav cov haujlwm tiav thiab cov lus cog tseg, nws thawb lawv mus rau hauv nws rab rawg, qhov chaw uas lawv muaj rau lwm tus thiab tuaj yeem muab tso rau hauv qhov chaw khaws cia. Txoj hauv kev no feem ntau siv rau hauv cov haujlwm qhib ntawm GitHub. Nws kuj tseem siv rau hauv kuv chav kawm qib siab [Team Ua Haujlwm thiab CI nrog Git] (http://devops.redpill.solutions/).
  • Lwm txoj hauv kev yog siv tsuas yog ib qho chaw cia khoom nyob deb thiab tsuas suav cov ceg master sib koom repository "tiv thaiv". Hauv qhov xwm txheej no, tus neeg tsim khoom luam tawm lawv cov cai rau cov ceg ntawm cov chaw cia khoom nyob deb kom lwm tus tuaj yeem saib cov cai no, yog tias txhua yam nyob rau hauv kev txiav txim, sib koom ua ke nrog master sib koom repository.

Hauv chav kawm tshwj xeeb no, peb yuav siv cov kev ua haujlwm uas siv cov ceg ntoo.

Cia peb tshaj tawm peb cov cai.

️ Kev ua haujlwm

  • Tshaj tawm cov kev hloov pauv mus rau ib ceg nyob deb nroog nrog lub npe tib yam li koj ceg ua haujlwm

Lus txib

git push --set-upstream origin feature

Tsim ib qho kev thov rub

Tsim ib daim ntawv thov rub nrog lub npe Cov kauj ruam tshuaj xyuas... Nruab feature zoo li "head ceg" thiab master zoo li "base ceg".

Xyuas kom tseeb tias koj tau nruab master hauv nws fork lub repository Raws li "hauv paus ceg", kuv yuav tsis teb rau qhov kev thov rau kev hloov pauv cov ntaub ntawv khaws cia hauv chav kawm.

Hauv GitHub lingo, "cov ceg hauv paus" yog ceg uas koj pib koj txoj haujlwm, thiab "tus ceg taub hau" yog ceg uas muaj cov kev hloov pauv.

Sib tham txog cov kev hloov pauv, ntxiv cov lus cog tseg tshiab raws li kev sib tham txuas ntxiv mus

Rub thov (PR)

Rub thov (PR) yog ib txoj hauv kev los tham thiab sau cov cai, nrog rau kev saib xyuas cov cai. Rub cov lus thov muaj npe tom qab txoj kev dav dav ntawm kev sib koom ua ke ntawm tus neeg hloov pauv rau hauv tag nrho cov cai. Feem ntau, ib tug neeg clones qhov project cov chaw taws teeb tswj chaw cia khoom thiab ua haujlwm ntawm cov cai hauv zos. Tom qab ntawd, nws muab cov lej tso rau hauv nws tus kheej qhov chaw cia khoom nyob deb thiab nug cov neeg ua haujlwm rau lub chaw khaws ntaub ntawv khaws cia (rub) nws cov cai rau hauv lawv cov chaw cia khoom hauv zos, qhov chaw uas lawv tshuaj xyuas thiab tuaj yeem koom ua ke (Merge) nws. Lub tswv yim no tseem paub los ntawm lwm lub npe, piv txwv li, sib koom thov.

Koj tsis tas yuav siv qhov kev thov rub tawm ntawm GitHub lossis cov platform zoo sib xws. Pab pawg txhim kho tuaj yeem siv lwm txoj hauv kev sib txuas lus, suav nrog kev sib tham tim ntsej tim muag, hu xov tooj, lossis email, tab sis tseem muaj ntau qhov laj thawj siv lub rooj sab laj-style rub thov. Nov yog qee qhov ntawm lawv:

  • koom nrog kev sib tham txog kev hloov cai tshwj xeeb;
  • raws li qhov chaw los saib cov lus tawm tswv yim ntawm kev ua haujlwm hauv kev kawm los ntawm ob qho tib si autotesters thiab cov phooj ywg;
  • formalization ntawm txoj cai tshuaj xyuas;
  • yog li ntawd tom qab koj tuaj yeem tshawb pom cov laj thawj thiab kev xav tom qab no lossis cov cai ntawd.

Feem ntau koj tsim qhov kev thov rub tawm thaum koj xav tau los tham txog qee yam lossis tau txais cov lus qhia. Piv txwv li, yog tias koj tab tom ua haujlwm ntawm qhov tshwj xeeb uas tuaj yeem siv ntau dua ib txoj hauv kev, koj tuaj yeem tsim qhov kev thov rub ua ntej sau thawj kab ntawm txoj cai los qhia koj cov tswv yim thiab sib tham txog koj cov phiaj xwm nrog koj cov neeg koom tes. Yog tias kev ua haujlwm yooj yim dua, qhov kev thov rub tawm yog qhib thaum ib yam dab tsi twb tau ua tiav, cog lus, thiab tuaj yeem sib tham. Hauv qee qhov xwm txheej, koj tuaj yeem xav qhib PR nkaus xwb rau kev tswj xyuas kom zoo: khiav cov kev xeem automated lossis pib tshuaj xyuas cov cai. Txawm koj txiav txim siab, tsis txhob hnov ​​​​qab @ hais txog cov neeg uas nws pom zoo koj xav tau hauv koj qhov kev thov rub.

Feem ntau, thaum tsim PR, koj ua cov hauv qab no.

  • Qhia seb koj xav hloov dab tsi thiab qhov twg.
  • Sau ib daim ntawv piav qhia txog lub hom phiaj ntawm kev hloov. Koj tuaj yeem xav tau:
    • ntxiv ib yam dab tsi tseem ceeb uas tsis pom tseeb los ntawm cov cai, lossis qee yam muaj txiaj ntsig rau kev nkag siab cov ntsiab lus, xws li cuam tshuam # kab laum thiab ua lej;
    • @hais tus neeg koj xav pib ua haujlwm nrog, lossis koj tuaj yeem @hais lawv hauv cov lus tom qab;
    • nug cov npoj yaig kom pab nrog qee yam lossis tshawb xyuas qee yam tshwj xeeb.

Thaum koj qhib PR, cov kev ntsuam xyuas teeb tsa kom khiav hauv cov xwm txheej zoo li no raug tua. Hauv peb qhov xwm txheej, qhov no yuav yog tib qhov kev xeem uas peb tau khiav hauv zos, tab sis hauv qhov project tiag tiag yuav muaj kev sim thiab kuaj ntxiv.

Thov tos thaum qhov kev xeem tiav. Koj tuaj yeem pom cov xwm txheej ntawm cov kev xeem hauv qab ntawm PR kev sib tham hauv GitHub interface. Txuas ntxiv thaum qhov kev xeem tiav.

️ Ntxiv ib daim ntawv hais txog qhov randomness ntawm daim ntawv teev npe CI cov kauj ruam

Cov npe siv nyob rau hauv chav kawm no yog arbitrary thiab subjective, peb yuav tsum ntxiv ib daim ntawv qhia txog qhov no.

️ Task: tsim ib daim ntawv thov rub tawm cov lus qhia no

  1. Hloov mus rau ceg master.
  2. Tsim ib ceg npe bugfix.
  3. Ntxiv cov ntawv sau rau qhov kawg ntawm cov ntaub ntawv 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. Muab cov kev hloov pauv.
  5. Tshaj tawm xov bugfix mus rau ib lub chaw khaws cia tej thaj chaw deb.
  6. Tsim ib daim ntawv thov rub npe Ntxiv ib nqe lus nrog lub taub hau ceg bugfix thiab lub hauv paus cegmaster.

Xyuas kom tseeb tias koj tau nruab master hauv nws fork lub repository Raws li "hauv paus ceg", kuv yuav tsis teb rau qhov kev thov rau kev hloov pauv cov ntaub ntawv khaws cia hauv chav kawm.

Nov yog qhov koj qhov chaw khaws cia yuav tsum zoo li.
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Lus txib

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

Pom zoo rub daim ntawv thov "Ntxiv cov lus hais"

️ Kev ua haujlwm

  1. Tsim ib qho kev thov rub.
  2. Nyem "Merge rub thov".
  3. Nyem "Confirm merge".
  4. Nyem "Rho tawm ceg", peb tsis xav tau nws lawm.

Nov yog daim duab ntawm kev cog lus tom qab kev sib koom ua ke.
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

️ Ua haujlwm thiab ntxiv cov kev xeem

Kev sib koom tes ntawm kev thov rub feem ntau ua rau muaj kev ua haujlwm ntxiv. Qhov no feem ntau yog qhov tshwm sim ntawm kev tshuaj xyuas lossis kev sib tham, tab sis hauv peb chav kawm peb yuav ua qauv no los ntawm kev ntxiv cov khoom tshiab rau peb cov npe ntawm CI cov kauj ruam.

Kev sib koom ua ke tsis tu ncua feem ntau suav nrog qee qhov kev xeem. Kev ntsuas cov kev xav tau sib txawv thiab feem ntau pom nyob rau hauv ib daim ntawv hu ua ib yam dab tsi xws li "cov lus qhia kev koom tes". Peb yuav khaws nws yooj yim thiab ntxiv ib qho kev xeem rau txhua kab hauv peb daim ntawv teev npe.

Thaum ua haujlwm, sim ua qhov kev xeem ua ntej. Yog hais tias koj ntsia kom raug pre-commit nuv ua ntej, qhov kev xeem ntxiv tshiab yuav raug khiav, yuav ua tsis tau, thiab tsis muaj dab tsi yuav raug cog lus. Nco ntsoov tias qhov no yog li cas peb paub tias peb cov kev xeem tau sim qee yam. Qhov zoo siab, yog tias peb pib nrog cov lej ua ntej qhov kev xeem, dhau qhov kev xeem tuaj yeem txhais tau tias cov lej ua haujlwm raws li qhov xav tau, lossis qhov kev xeem tsis tau sim ua dab tsi. Ntxiv rau, yog tias peb tsis tau sau cov ntawv xeem thawj zaug, peb yuav tsis nco qab txog lawv tag nrho, vim tsis muaj dab tsi yuav ua rau peb nco txog nws.

Test Driven Development (TDD)

TDD pom zoo kom sau cov ntawv xeem ua ntej code. Ib qho kev ua haujlwm raug siv TDD zoo li qhov no.

  1. Ntxiv ib qho kev sim.
  2. Khiav txhua qhov kev xeem thiab xyuas kom meej tias qhov kev xeem tshiab ua tsis tiav.
  3. Sau tus lej.
  4. Khiav cov kev xeem, xyuas kom txhua qhov kev xeem dhau.
  5. Reactor koj code.
  6. Rov ua dua.

Vim tias cov txiaj ntsig ntawm kev sim ua tsis tiav feem ntau pom muaj xim liab, thiab cov uas dhau los feem ntau pom ntsuab, lub voj voog tseem hu ua liab-ntsuab-refactor.

️ Kev ua haujlwm

Ua ntej, sim ua qhov kev xeem thiab cia lawv ua tsis tiav, tom qab ntawd ntxiv thiab ua raws cov ntawv sau ntawm CI kauj ruam nws tus kheej. Koj yuav pom tias qhov kev xeem dhau lawm ("ntsuab").
Tom qab ntawd luam tawm cov cai tshiab rau cov chaw cia khoom nyob deb thiab saib cov kev sim khiav hauv GitHub interface hauv qab ntawm rub cov lus thov kev sib tham thiab PR xwm txheej hloov tshiab.

  1. Hloov mus rau ceg feature.
  2. Ntxiv cov kev xeem no rau ci.test.js tom qab hu kawg 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. Sim ua qhov kev xeem. Yog pre-commit nuv yog ntsia, qhov kev sim yuav ua tsis tiav.
  4. Ces ntxiv cov ntawv no rau 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. Ua thiab cog lus hloov hauv zos.
  6. Tshaj tawm hloov mus rau ceg feature.

Tam sim no koj yuav tsum muaj tej yam zoo li no
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Lus txib


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

Ua ke tsis sib haum xeeb

Mus rau Hloov Thov Cov kauj ruam tshuaj xyuas.

Txawm hais tias peb tsis tau ua dab tsi tsis ncaj ncees lawm thiab cov kev sim rau peb cov cai dhau los, peb tseem tsis tuaj yeem koom ua ke ntawm ceg feature ΠΈ master. Nws yog vim lwm txoj xov bugfix tau ua ke nrog master thaum peb tab tom ua haujlwm ntawm PR no.
Qhov no tsim ib qho xwm txheej uas cov ceg ntoo nyob deb master muaj ib tug tshiab version dua ib tug peb raws li ceg rau feature. Vim li no peb tsis tuaj yeem rov qab HEAD xwb master mus txog qhov kawg ntawm txoj xov feature. Hauv qhov xwm txheej no, peb yuav tsum sib koom ua ke lossis siv cov lus cog tseg feature rebase master. GitHub tuaj yeem ua qhov kev sib koom ua ke tsis siv neeg yog tias tsis muaj kev tsis sib haum xeeb. Alas, nyob rau hauv peb qhov xwm txheej, ob ceg ntoo muaj kev sib tw sib tw hauv cov ntaub ntawv ci.md. Qhov xwm txheej no yog hu ua kev sib koom ua ke tsis sib haum, thiab peb yuav tsum tau daws nws manually.

Merge los yog rebase

hauj lwm ua ke

  • Tsim ib qho kev sib koom ua ke ntxiv thiab khaws cov ntaub ntawv keeb kwm ua haujlwm.
    • Khaws cov thawj commits ntawm ceg nrog lawv thawj timestamps thiab sau ntawv.
    • Txuag SHA ntawm kev cog lus thiab txuas rau lawv hauv kev hloov pauv kev sib tham.
  • Yuav tsum muaj kev daws teeb meem ib zaug.
  • Ua rau zaj dab neeg tsis-linear.
    • Zaj dab neeg yuav nyuaj rau nyeem vim muaj coob tus ceg (reminiscent ntawm IDE cable).
    • Ua rau tsis siv neeg debugging nyuaj dua, piv txwv li. git bisect tsis tshua muaj txiaj ntsig - nws tsuas yog nrhiav kev sib koom ua ke.

Xauj

  • Replays cog lus los ntawm ceg tam sim no nyob rau sab saum toj ntawm lub hauv paus ceg ib tom qab.
    • Kev cog lus tshiab nrog SHAs tshiab yog tsim, ua rau cov lus cog tseg hauv GitHub kom phim cov thawj rub thov, tab sis tsis yog cov lus sib tham.
    • Cov kev cog lus tuaj yeem muab rov ua dua thiab hloov kho hauv cov txheej txheem, lossis txawm tias muab tso rau hauv ib qho.
  • Ntau qhov kev tsis sib haum xeeb yuav tsum tau daws.
  • Tso cai rau koj khaws ib zaj dab neeg linear.
    • Zaj dab neeg yuav yooj yim nyeem yog tias nws tsis ntev dhau los tsis muaj laj thawj tsim nyog.
    • Tsis siv neeg debugging thiab teeb meem yog me ntsis yooj yim: ua kom nws ua tau git bisect, tuaj yeem ua rau tsis siv neeg rollbacks meej dua thiab kwv yees ntau dua.
  • Yuav tsum tau tshaj tawm ib ceg nrog migrated cog lus nrog tus chij --force thaum siv nrog rub thov.

Feem ntau, pawg pom zoo ib txwm siv tib lub tswv yim thaum lawv xav tau kev sib koom ua ke hloov pauv. Qhov no tuaj yeem yog "dawb huv" kev sib koom ua ke lossis "dawb huv" ua rau sab saum toj, lossis qee yam hauv nruab nrab, xws li ua kev cog lus rau sab saum toj sib tham (git rebase -i) hauv zos rau cov ceg tsis tau tshaj tawm rau pej xeem repository, tab sis sib koom ua ke rau "public" ceg.

Ntawm no peb yuav siv merge.

️ Kev ua haujlwm

  1. Xyuas kom tseeb tias cov cai nyob hauv ib ceg master hloov kho los ntawm qhov chaw cia khoom nyob deb.
  2. Hloov mus rau ceg feature.
  3. Pib kev sib koom ua ke nrog ib ceg master. Kev sib koom ua ke tsis sib haum xeeb vim kev sib tw hloov pauv rau lub ci.md.
  4. Kev daws qhov tsis sib haum xeeb kom ob qho tib si peb cov npe ntawm CI cov kauj ruam thiab ib daim ntawv qhia txog nws nyob hauv cov ntawv nyeem.
  5. Tshaj tawm ib qho kev sib koom ua ke rau ib ceg nyob deb feature.
  6. Txheeb xyuas cov xwm txheej ntawm qhov kev thov rub hauv GitHub UI thiab tos kom txog thaum kev sib koom ua ke raug daws.

Lus txib

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

Txoj hauj lwm zoo!

Koj tau ua tiav nrog daim ntawv teev npe thiab tam sim no koj yuav tsum pom zoo rau rub daim ntawv thov master.

️ Ua Haujlwm: Pom zoo rub daim ntawv thov "Cov kauj ruam tshuaj xyuas"

  1. Qhib qhov thov rub.
  2. Nyem "Merge rub thov".
  3. Nyem "Confirm merge".
  4. Nyem "Delete ceg" vim peb tsis xav tau nws lawm.

Nov yog koj qhov chaw khaws cia tam sim no
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Yam khoom yuam kev

Nws tau hais tias "kev sim tuaj yeem siv los qhia qhov muaj qhov yuam kev, tab sis tsis txhob qhia lawv qhov tsis tuaj." Txawm hais tias peb tau sim thiab lawv qhia peb tsis muaj qhov yuam kev, kab laum insidious nkag mus rau hauv kev tsim khoom.

Hauv qhov xwm txheej zoo li no, peb yuav tsum tau saib xyuas:

  • dab tsi yog deployed nyob rau hauv ntau lawm;
  • code hauv xov master nrog qhov yuam kev, los ntawm cov neeg tsim khoom tuaj yeem pib ua haujlwm tshiab.

Kuv puas yuav rov qab los yog kho nws nyob rau hauv lub tom ntej version?

Rolling rov qab yog cov txheej txheem ntawm kev xa tawm qhov paub zoo ua ntej version rau kev tsim khoom thiab thim rov qab cov lus cog tseg uas muaj qhov yuam kev. "Kho rau pem hauv ntej" yog qhov sib ntxiv ntawm kev kho rau lub master thiab xa cov tshiab version sai li sai tau. Vim tias APIs thiab database schemas hloov pauv raws li cov cai raug xa mus rau kev tsim khoom, nrog kev xa khoom tas mus li thiab kev ntsuam xyuas zoo, dov rov qab yog feem ntau nyuaj thiab pheej hmoo ntau dua li kho nws hauv cov ntawv tom ntej.

Txij li thaum dov rov qab tsis muaj kev pheej hmoo ntawm peb rooj plaub, peb yuav mus rau txoj kev no, vim nws tso cai rau peb

  • kho qhov yuam kev ntawm cov khoom kom sai li sai tau;
  • ua code in master tam sim ntawd haum rau pib txoj hauj lwm tshiab.

️ Kev ua haujlwm

  1. Hloov mus rau ceg master hauv zos.
  2. Hloov kho qhov chaw khaws cia hauv zos los ntawm qhov chaw cia khoom nyob deb.
  3. Rov qab PR kev sib koom ua ke Cov kauj ruam tshuaj xyuas Π² master.
  4. Tshaj tawm cov kev hloov pauv mus rau qhov chaw khaws cia tej thaj chaw deb.

Qhov no yog keeb kwm ntawm lub chaw cia khoom nrog kev sib koom ua ke rov qab
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Lus txib

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

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

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

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

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

️ Kev ntsuas tus kheej

Nco ntsoov tias ci.md tsis muaj cov ntawv nyeem "sneaky bug" tom qab reverting ib qho kev sib koom ua ke.

Kho cov npe ntawm CI cov kauj ruam thiab rov qab mus rau tus tswv

Peb tau thim rov qab tag nrho cov kev sib koom ua ke ntawm ceg. feature. Qhov xwm zoo yog tias peb tam sim no tsis muaj qhov yuam kev hauv master. Cov xov xwm phem yog tias peb cov npe tseem ceeb ntawm kev sib koom ua ke txuas ntxiv mus dhau lawm. Yog li, qhov zoo tshaj plaws, peb yuav tsum siv qhov kev kho rau cov kev cog lus los ntawm feature thiab xa rov qab rau lawv master nrog rau kev kho.

Peb tuaj yeem ua qhov teeb meem ntawm ntau txoj hauv kev:

  • revert ib tug commit uas undoes ib merge feature с master;
  • txav commits los ntawm tus qub feature.

Cov pab pawg txhim kho sib txawv siv cov kev sib txawv hauv qhov no, tab sis peb yuav txav cov kev cog lus muaj txiaj ntsig mus rau ib ceg thiab tsim ib qho kev thov rub tawm rau ceg tshiab no.

️ Kev ua haujlwm

  1. Tsim ib txoj xov hu ua feature-fix thiab hloov mus rau nws.
  2. Migrate tag nrho cov commits los ntawm lub qub ceg feature mus rau ib txoj xov tshiab. Txhim kho kev sib koom ua ke tsis sib haum xeeb uas tshwm sim thaum tsiv teb tsaws chaw.

    Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

  3. Ntxiv qhov kev ntsuam xyuas rov qab rau ci.test.js:

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

  4. Khiav cov kev xeem hauv zos kom paub tseeb tias lawv tsis poob.
  5. Tshem tawm cov ntawv "nrog tus kab mob sneaky" hauv ci.md.
  6. Ntxiv cov kev hloov pauv thiab cov npe kauj ruam hloov pauv rau qhov ntsuas thiab ua rau lawv.
  7. Tshaj tawm cov ceg mus rau qhov chaw cia khoom nyob deb.

Koj yuav tsum xaus nrog qee yam zoo li no:
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Lus txib

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

Tsim ib qho kev thov rub.

Tsim ib daim ntawv thov rub nrog lub npe Kho qhov feature... Nruab feature-fix zoo li "head ceg" thiab master zoo li "base ceg".
Thov tos thaum qhov kev xeem tiav. Koj tuaj yeem pom cov xwm txheej ntawm cov kev xeem hauv qab ntawm PR kev sib tham.

Xyuas kom tseeb tias koj tau nruab master hauv nws fork lub repository Raws li "hauv paus ceg", kuv yuav tsis teb rau qhov kev thov rau kev hloov pauv cov ntaub ntawv khaws cia hauv chav kawm.

Pom zoo rub thov "Kho lub feature"

Ua tsaug rau kev kho! Thov pom zoo cov kev hloov pauv rau master los ntawm rub thov.

️ Kev ua haujlwm

  1. Nyem "Merge rub thov".
  2. Nyem "Confirm merge".
  3. Nyem "Delete ceg" vim peb tsis xav tau nws lawm.

Nov yog yam koj yuav tsum muaj nyob rau lub sijhawm no.
Cov xwm txheej zoo sib xws nrog kev sib koom ua ke tsis tu ncua

Nrog koj zoo siab!

Koj tau ua tiav tag nrho cov kauj ruam uas tib neeg feem ntau ua thaum muaj kev sib koom ua ke tas mus li.

Yog tias koj pom muaj teeb meem nrog chav kawm lossis paub yuav ua li cas txhim kho nws, thov tsim qhov teeb meem hauv repositories nrog cov ntaub ntawv kawm. Hoob no kuj muaj sib tham sib version siv GitHub Learning Lab ua lub platform.

Tau qhov twg los: www.hab.com

Ntxiv ib saib