Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

Efa nianatra ny baiko Git ve ianao nefa te haka sary an-tsaina ny fomba fiasan'ny fampidirana mitohy (CI) raha ny tena izy? Sa mety te hanatsara ny asanao andavanandro ianao? Ity fampianarana ity dia hanome anao fahaiza-manao azo ampiharina amin'ny fampidirana mitohy amin'ny alΓ lan'ny fitahirizana GitHub. Ity fampianarana ity dia tsy natao ho mpamosavy izay azonao kitihina tsotra izao; ny mifanohitra amin'izany, dia hanao hetsika mitovy amin'ny ataon'ny olona any am-piasana ianao, amin'ny fomba fanaony. Hazavaiko ny teoria rehefa mandalo ireo dingana tafiditra ianao.

Inona no ataontsika?

Rehefa mandroso isika dia hamorona tsikelikely lisitr'ireo dingana CI mahazatra, izay fomba tsara hahatsiarovana ity lisitra ity. Raha lazaina amin'ny teny hafa dia hamorona lisitr'ireo hetsika ataon'ny mpamorona isika rehefa manao fampidirana mitohy, manao fampidirana mitohy. Hampiasa andrana tsotra ihany koa izahay mba hanakaiky kokoa ny fizotran'ny CI anay amin'ny tena izy.

Ity GIF ity dia mampiseho ny commit ao amin'ny tahiryo rehefa mandroso amin'ny fianarana ianao. Araka ny hitanao, tsy misy sarotra eto ary ny tena ilaina ihany.

Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

Handeha amin'ireto sehatra CI manaraka ireto ianao:

  • Miasa amin'ny endri-javatra iray;
  • Fampiharana fitsapana mandeha ho azy mba hiantohana ny kalitao;
  • Fampiharana ny asa laharam-pahamehana;
  • Famahana ny fifanoherana rehefa manambatra sampana (manambatra ny fifandirana);
  • Misy hadisoana mitranga amin'ny tontolo famokarana.

Inona no hianaranao?

Ho afaka hamaly ireto fanontaniana manaraka ireto ianao:

  • Inona no atao hoe integration mitohy (CI)?
  • Karazana fitsapana mandeha ho azy inona no ampiasaina ao amin'ny CI, ary ho setrin'ny hetsika inona no atomboka?
  • Inona no atao hoe fangatahana fisintonana ary rahoviana izy ireo no ilaina?
  • Inona no atao hoe Test Driven Development (TDD) ary ahoana no ifandraisany amin'ny CI?
  • Tokony hanambatra na hamerina ny fanovana ve aho?
  • Avereno na amboary amin'ny dikan-teny manaraka?

Tamin'ny voalohany dia nandika zavatra toy ny β€œfangatahana fisintonana” aho na aiza na aiza, saingy vokatr'izany dia nanapa-kevitra ny hamerina andian-teny amin'ny teny anglisy any amin'ny toerana sasany aho mba hampihenana ny haavon'ny hadalana ao amin'ny lahatsoratra. Hampiasa β€œprogrammer surzhik” aho indraindray toy ny matoanteny mahafinaritra hoe β€œmanolotra” izay tena ampiasain'ny olona any am-piasana.

Inona no atao hoe fampidirana mitohy?

Fampidirana mitohy, na CI, dia fomba fanao ara-teknika izay ampidiran'ny mpikambana tsirairay ny kaody ao amin'ny tahiry iombonana farafahakeliny indray mandeha isan'andro, ary ny kaody aterany dia tsy maintsy amboarina farafaharatsiny tsy misy hadisoana.

Misy ny tsy fitovian-kevitra momba io teny io

Ny tanjon'ny fifandirana dia ny matetika ny fampidirana. Misy milaza fa ny fampifangaroana kaody indray mandeha isan'andro dia tsy ampy raha tena ampidirina tsy tapaka. Omena ohatra ny ekipa iray izay maka kaody vaovao ny tsirairay amin'ny maraina ary mampiditra izany indray mandeha amin'ny hariva. Na dia fanoherana mitombina aza izany, dia inoana amin'ny ankapobeny fa ny famaritana indray mandeha isan'andro dia azo ampiharina, voafaritra ary mety amin'ny ekipa samy hafa habe.

Ny fanoherana iray hafa dia tsy ny C ++ irery intsony no fiteny ampiasaina amin'ny fampandrosoana, ary ny fitakiana fotsiny ny fivoriambe tsy misy hadisoana ho toy ny fomba fanamarinana dia malemy. Tsy maintsy vita soa aman-tsara ihany koa ny andiana andrana sasany (ohatra, andrana natao teo an-toerana). Amin'izao fotoana izao, ny vondrom-piarahamonina dia miroso amin'ny fanaovana izany ho fitakiana, ary amin'ny ho avy dia mety ho fanao mahazatra ny "andrana fananganana + unit", raha mbola tsy nisy izany.

Fampidirana mitohy tsy mitovy amin'ny fanaterana mitohy (Fanaterana tsy tapaka, CD) amin'ny hoe tsy mitaky kandidΓ  famotsorana aorian'ny tsingerin'ny fampidirana tsirairay.

Lisitry ny dingana hampiasaina mandritra ny fianarana

  1. Pull in the latest code. Create a branch from master. Manomboka miasa.
  2. Mamorona commit amin'ny sampanao vaovao. Amboary sy andrana eo an-toerana. Pass? Mandehana any amin'ny dingana manaraka. Tsy nahomby? Amboary ny lesoka na fitsapana ary andramo indray.
  3. Alefaso any amin'ny tahiry lavitra anao na sampana lavitra.
  4. Mamorona fangatahana misintona. Ifanakalozy hevitra ny fanovana, ampio ny fanoloran-tena bebe kokoa rehefa mitohy ny fifanakalozan-kevitra. Ataovy ny fitsapana mandalo amin'ny sampana endri-javatra.
  5. Merge/rebase commits from master. Make tests pass on the merge result.
  6. Alefaso avy amin'ny sampana endri-javatra mankany amin'ny famokarana.
  7. Raha tsara ny zava-drehetra amin'ny famokarana mandritra ny fe-potoana sasany, ampifandraiso amin'ny master.

Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

️ Fiomanana

Ataovy azo antoka fa manana rindrambaiko mety ianao

Mba hahazoana ity taranja ity dia mila Node.js ΠΈ mpanjifa Git.

Afaka mampiasa mpanjifa Git rehetra ianao, fa ny baiko ihany no homeko ny baiko.

Ataovy azo antoka fa manana mpanjifa Git napetraka ianao izay manohana ny baiko baiko

Если Ρƒ вас ΠΏΠΎΠΊΠ° Π½Π΅ установлСн Git-ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ инструкции ΠΏΠΎ установкС eto.

Omano ny tahiry

Mila mamorona kopia manokana (fork) ianao tahiry modely misy kaody ho an'ny taranja amin'ny GitHub. Andao hanaiky hiantso an'ity kopia manokana ity tahiry fianarana.

Vita? Raha toa ka tsy nanova ny firafitry ny default ianao dia azo inoana fa antsoina ny trano fitehirizam-pianaranao continuous-integration-team-scenarios-students, ao amin'ny kaontinao GitHub no misy azy ary toy izao ny URL

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

Hantsoiko fotsiny ity adiresy ity <URL рСпозитория>.

Ny brackets zoro toy ny <Ρ‚ΡƒΡ‚> dia midika fa tsy maintsy soloinao amin'ny sanda mety ny fitenenana toy izany.

Ataovy azo antoka izany Hetsika GitHub tafiditra ao anatin'ity fitahirizana fampianarana ity. Raha tsy alefa izy ireo dia avelao izy ireo amin'ny fipihana ny bokotra lehibe eo afovoan'ny pejy, izay azonao alaina amin'ny fipihana Actions ao amin'ny interface GitHub.

Tsy ho vitanao ny hamita ny fampianarana manaraka ny torolalako raha tsy alefa ny GitHub Actions.

Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

Azonao atao foana ny mampiasa ny fahafahan'i GitHub mamadika ny Markdown hahitana ny toetry ny lisitra ankehitriny izay noforoninay eto.

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

Momba ny valiny

Raha ny fomba tsara indrindra hamitana an'ity taranja ity dia ny manao izany amin'ny tenanao, dia mety ho sahirana ianao.

Raha mahatsapa ianao fa tsy azonao izay tokony hatao ary tsy afaka manohy, dia azonao atao ny mijery ny kofehy solution, izay ao amin'ny tahiry fanombohana anao.
Aza mitambatra azafady solution Π² master mandritra ny fianarana. Azonao atao ny mampiasa ity sampana ity mba hamantarana izay tokony hatao, na hampitahana ny codeo amin'ny an'ny mpanoratra, amin'ny fampiasana ny fahaiza-manao rehetra omen'i Git antsika. Raha very tanteraka ianao dia azonao soloina tanteraka ny sampanao master amin'ny sampana iray solution ary avereno avy eo ny lahatahiry miasa amin'ny dingana ilainao.

Ampiasao fotsiny ity raha tena mila izany ianao

Ampidiro ny kaodinao

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

Ireo baiko ireo

  • Hanova anarana master Π² master-backup;
  • Hanova anarana solution Π² master;
  • checkout amin'ny sampana vaovao master ary soraty indray ny votoatin'ny lahatahiry miasa;
  • Mamorona sampana "vahaolana" avy amin'ny "master" (izay "solution") taloha raha toa ka mila sampana "vahaolana" ianao amin'ny ho avy.

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

Aorian'ireo dingana ireo dia azonao ampiasaina git log master mba hamantarana hoe inona no commit ilainao.
Azonao atao ny mamerina ny lahatahiry miasa amin'ity commit ity toy izao:

git reset --hard <the SHA you need>

Raha faly amin'ny vokatra ianao, amin'ny fotoana iray dia mila mamoaka ny dikan-teninao amin'ny tahiry lavitra ianao. Aza adino ny mamaritra mazava ny sampana lavitra rehefa manao izany ianao.

git push --force origin master

Mariho fa mampiasa izahay git push --force. Tsy azo inoana fa te-hanao izany matetika ianao, saingy manana toe-javatra manokana izahay eto miaraka amin'ny mpampiasa tahiry iray izay, ankoatra izany, dia mahatakatra ny ataony.

Manomboka miasa

Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

Andao hanomboka hanangona ny lisitry ny dingana CI. Amin'ny ankapobeny dia manomboka ity dingana ity ianao amin'ny alΓ lan'ny fijerena ny kinova farany amin'ny kaody avy amin'ny tahiry lavitra, saingy mbola tsy manana tahiry eo an-toerana izahay, noho izany dia manangana azy avy amin'ny lavitra izahay.

️ Asa: manavao ny tahiry eo an-toerana, mamorona sampana avy amin'ny master, manomboka miasa

  1. Clone ny fitahirizana fampianarana avy amin'ny <URL рСпозитория>.
  2. Mihazakazaha npm install ao amin'ny lahatahiry fitahirizana fampianarana; Mila azy io izahay hametraka Jest, izay ampiasainay hanaovana fitsapana.
  3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π΅ feature. Midira amin'ity lohahevitra ity.
  4. Ampio ny code test amin'ny ci.test.js eo anelanelan'ny fanehoan-kevitra mangataka ahy hanao izany.

    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. Ampio lahatsoratra miaraka amin'ireo dingana 4 voalohany amin'ny rakitra 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.  

    didy

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

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

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

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

Mamorona commit amin'ny sampana vaovao, manangana ary andramo eo an-toerana

Hametraka ny andrana hatao isika alohan'ny hanaovana, ary avy eo dia mametraka ny code.

Toe-javatra mahazatra rehefa mandeha ho azy ny fitsapana

  • Eo an-toerana:
    • Mitohy na ho setrin'ny fanovana fehezan-dalΓ na mifanaraka amin'izany;
    • Amin'ny fitahirizana (ho an'ny fiteny voadika na JIT-compiled);
    • Mandritra ny fivoriambe (rehefa ilaina ny fanangonana);
    • On commit;
    • Rehefa mamoaka amin'ny tahiry iombonana.

  • На сСрвСрС сборки(build server) ΠΈΠ»ΠΈ Π² срСдС сборки:
    • Rehefa avoaka amin'ny sampana/repository manokana ny kaody.
    • Ny kaody amin'ity lohahevitra ity dia andrana.
    • Ny mety ho vokatry ny fampivondronana dia andrana (matetika amin'ny master).
    • Amin'ny maha dingana fampidirana mitohy / fantsona fanaterana tsy tapaka

Amin'ny ankapobeny, arakaraky ny fandehanana haingana kokoa ny suite fitsapana iray, dia vao mainka azonao atao ny mampandeha azy io. Mety ho toy izao ny fizarana sehatra mahazatra.

  • Fitsapana vondrona haingana - mandritra ny fananganana, amin'ny fantsona CI
  • Fitsapana singa miadana, fitsapana singa haingana sy fampidirana - amin'ny fanoloran-tena, ao amin'ny fantsona CI
  • Fitsapana singa miadana sy fampidirana - amin'ny fantsona CI
  • ВСстированиС бСзопасности, Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ дорогостоящиС тСсты β€” Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°Ρ… CI/CD, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…/этапах/ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°Ρ… сборки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ Ρ€Π΅Π»ΠΈΠ·-ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ запускС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

️Asa

Manoro hevitra aho ny hamita ny fitsapana amin'ny tanana voalohany amin'ny fampiasana ny baiko npm test. Aorian'izay dia ndao ampio git hook mba hampandehanana ny fitsapana ataontsika. Misy haza iray: Tsy heverina ho anisan'ny fitehirizana ny Git hooks ary noho izany dia tsy azo atao klΓ΄nina avy amin'ny GitHub miaraka amin'ny fitaovana fianarana hafa. Mba hametrahana hook dia mila mihazakazaka ianao install_hook.sh na kopia ny rakitra repo/hooks/pre-commit mankany amin'ny lahatahiry eo an-toerana .git/hooks/.
Rehefa manolo-tena ianao dia ho hitanao fa mandeha ny fitsapana ary manamarina raha misy teny fanalahidy sasany ao amin'ny lisitra.

  1. Manaova andrana amin'ny alΓ lan'ny fampandehanana ny baiko npm test ao amin'ny lahatahiry fitahirizanao. Hamarino fa vita ny fitsapana.
  2. Mametraha commit hook (pre-commit hook) amin'ny alΓ lan'ny mihazakazaka install_hook.sh.
  3. Apetraho amin'ny tahiry eo an-toerana ny fanovanao.
  4. Ataovy azo antoka fa mandeha ny fitsapana alohan'ny hanaovana.

Tokony ho toy izao ny fitehirizanao rehefa avy manaraka ireto dingana ireto.
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

didy

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

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

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

Mamoaka kaody amin'ny tahiry lavitra na sampana lavitra

Rehefa vita ny asa eo an-toerana, dia mazΓ na no ataon'ny mpamorona ny kaody ho ampahibemaso mba hahafahan'izy ireo miditra amin'ny besinimaro amin'ny farany. Miaraka amin'ny GitHub, izany dia azo atao amin'ny famoahana ny asa amin'ny dika mitovy amin'ny tahiry manokana (fork manokana) na sampana manokana.

  • Miaraka amin'ny forks, ny developer dia manao clone ny tahiry ifampizarana lavitra, mamorona kopia lavitra azy manokana, antsoina koa hoe fork. Avy eo dia manao clone an'io tahiry manokana io izy io mba hiarahana miasa eo an-toerana. Rehefa vita ny asa ary vita ny commits, dia atsipiny ao amin'ny garderie izany, izay azon'ny hafa ary azo ampidirina ao amin'ny tahiry iombonana. Ity fomba fiasa ity dia matetika ampiasaina amin'ny tetikasa open source amin'ny GitHub. Izy io koa dia ampiasaina amin'ny taranja mandroso [Team Work sy CI miaraka amin'ny Git] (http://devops.redpill.solutions/).
  • Ny fomba iray hafa dia ny fampiasana tahiry lavitra iray ary manisa ny sampana ihany master tahiry iombonana "arovana". Amin'ity toe-javatra ity, ny mpamorona tsirairay dia mamoaka ny kaody ao amin'ny sampan'ny tahiry lavitra mba ahafahan'ny hafa mijery ity code ity, raha milamina ny zava-drehetra, ampifandraiso amin'ny master tahiry iombonana.

Π’ этом ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ курсС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π²Π΅Ρ‚ΠΊΠΈ.

Andao hamoaka ny kaodinay.

️Asa

  • ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ измСнСния Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ ваша рабочая Π²Π΅Ρ‚ΠΊΠ°

didy

git push --set-upstream origin feature

Mamorona fangatahana misintona

Mamorona fangatahana misintona misy lohateny Famerenana ny dingana... hametraka feature toy ny "head branch" ary master toy ny "sampana fototra".

Ataovy azo antoka fa efa nametraka master amin'ny azy sokafy ny repository Π² качСствС "base branch", я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° запросы Π½Π° измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌΠΈ курса.

На слСнгС GitHub "base branch" β€” это Π²Π΅Ρ‚ΠΊΠ°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ основываСтС свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π° "head branch" β€” это Π²Π΅Ρ‚ΠΊΠ°, содСрТащая ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ измСнСния.

Ifanakalozy hevitra ny fanovana, ampio fanoloran-tena vaovao rehefa mitohy ny fifanakalozan-kevitra

Fangatahana misintona (PR)

Fangatahana misintona (PR) dia fomba iray ifanakalozan-kevitra sy fandraketana fehezan-dalΓ na, ary koa fanaovana famerenana ny fehezan-dalΓ na. Ny fangatahana sintonina dia nomena anarana araka ny fomba ankapoben'ny fampidirana ny fanovana tsirairay amin'ny fehezan-dalΓ na ankapobeny. Amin'ny ankapobeny, misy olona manao clone ny tahiry ofisialin'ny tetikasa ary miasa amin'ny kaody eo an-toerana. Aorian'izany dia mametraka ny kaody ao amin'ny trano fitehirizana azy manokana izy ary mangataka ireo tompon'andraikitra amin'ny tahiry ofisialy haka (Sintony) ny kaody ao amin'ny trano fitehirizan-dry zareo eo an-toerana, izay andinihany sy mety hampidirana azy (mandeha) azy. Ity hevitra ity dia fantatra amin'ny anarana hafa, ohatra, manambatra fangatahana.

Tsy mila mampiasa ny fangatahan'ny GitHub na sehatra mitovy amin'izany ianao. Ny ekipan'ny fampandrosoana dia mety mampiasa fomba fifandraisana hafa, ao anatin'izany ny fifandraisana mivantana, ny antso an-telefaona, na ny mailaka, saingy mbola misy antony maromaro hampiasana ny fangatahana fisarihana amin'ny fomba forum. Ireto ny sasany amin'izy ireo:

  • fifanakalozan-kevitra voalamina mifandraika amin'ny fanovana fehezan-dalΓ na manokana;
  • ho toerana hijerena ny valin-kafatra momba ny asa an-dalam-pandrosoana avy amin'ny autotester sy ny mpiara-miasa;
  • Formation ny famerenana ny fehezan-dalΓ na;
  • mba ho hitanao any aoriana ny antony sy ny fiheverana ao ambadik'ity fehezan-dalΓ na ity.

Amin'ny ankapobeny dia mamorona fangatahana misintona ianao rehefa mila miresaka zavatra na mahazo valiny. Ohatra, raha miasa amin'ny endri-javatra azo ampiharina amin'ny fomba mihoatra ny iray ianao dia afaka mamorona fangatahana misintona alohan'ny hanoratana ny andalana voalohany amin'ny kaody mba hizarana ny hevitrao sy hiresaka momba ny drafitrao amin'ireo mpiara-miasa aminao. Raha tsotra kokoa ny asa, dia misokatra ny fangatahana fisintonana rehefa misy zavatra efa vita, natao ary azo resahina. Amin'ny toe-javatra sasany, azonao atao ny manokatra PR noho ny antony fanaraha-maso ny kalitao: hanaovana fitsapana mandeha ho azy na hanombohana famerenana kaody. Na inona na inona fanapahan-kevitrao dia aza adino ny manonona ny olona izay tadiavinao amin'ny fangatahanao misintona.

Amin'ny ankapobeny, rehefa mamorona PR ianao dia manao izao manaraka izao.

  • Tondroy izay atolotrao hovana ary aiza.
  • Manorata famaritana manazava ny anton'ny fiovana. Mety mila:
    • ampio izay zava-dehibe tsy mibaribary amin'ny kaody, na zavatra ilaina amin'ny fahatakarana ny teny manodidina, toy ny #bugs mifandraika sy ny laharana commit;
    • @ teneno izay tianao hiarahana miasa, na azonao @ teneninao ao anaty commentaire any aoriana any;
    • angataho ny mpiara-miasa hanampy amin'ny zavatra iray na hijery zavatra manokana.

Vantany vao manokatra ny PR ianao, dia tanterahana ny fitsapana natao ho an'ny tranga toy izany. Amin'ny tranga misy anay, ity dia mitovy amin'ny fitsapana nataontsika teo an-toerana, fa amin'ny tetikasa tena izy dia mety hisy fitsapana sy fisavana fanampiny.

Andraso azafady raha mbola vita ny fitsapana. Azonao atao ny mahita ny satan'ny fitsapana eo amin'ny faran'ny fifanakalozan-kevitra PR ao amin'ny interface GitHub. Tohizo rehefa vita ny fitsapana.

️ Manampia fanamarihana momba ny kisendrasendra ny lisitry ny dingana CI

Ny lisitra ampiasaina amin'ity taranja ity dia tsy misy dikany ary manara-penitra, tokony hanampy fanamarihana momba izany isika.

️ Asa: mamorona fangatahana misintona ity fanehoan-kevitra ity

  1. Hiverina any amin'ny branch master.
  2. Mamorona sampana nomena anarana bugfix.
  3. Ampio lahatsoratra naoty amin'ny faran'ny rakitra 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. Ataovy ny fanovana.
  5. ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ bugfix mankany amin'ny tahiry lavitra.
  6. Mamorona fangatahana misintona nomena anarana Manampy fanamarihana misy sampana loha bugfix ary ny sampana fototramaster.

Ataovy azo antoka fa efa nametraka master amin'ny azy sokafy ny repository Π² качСствС "base branch", я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° запросы Π½Π° измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌΠΈ курса.

Toy izao no tokony ho endriky ny fitahirizanao.
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

didy

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

Ankatoavy ny fangatahana misintona "Manampy fanamarihana"

️Asa

  1. Mamorona fangatahana misintona.
  2. Tsindrio ny "Merge pull request".
  3. Tsindrio ny "Confirm merge".
  4. Tsindrio ny "Delete branch", tsy mila izany intsony isika.

Ity dia sarin'ny commit aorian'ny fampifangaroana.
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

️ Tohizo ny asa ary ampio fitsapana

Ny fiaraha-miasa amin'ny fangatahana fisintonana matetika dia miteraka asa fanampiny. Matetika izany dia vokatry ny famerenana na fifanakalozan-kevitra momba ny kaody, fa amin'ny lalantsika dia hanao modely amin'ny fampidirana singa vaovao amin'ny lisitry ny dingana CI.

ΠŸΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ тСстовоС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅. ВрСбования ΠΊ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ тСстами Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находятся Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ€ΠΎΠ΄Π΅ "руководство для Π°Π²Ρ‚ΠΎΡ€ΠΎΠ²"(contribution guidelines). ΠœΡ‹ поступим просто ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎ тСсту для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π² нашСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΌ спискС.

Rehefa manao asa, andramo ny manao ny fitsapana aloha. Raha nametraka tsara ianao pre-commit hook Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ тСст Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½, ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½ΠΎ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‚Π°ΠΊ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ наши тСсты Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚. Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с ΠΊΠΎΠ΄Π° Π΄ΠΎ тСстов, ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ тСстов ΠΌΠΎΠ³Π»ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидалось, Π»ΠΈΠ±ΠΎ Ρ‡Ρ‚ΠΎ тСсты Π½Π° самом Π΄Π΅Π»Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ Π½Π΅ написали тСсты Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ вовсС ΠΈΡ… Π·Π°Π±Ρ‹Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎ Π±Ρ‹ Π½Π°ΠΌ ΠΎΠ± этом.

Fampandrosoana andrana (TDD)

Ny TDD dia manoro hevitra ny hanoratana fitsapana alohan'ny kaody. Toy izao ny fomba fiasa mahazatra mampiasa TDD.

  1. Ampio fitsapana.
  2. Ataovy ny fitsapana rehetra ary ataovy izay hahazoana antoka fa tsy mahomby ny fitsapana vaovao.
  3. Soraty ny kaody.
  4. Manaova fitsapana, ataovy azo antoka fa mandalo ny fitsapana rehetra.
  5. Avereno indray ny codeo.
  6. Avereno.

Satria ny valin'ny fitsapana tsy nahomby dia matetika aseho amin'ny mena, ary ireo izay nandalo dia matetika aseho amin'ny maitso, ny tsingerina dia antsoina koa hoe red-green-refactor.

️Asa

Voalohany, andramo manao ny fitsapana ary avelao izy ireo tsy hahomby, avy eo ampio sy apetraho ny lahatsoratry ny lisitry ny dingana CI. Ho hitanao fa mandalo ny fitsapana ("maitso").
Avy eo dia mamoaka ny kaody vaovao any amin'ny tahiry lavitra ary jereo ny fitsapana mandeha ao amin'ny interface GitHub eo amin'ny farany ambany amin'ny fifanakalozan-kevitra momba ny fangatahana sy ny fanavaozana ny sata PR.

  1. Hiverina any amin'ny branch feature.
  2. Ampio ireto fitsapana ireto ci.test.js aorian'ny antso farany 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. Andramo ny manao ny fitsapana. RAHA pre-commit apetraka ny hook, tsy hahomby ny andrana commit.
  4. Avy eo ampio ity lahatsoratra ity amin'ny 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. Manaova ary manaova fanovana eo an-toerana.
  6. Alefaso ny fanovana amin'ny sampana feature.

Tokony hanana zavatra toy izao ianao
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

didy


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

Atambatra ny fifandirana

Mandehana any amin'ny Change Request Famerenana ny dingana.

Na dia tsy nanao zavatra tsy nety aza izahay ary nandalo ny fitsapana ho an'ny kaody, dia mbola tsy afaka manambatra ny sampana izahay feature ΠΈ master. Satria ilay lohahevitra hafa bugfix dia natambatra tamin'ny master fony izahay niasa tamin'ity PR ity.
Izany dia miteraka toe-javatra izay ny sampana lavitra master manana dikan-teny vaovao kokoa noho ilay nifotoranay ny sampana feature. Noho izany dia tsy afaka mamerina ny HEAD fotsiny isika master hatramin'ny faran'ny kofehy feature. Amin'ity toe-javatra ity dia mila manambatra na mampihatra commit isika feature rebase master. Ny GitHub dia afaka manao fampifangaroana mandeha ho azy raha tsy misy fifandirana. Indrisy, amin'ny toe-javatra misy antsika, ny sampana roa dia manana fiovana mifaninana amin'ny rakitra ci.md. Ity toe-javatra ity dia fantatra amin'ny hoe fifandirana mitambatra, ary mila mamaha izany amin'ny tanana isika.

Atambatra na rebase

mampiray

  • Mamorona commit fanakambanana fanampiny ary mitahiry ny tantaran'ny asa.
    • Mitahiry ny faneken'ny sampana tany am-boalohany miaraka amin'ny mari-pamantarana sy ny mpanoratra azy tany am-boalohany.
    • Mitahiry ny SHA amin'ny commits ary mampifandray azy ireo amin'ny fifanakalozan-kevitra momba ny fangatahana fanovana.
  • Mitaky famahana fifandirana indray mandeha.
  • Mahatonga ny tantara tsy mi-linear.
    • Mety ho sarotra vakina ilay tantara noho ny hamaroan'ny sampana (mampahatsiahy ny tariby IDE).
    • Manasarotra kokoa ny debugging mandeha ho azy, oh. git bisect ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ β€” ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния.

Rebase

  • Ny replays dia manolo-tena avy amin'ny sampana ankehitriny eo an-tampon'ny sampana fototra.
    • Miforona ny fanolorana vaovao miaraka amin'ny SHA vaovao, ka mahatonga ny commit ao amin'ny GitHub hifanaraka amin'ny fangatahana fisintonana tany am-boalohany, fa tsy ny fanehoan-kevitra mifanaraka amin'izany.
    • Ny commits dia azo atambatra sy ovaina ao anatin'ilay dingana, na atambatra ho iray mihitsy aza.
  • Mety mila vahana ny disadisa maro.
  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.
    • Π˜ΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½Π° Π½Π΅ являСтся слишком Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π±Π΅Π· Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Ρ… Π½Π° Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½.
    • Ny debugging mandeha ho azy sy ny famahana olana dia mora kokoa: mahatonga izany ho azo atao git bisect, dia afaka manao ny famerenana mandeha ho azy ho mazava kokoa sy azo vinaniana kokoa.
  • Mitaky ny famoahana sampana misy fifindra-monina misy saina --force rehefa ampiasaina amin'ny fisintonana fangatahana.

Amin'ny ankapobeny, ny ekipa dia manaiky hampiasa tetika mitovy foana rehefa mila manambatra fiovana. Ity dia mety ho fampifangaroana "pure" na commit "pure" eo ambony, na zavatra eo anelanelany, toy ny fanaovana commit on top interactively(git rebase -i) eo an-toerana ho an'ny sampana tsy navoaka tao amin'ny tahiry ho an'ny daholobe, fa mitambatra ho an'ny sampana "public".

Eto isika dia hampiasa merge.

️Asa

  1. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π² локальной Π²Π΅Ρ‚ΠΊΠ΅ master nohavaozina avy amin'ny tahiry lavitra.
  2. Hiverina any amin'ny branch feature.
  3. Manomboha mitambatra amin'ny sampana master. Π‘ΡƒΠ΄Π΅Ρ‚ сообщСно ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π΅ слияния, связанном с ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ измСнСниями Π² ci.md.
  4. Vahao ny fifandirana mba hijanonana ao amin'ny lahatsoratra ny lisitry ny dingana CI sy ny naoty momba azy.
  5. Mamoaka merge commit amin'ny sampana lavitra feature.
  6. Jereo ny satan'ny fangatahana fisintonana ao amin'ny GitHub UI ary andraso mandra-pahavitan'ny fampifangaroana.

didy

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

Asa tsara!

Vita ny lisitra ianao ary izao dia mila manaiky ny fangatahana fisintonana ianao master.

️ Asa: Ankatoavy ny fangatahana fisintonana "Steps review"

  1. Sokafy fangatahana fisintonana.
  2. Tsindrio ny "Merge pull request".
  3. Tsindrio ny "Confirm merge".
  4. Kitiho ny "Delete branch" satria tsy mila azy intsony isika.

Ity ny fitahirizanao amin'izao fotoana izao
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

Fahadisoan'ny vokatra

Voalaza fa β€œazo ampiasaina hanehoana ny fisian’ny fahadisoana ny fitsapana, fa tsy hanehoana velively ny tsy fisiany”. Na dia nanao fitsapana aza izahay ary tsy nampiseho lesoka taminay, dia nisy bibikely mamitaka niditra tao amin'ny famokarana.

Amin'ny toe-javatra toy izany dia mila mitandrina isika:

  • izay apetraka amin'ny famokarana;
  • kaody amin'ny kofehy master misy hadisoana, izay ahafahan'ny mpamorona manomboka asa vaovao.

ΠžΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии?

Ny fihemorana dia ny dingan'ny fametrahana dikan-teny tsara fantatra teo aloha ho amin'ny famokarana sy famerenana ny commits izay misy ny fahadisoana. Ny "Fixing forward" dia ny fanampiana ny fanamboarana ny master ary mametraka ny dikan-teny vaovao haingana araka izay azo atao. Satria miova ny tetika API sy ny angon-drakitra rehefa apetraka amin'ny famokarana ny kaody, miaraka amin'ny fandefasana mitohy sy fandrakofam-panadinana tsara, mazΓ na sarotra sy mampidi-doza kokoa ny mihemotra noho ny fanamboarana azy amin'ny dikan-teny manaraka.

Koa satria tsy mitondra risika amin'ny raharahantsika ny mihemotra, dia handeha amin'ity lalana ity izahay, satria mamela anay izany

  • amboary haingana araka izay azo atao ny fahadisoana amin'ny vokatra;
  • manao code in master mety avy hatrany hanombohana asa vaovao.

️Asa

  1. Hiverina any amin'ny branch master eo an-toerana.
  2. Fanavaozana ny tahiry eo an-toerana avy amin'ny tahiry lavitra.
  3. Avereno ny commit PR merge Famerenana ny dingana Π² master.
  4. Mamoaka fanovana amin'ny tahiry lavitra.

Ity ny tantaran'ny tahiry misy commit mitambatra naverina
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

didy

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

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

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

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

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

️ Fitsapana tena

Hamarino tsara izany ci.md tsy misy soratra hoe "sneaky bug" intsony rehefa avy namerina ny commit merge.

Amboary ny lisitry ny dingana CI ary avereno amin'ny master

Naverinay tanteraka ny merge commit an'ny sampana. feature. Ny vaovao tsara dia tsy misy diso isika izao master. Ny vaovao ratsy dia ny lisitra sarobidin'ny dingana fampidirana mitohy dia lasa koa. Noho izany, ny tsara indrindra dia mila mampihatra ny fanamboarana amin'ny commit avy amin'ny feature ary avereno any master miaraka amin'ny fanamboarana.

Afaka manatona ny olana amin'ny fomba samihafa isika:

  • avereno commit izay manafoana ny fitambarana feature с master;
  • mihetsika commit avy amin'ny teo aloha feature.

Ny ekipan'ny fampandrosoana samihafa dia mampiasa fomba fiasa samihafa amin'ity tranga ity, saingy hamindra ny fanoloran-tena ilaina amin'ny sampana misaraka izahay ary hamorona fangatahana fisarihana misaraka ho an'ity sampana vaovao ity.

️Asa

  1. Mamorona kofehy antsoina hoe feature-fix ary mifamadika amin'izany.
  2. Afindrao ny commit rehetra avy amin'ny sampana teo aloha feature amin'ny kofehy vaovao. Mamaha ny fifandirana mampitambatra nitranga nandritra ny fifindra-monina.

    Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

  3. Manampia fitsapana mihemotra amin'ny ci.test.js:

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

  4. Manaova fitsapana eo an-toerana mba hahazoana antoka fa tsy mahomby izy ireo.
  5. Esory ny lahatsoratra "miaraka amin'ny bibikely manjavozavo" ao ci.md.
  6. Ampio ny fanovana fitsapana sy fanovana lisitry ny dingana amin'ny index ary ataovy izany.
  7. Avoahy amin'ny tahiry lavitra ny sampana.

Tokony hiafara amin'ny zavatra mitovy amin'izany ianao:
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

didy

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

Mamorona fangatahana misintona.

Mamorona fangatahana misintona misy lohateny Fanamboarana ny endri-javatra... hametraka feature-fix toy ny "head branch" ary master toy ny "sampana fototra".
Miandrasa mandra-pahavitan'ny fitsapana. Azonao atao ny mahita ny satan'ny fitsapana eo amin'ny faran'ny fifanakalozan-kevitra PR.

Ataovy azo antoka fa efa nametraka master amin'ny azy sokafy ny repository Π² качСствС "base branch", я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° запросы Π½Π° измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌΠΈ курса.

Ankatoavy ny fangatahana fisintonana "Fixing the feature"

Бпасибо Π·Π° исправлСниС! ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΡƒΡ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ измСнСния Π² master avy amin'ny fisintonana fangatahana.

️Asa

  1. Tsindrio ny "Merge pull request".
  2. Tsindrio ny "Confirm merge".
  3. Kitiho ny "Delete branch" satria tsy mila azy intsony isika.

Izany no tokony hanananao amin'izao fotoana izao.
Toe-javatra mahazatra miaraka amin'ny fampidirana mitohy

Arahabaina!

Vitanao ny dingana rehetra izay matetika ataon'ny olona mandritra ny fampidirana mitohy.

Raha mahatsikaritra olana amin'ny taranja ianao na mahafantatra ny fomba hanatsarana azy, azafady mamorona olana ao repository miaraka amin'ny fitaovana fianarana. Misy ihany koa ity taranja ity dikan-teny interactive mampiasa GitHub Learning Lab ho sehatra iray.

Source: www.habr.com

Add a comment