Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

Π˜Π·ΡƒΡ‡ΠΈΠ»ΠΈ Π»ΠΈ стС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π½Π° Git, Π½ΠΎ искатС Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ наистина ΠΏΡ€ΠΎΡ‚ΠΈΡ‡Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция (Continuous Integration, CI)? Или ΠΌΠΎΠΆΠ΅ Π±ΠΈ искатС Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΈΡ‚Π΅ си дСйствия? Π’ΠΎΠ·ΠΈ курс Ρ‰Π΅ Π²ΠΈ прСдостави практичСски умСния Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² GitHub. ΠšΡƒΡ€ΡΡŠΡ‚ Π½Π΅ Π΅ замислСн ΠΊΠ°Ρ‚ΠΎ някакъв wizard, ΠΊΠΎΠΉΡ‚ΠΎ просто Π΄Π° ΠΊΠ»ΠΈΠΊΠ°Ρ‚Π΅, Π° Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Ρ‰Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ ΡΡŠΡ‰ΠΈΡ‚Π΅ дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° Ρ€Π΅Π°Π»Π½ΠΎ правят Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°, ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚Π΅ Π³ΠΎ правят. Π©Π΅ обяснявам тСорията, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚Π΅ ΠΏΡ€Π΅Π· ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с нСя.

Какво Ρ‰Π΅ ΠΏΡ€Π°Π²ΠΈΠΌ?

Π‘ Π½Π°ΠΏΡ€Π΅Π΄Π²Π°Π½Π΅Ρ‚ΠΎ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ постСпСнно Π΄Π° създавамС списък с Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ Π·Π° CI, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ списък. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Ρ‰Π΅ създадСм списък с дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΠΊΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ прост Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ тСстовС, Π·Π° Π΄Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠΈΠΌ нашия CI процСс Π΄ΠΎ рСалността.

Π’ΠΎΠ·ΠΈ GIF ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ във Π²Π°ΡˆΠ΅Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€Π΅Π΄Π²Π°Ρ‚Π΅ Π² курса. ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, няма Π½ΠΈΡ‰ΠΎ слоТно β€” само Π½Π°ΠΉ-Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡ‚ΠΎ.

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

Π©Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π· стандартни Π·Π° CI сцСнарии:

  • Π Π°Π±ΠΎΡ‚Π° ΠΏΠΎ функция;
  • ΠŸΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° автотСстовС Π·Π° осигуряванС Π½Π° качСство;
  • РСализация Π½Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Π° Π·Π°Π΄Π°Ρ‡Π°;
  • Π Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ сливанС Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ (merge conflict);
  • Π’ΡŠΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Π° срСда.

Какво Ρ‰Π΅ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅?

Π©Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° слСднитС Π²ΡŠΠΏΡ€ΠΎΡΠΈ:

  • Какво Π΅ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция (CI)?
  • Какви Ρ‚ΠΈΠΏΠΎΠ²Π΅ автотСстовС сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€ΠΈ CI ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ дСйствия сС стартират?
  • Какво Π΅ pull request ΠΈ ΠΊΠΎΠ³Π° са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ?
  • Какво Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€Π΅Π· тСстиранС (Test Driven Development, TDD) ΠΈ ΠΊΠ°ΠΊ тя ΡΡŠΠΎΡ‚Π½Π°ΡΡ с CI?
  • Π”Π° ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΈΠΌ сливанС (merge) ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ (rebase)?
  • Π”Π° ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ Π² слСдващата вСрсия?

Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π°Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ ΠΊΠ°Ρ‚ΠΎ "pull request", Π½ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ€Π΅ΡˆΠΈΡ… Π΄Π° оставя Ρ„Ρ€Π°Π·ΠΈΡ‚Π΅ Π½Π° английски Π½Π° някои мСста, Π·Π° Π΄Π° намаля стСпСнта Π½Π° ΠΎΠ±ΡŠΡ€ΠΊΠ²Π°Π½Π΅ Π² тСкста. Понякога Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ "програматорски сурТик" ΠΊΠ°Ρ‚ΠΎ интСрСсния Π³Π»Π°Π³ΠΎΠ» "закомитя", Ρ‚Π°ΠΌ ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° наистина Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си.

Какво Π΅ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция?

ΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция, ΠΈΠ»ΠΈ CI, Ρ‚ΠΎΠ²Π° Π΅ тСхничСска ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΠΏΡ€ΠΈ която всСки Ρ‡Π»Π΅Π½ Π½Π° Π΅ΠΊΠΈΠΏΠ° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° своя ΠΊΠΎΠ΄ Π² ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΏΠΎΠ½Π΅ вСднъТ Π½Π° Π΄Π΅Π½, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ трябва ΠΏΠΎΠ½Π΅ Π΄Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ.

Има разминавания относно Ρ‚ΠΎΠ·ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½.

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π½Π° спора Π΅ чСстотата Π½Π° интСграция. Някои Ρ‚Π²ΡŠΡ€Π΄ΡΡ‚, Ρ‡Π΅ обСдиняванСто Π½Π° ΠΊΠΎΠ΄Π° само вСднъТ Π½Π° Π΄Π΅Π½ Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΈ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ трябва Π΄Π° сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ. ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сС посочва Π΅ΠΊΠΈΠΏ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ всички Π²Π·ΠΈΠΌΠ°Ρ‚ Π½ΠΎΠ² ΠΊΠΎΠ΄ сутрин ΠΈ сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Ρ‚ вСднъТ Π²Π΅Ρ‡Π΅Ρ€Ρ‚Π°. ΠœΠ°ΠΊΠ°Ρ€ Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π²ΡŠΠ·Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, всС ΠΏΠ°ΠΊ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ сС счита, Ρ‡Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΡŠΡ‚ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ "вСднъТ Π½Π° Π΄Π΅Π½" Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅Π½, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΈ подходящ Π·Π° Π΅ΠΊΠΈΠΏΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€.

Π”Ρ€ΡƒΠ³ΠΎ Π²ΡŠΠ·Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΅, Ρ‡Π΅ C++ ΠΎΡ‚Π΄Π°Π²Π½Π° Π½Π΅ Π΅ СдинствСният Π΅Π·ΠΈΠΊ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΈ простото изискванС Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠ°Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅, Π΅ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ. Набор ΠΎΡ‚ тСстовС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ) ΡΡŠΡ‰ΠΎ трябва Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° общността сС стрСми към Ρ‚ΠΎΠ²Π° изискванСто Π΄Π° станС Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ "компилация + ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ тСстовС" ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Ρ‰Π΅ станС ΠΎΠ±Ρ‰ΠΎΠΏΡ€ΠΈΠ΅Ρ‚ΠΎ, Π°ΠΊΠΎ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π½Π΅ сС Π΅ случило.

ΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° доставка (Continuous Delivery, CD) ΠΏΠΎ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π½Π΅ изисква ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π·Π° вСрсия слСд всСки Ρ†ΠΈΠΊΡŠΠ» Π½Π° интСграция.

Бписък Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡ€Π΅Π· курса.

  1. Π˜Π·Ρ‚Π΅Π³Π»Π΅Ρ‚Π΅ послСдния ΠΊΠΎΠ΄. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ ΠΎΡ‚ master. Π—Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°.
  2. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π½Π° новия си ΠΊΠ»ΠΎΠ½. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈ тСстватС Π»ΠΎΠΊΠ°Π»Π½ΠΎ. УспСх? ΠŸΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ към слСдващата ΡΡ‚ΡŠΠΏΠΊΠ°. НСуспСх? ΠŸΠΎΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΈΠ»ΠΈ тСстовСтС ΠΈ ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.
  3. Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Ρ‚Π΅ Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ си Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ»ΠΈ отдалСчСния ΠΊΠ»ΠΎΠ½.
  4. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request. ΠžΠ±ΡΡŠΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΎΡ‰Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ дискусията ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°. НаправСтС тСстовСтС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ Π½Π° ΠΊΠ»ΠΎΠ½ Π·Π° функцията.
  5. ΠžΠ±Π΅Π΄ΠΈΠ½Π΅Ρ‚Π΅/прСосновСтС ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ master. НаправСтС тСстовСтС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.
  6. Π Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ ΠΊΠ»ΠΎΠ½Π° Π·Π° функцията Π² продукция.
  7. Ако всичко Π΅ Π΄ΠΎΠ±Ρ€Π΅ Π² продукция Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² master.

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

️ ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ½ΠΎΡ‚ΠΎ софтуСрно осигуряванС

Π—Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ·ΠΈ курс, Ρ‰Π΅ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Node.js ΠΈ Git ΠΊΠ»ΠΈΠ΅Π½Ρ‚.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ всСки Git ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π½ΠΎ Π°Π· Ρ‰Π΅ прСдставям ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ само Π·Π° командния Ρ€Π΅Π΄.

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ инсталиран Git ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° командния Ρ€Π΅Π΄.

Ако всС ΠΎΡ‰Π΅ Π½Π΅ стС инсталирали Git ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° командния Ρ€Π΅Π΄, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ инструкции Π·Π° инсталиранС. Ρ‚ΡƒΠΊ..

ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.

Π©Π΅ трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π»ΠΈΡ‡Π½Π° копия (fork) Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ с ΠΊΠΎΠ΄ Π·Π° курса Π² GitHub. НСка сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΄Π° Π½Π°Ρ€ΠΈΡ‡Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ Π»ΠΈΡ‡Π½Π° копия Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° курса..

Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ Π»ΠΈ Π΅? Ако Π½Π΅ стС промСняли настройкитС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π²Π°ΡˆΠΈΡΡ‚ курс Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈ Π΅ вСроятно Π½Π°Ρ€Π΅Ρ‡Π΅Π½ continuous-integration-team-scenarios-students, Ρ‚ΠΎΠΉ сС Π½Π°ΠΌΠΈΡ€Π° Π² Π°ΠΊΠ°ΡƒΠ½Ρ‚Π° Π²ΠΈ Π² GitHub ΠΈ URL Π°Π΄Ρ€Π΅ΡΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°

https://github.com//continuous-integration-team-scenarios-students

Π©Π΅ Π½Π°Ρ€Π΅ΠΊΠ° Ρ‚ΠΎΠ·ΠΈ адрСс просто <URL рСпозитория>.

ΠͺΠ³Π»ΠΎΠ²ΠΈΡ‚Π΅ скоби ΠΊΠ°Ρ‚ΠΎ <Ρ‚ΡƒΡ‚> Ρ‰Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‚, Ρ‡Π΅ трябва Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠ²Π° ΠΈΠ·Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с подходящата стойност.

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ GitHub дСйствия са Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ Π·Π° Ρ‚ΠΎΠ·ΠΈ курс рСпозитория. Ако Π½Π΅ са Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ, моля, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ Π³ΠΈ, ΠΊΠ°Ρ‚ΠΎ натиснСтС голямото ΠΊΠΎΠΏΡ‡Π΅ Π² срСдата Π½Π° страницата, Π΄ΠΎ ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° достигнСтС, ΠΊΠ°Ρ‚ΠΎ ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Actions Π² интСрфСйса Π½Π° GitHub.

Няма Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ курса, слСдвайки ΠΌΠΎΠΈΡ‚Π΅ инструкции, Π°ΠΊΠΎ GitHub дСйствия Π½Π΅ са Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ.

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

Π’ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π½Π° GitHub Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° Markdown, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° списъка, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡΡ‚Π°Π²ΡΠΌΠ΅, Ρ‚ΡƒΠΊ

https://github.com//continuous-integration-team-scenarios-students/blob/master/ci.md

Π—Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅

Π”ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΉ-добрият Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ курс Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ всичко сами, ΠΌΠΎΠΆΠ΅ Π΄Π° срСщнСтС трудности.

Ако усСщатС, Ρ‡Π΅ Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π² ΠΊΠ»ΠΎΠ½Π° solution, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π² Π²Π°ΡˆΠ΅Ρ‚ΠΎ стартиранС рСпозитория.
Моля, Π½Π΅ ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π°ΠΉΡ‚Π΅ сливанС solution Π² master ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° курса. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΠΎΠ½, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ Π΄Π° сравнитС ΠΊΠΎΠ΄Π° си с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ всички Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, прСдоставСни ΠΎΡ‚ Git. Ако стС напълно Π·Π°Π³ΡƒΠ±Π΅Π½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ напълно Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ своя ΠΊΠ»ΠΎΠ½ master с ΠΊΠ»ΠΎΠ½Π° solution ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° Π½ΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° си дирСктория Π΄ΠΎ ΡΡ‚ΡŠΠΏΠΊΠ°Ρ‚Π° ΠΎΡ‚ курса, която Π²ΠΈ Π΅ Π½ΡƒΠΆΠ½Π°.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ²Π° само Π°ΠΊΠΎ наистина Π΅ Π½ΡƒΠΆΠ½ΠΎ

Π—Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ (commit) ΠΊΠΎΠ΄Π° си

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

Π’Π΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ

  • ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Ρ‚ master Π² master-backup;
  • ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Ρ‚ solution Π² master;
  • ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ (checkout) Π½Π° Π½ΠΎΠ² ΠΊΠ»ΠΎΠ½ master ΠΈ прСзаписват ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° дирСктория;
  • ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΊΠ»ΠΎΠ½ "solution" ΠΎΡ‚ "master" (ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ бСшС "solution") Π² случай Ρ‡Π΅ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ Π²ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ»ΠΎΠ½Π° "solution".

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

Π‘Π»Π΅Π΄ Ρ‚Π΅Π·ΠΈ дСйствия ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ git log master Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, ΠΊΠΎΠΉ commit Π²ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½.
ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½ΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° си дирСктория Π΄ΠΎ Ρ‚ΠΎΠ·ΠΈ commit Ρ‚Π°ΠΊΠ°:

git reset --hard

Ако стС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‰Π΅ трябва Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ вСрсията Π½Π° вашия Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² отдалСчСния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. НС забравяйтС Π΄Π° посочитС ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΠΊΠ»ΠΎΠ½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅.

git push --force origin master

Моля, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ git push --force. Малко вСроятно Π΅ Π΄Π° искатС Π΄Π° дСйстватС ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ чСсто, Π½ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ спСцифичСн сцСнарий с Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° рСпозитория, ΠΊΠΎΠΉΡ‚ΠΎ освСн Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Π±ΠΈΡ€Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ.

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

НСка ΡΡŠΡΡ‚Π°Π²ΠΈΠΌ нашия списък ΠΎΡ‚ ΡΡ‚ΡŠΠΏΠΊΠΈ CI. ОбикновСно Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠ° с ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° послСдната вСрсия Π½Π° ΠΊΠΎΠ΄Π° ΠΎΡ‚ отдалСчСния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΠΎ нямамС Π»ΠΎΠΊΠ°Π»Π΅Π½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π·Π°Ρ‚ΠΎΠ²Π° вмСсто Ρ‚ΠΎΠ²Π° Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ ΠΎΡ‚ отдалСчСния.

️ Π—Π°Π΄Π°Π½ΠΈΠ΅: ΠΎΠ±Π½ΠΎΠ²Π΅Ρ‚Π΅ локалния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ ΠΎΡ‚ master, Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€Π°ΠΉΡ‚Π΅ курса Π½Π° рСпозитория ΠΎΡ‚ <URL рСпозитория>.
  2. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ npm install Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π½Π° курса; Π½ΡƒΠΆΠ΅Π½ Π΅ Π·Π° инсталиранС Π½Π° Jest, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° стартиранС Π½Π° тСстовС.
  3. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ ΠΈ Π³ΠΎ Π½Π°Ρ€Π΅Ρ‡Π΅Ρ‚Π΅ feature. ΠŸΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π΅Ρ‚Π΅ сС Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΠΎΠ½.
  4. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ тСстовия ΠΊΠΎΠ΄ Π² ci.test.js ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ с ΠΌΠΎΠ»Π±Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅.

    it('1. ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ послСдния ΠΊΠΎΠ΄', () => {
      expect(/.*pull.*?/ig.test(fileContents)).toBe(true);
    });
    
    it('2. Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ', () => {
      expect(/.*commit.*?/ig.test(fileContents)).toBe(true);
    });
    
    it('3. натиснСтС Π΄ΠΎ отдалСчСния ΠΊΠ»ΠΎΠ½ със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅', () => {
      expect(/.*push.*?/ig.test(fileContents)).toBe(true);
    });
    
    it('4. ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request ΠΈ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°', () => {
      expect(/.*pulls+request.*?/ig.test(fileContents)).toBe(true);
    });

  5. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ тСкста с ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ 4 ΡΡ‚ΡŠΠΏΠΊΠΈ Π² Ρ„Π°ΠΉΠ»Π° ci.md.
    1. Π˜Π·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ послСдния ΠΊΠΎΠ΄. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ ΠΎΡ‚ `master`. Π—Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°.
    2. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π½Π° новия си ΠΊΠ»ΠΎΠ½. Π‘Π³Π»ΠΎΠ±Π΅Ρ‚Π΅ ΠΈ тСствайтС Π»ΠΎΠΊΠ°Π»Π½ΠΎ.
    Минава? ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° слСдващата ΡΡ‚ΡŠΠΏΠΊΠ°. НС ΠΌΠΈΠ½Π°Π²Π°? ΠŸΠΎΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΈΠ»ΠΈ тСстовСтС ΠΈ ΠΏΡ€ΠΎΠ±Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.
    3. НатиснСтС Π΄ΠΎ вашия ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΠΊΠ»ΠΎΠ½.
    4. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request. ΠžΠ±ΡΡŠΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, добавяйтС ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π² Ρ…ΠΎΠ΄Π° Π½Π° ΠΎΠ±ΡΡŠΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ. НакарайтС тСстовСтС Π΄Π° ΠΌΠΈΠ½Π°Ρ‚ Π² ΠΊΠ»ΠΎΠ½Π° с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅.  

    ΠžΡ‚Π±ΠΎΡ€ΠΈ

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

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

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

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

Π‘ΡŠΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π² новия ΠΊΠ»ΠΎΠ½, ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ сборки ΠΈ тСстовС Π»ΠΎΠΊΠ°Π»Π½ΠΎ

Π©Π΅ настроим тСстовСтС Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΡ€Π΅Π΄ΠΈ ΠΊΠΎΠΌΠΈΡ‚, Π° слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π°.

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ сцСнарии, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ тСстовСтС сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ

  • Π›ΠΎΠΊΠ°Π»Π½ΠΎ:
    • ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ ΠΈΠ»ΠΈ Π² ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°;
    • ΠŸΡ€ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ (Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΈ ΠΈΠ»ΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ);
    • ΠŸΡ€ΠΈ сборка (ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° компилация);
    • ΠŸΡ€ΠΈ ΠΊΠΎΠΌΠΈΡ‚;
    • ΠŸΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π² ΠΎΠ±Ρ‰ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

  • На ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° сборки (build server) ΠΈΠ»ΠΈ Π² срСдата Π·Π° сборка:
    • ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° Π² Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΠΎΠ½ / Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
    • ΠšΠΎΠ΄ΡŠΡ‚ Π² Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΠΎΠ½ сС тСства.
    • ВСства сС потСнциалният Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ сливанС (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ с master).
    • ΠšΠ°Ρ‚ΠΎ Π΅Ρ‚Π°ΠΏ ΠΎΡ‚ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция/Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° доставка

ОбикновСно, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ сС изпълнява Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ тСстовС, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-чСсто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° си ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ Π΄Π° Π³ΠΈ стартиратС. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°.

  • Π‘ΡŠΡ€Π·ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ тСстовС β€” ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Π² CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°
  • Π‘Π°Π²Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ тСстовС, Π±ΡŠΡ€Π·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ тСстовС β€” ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΈΡ‚, Π² CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°
  • Π‘Π°Π²Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ тСстовС β€” Π² CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°
  • ВСстовС Π·Π° сигурност, Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Ρ‰ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΈ ΠΈΠ»ΠΈ скъпи тСстовС β€” Π² CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈΡ‚Π΅, Π½ΠΎ само Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠΈ/Π΅Ρ‚Π°ΠΏΠΈ/ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈ Π½Π° сглобяванС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π·Π° вСрсия ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Ρ€ΡŠΡ‡Π½ΠΎ стартиранС.

️ Π—Π°Π΄Π°Ρ‡Π°

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ ΠΏΡŠΡ€Π²ΠΎ Π΄Π° стартирамС тСстовСтС Ρ€ΡŠΡ‡Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° npm test. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ git hook, Π·Π° Π΄Π° стартирамС тСстовСтС си ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΈΡ‚. Има Π΅Π΄Π½ΠΎ ΡƒΠ»ΠΎΠ²ΠΊΠ°: Git hooks Π½Π΅ сС считат Π·Π° част ΠΎΡ‚ рСпозитория ΠΈ слСдоватСлно Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ GitHub Π·Π°Π΅Π΄Π½ΠΎ с останалото ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π½Π° курса. Π—Π° Π΄Π° установитС hook, трябва Π΄Π° стартиратС install_hook.sh ΠΈΠ»ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ Ρ„Π°ΠΉΠ»Π° repo/hooks/pre-commit Π² Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° дирСктория .git/hooks/.
ΠŸΡ€ΠΈ ΠΊΠΎΠΌΠΈΡ‚ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ тСстовСтС сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΈ Ρ‚Π΅ провСряват Π΄Π°Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ.

  1. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ тСстовСтС Ρ€ΡŠΡ‡Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° npm test Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° рСпозитория Π½Π° курса. Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ тСстовСтС са Π±ΠΈΠ»ΠΈ изпълнСни.
  2. НастройтС hook Π·Π° ΠΊΠΎΠΌΠΈΡ‚ (pre-commit hook), ΠΊΠ°Ρ‚ΠΎ стартиратС install_hook.sh.
  3. ΠšΠΎΠΌΠΈΡ‚Π½Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² локалния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
  4. Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ тСстовСтС сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΡ€Π΅Π΄ΠΈ ΠΊΠΎΠΌΠΈΡ‚Π°.

Π’Π°ΡˆΠΈΡΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ° слСд ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ дСйствия.
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

ΠžΡ‚Π±ΠΎΡ€ΠΈ

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

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

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

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄Π° Π² отдалСчСния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΠΊΠ»ΠΎΠ½

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π°Ρ‚ с Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ правят ΠΊΠΎΠ΄Π° си общСствСно Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π΄Π° бъдС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ с общия. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° GitHub Ρ‚ΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС постига Ρ‡Ρ€Π΅Π· ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΈΠ»ΠΈ Π² Π»ΠΈΡ‡Π½Π° копия Π½Π° рСпозитория (personal fork, Ρ„ΠΎΡ€ΠΊ), ΠΈΠ»ΠΈ Π² Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΠΎΠ½.

  • ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„ΠΎΡ€ΠΊΠΎΠ²Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ общСствСно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, създавайки собствСно ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅, извСстно ΡΡŠΡ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΊ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π° Ρ‚ΠΎΠ²Π° собствСно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π½Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π° ΠΈ ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ са създадСни, Ρ‚ΠΎΠΉ Π³ΠΈ поставя във своя Ρ„ΠΎΡ€ΠΊ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‚Π΅ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ Π² ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π² GitHub. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² моя Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ курс [Team Work and CI with Git]http://devops.redpill.solutions/).
  • Π”Ρ€ΡƒΠ³ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π΅Π΄Π½ΠΎ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ Π΄Π° сС счита само ΠΊΠ»ΠΎΠ½ΡŠΡ‚ master Π½Π° сподСлСното Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° "Π·Π°Ρ‰ΠΈΡ‚Π΅Π½". Π’ Ρ‚ΠΎΠ·ΠΈ сцСнарий ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ своя ΠΊΠΎΠ΄ Π² ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π΄Π° видят Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄, ΠΈ Π°ΠΊΠΎ всичко Π΅ Π½Π°Ρ€Π΅Π΄, Π΄Π° Π³ΠΎ обСдинят с master ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Π’ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ курс Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ»ΠΎΠ½ΠΈ.

НСка ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ нашия ΠΊΠΎΠ΄.

️ Π—Π°Π΄Π°Ρ‡Π°

  • ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΠΊΠ»ΠΎΠ½ с ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ ΠΊΠ°Ρ‚ΠΎ вашия Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΊΠ»ΠΎΠ½

ΠžΡ‚Π±ΠΎΡ€ΠΈ

git push --set-upstream origin feature

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request с ΠΈΠΌΠ΅ Π‘Ρ‚ΡŠΠΏΠΊΠΈ Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄. Π—Π°Π΄Π°ΠΉΡ‚Π΅ feature ΠΊΠ°Ρ‚ΠΎ "head branch" ΠΈ master ΠΊΠ°Ρ‚ΠΎ "base branch".

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ стС Π·Π°Π΄Π°Π»ΠΈ master Π² своя Ρ„ΠΎΡ€ΠΊΠ° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ "base branch", няма Π΄Π° отговарям Π½Π° заявки Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΡ‚Π΅ Π½Π° курса.

На ΠΆΠ°Ρ€Π³ΠΎΠ½Π° Π½Π° GitHub "base branch" Π΅ ΠΊΠ»ΠΎΠ½Π°, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ основаватС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си, Π° "head branch" Π΅ ΠΊΠ»ΠΎΠ½Π°, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.

ΠžΠ±ΡΡŠΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π½ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΈΡ‚ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° ΠΎΠ±ΡΡŠΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ

Pull request (PR)

Pull request (PR) Π΅ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС обсъТда ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΊΠΎΠ΄Π°, Π° ΡΡŠΡ‰ΠΎ ΠΈ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΊΠΎΠ΄Π° (code review). Pull request-ΠΈΡ‚Π΅ са Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ Π½Π° общия Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² общия ΠΊΠΎΠ΄. ОбикновСно Ρ‡ΠΎΠ²Π΅ΠΊ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°Π΄ ΠΊΠΎΠ΄Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ поставя ΠΊΠΎΠ΄Π° Π² собствСното си ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ ΠΌΠΎΠ»ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ°Ρ‚pull) нСговия ΠΊΠΎΠ΄ Π² своитС Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‚Π΅ Π³ΠΎ ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΈ, възмоТно, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Ρ‚merge) Π³ΠΎ. Π’ΠΎΠ²Π° понятиС Π΅ извСстно ΠΈ ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠΌΠ΅Π½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, merge request.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ функцията pull request Π½Π° GitHub ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ΠΈΡ‚Π΅ Π΅ΠΊΠΈΠΏΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ срСдства Π·Π° комуникация, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π»ΠΈΡ‡Π½ΠΈ срСщи, Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ΠΈ ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅ΠΉΠ», Π½ΠΎ всС ΠΏΠ°ΠΊ ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚Π°ΠΊΠΈΠ²Π° pull requests ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° обсъТданС. Π•Ρ‚ΠΎ някои ΠΎΡ‚ тях:

  • ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ обсъТдания, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°;
  • ΠΊΠ°Ρ‚ΠΎ място Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΎΡ‚Π·ΠΈΠ²ΠΈ Π·Π° Π½Π΅Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ тСстовС ΠΈ ΠΊΠΎΠ»Π΅Π³ΠΈ;
  • Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΊΠΎΠ΄Π°;
  • Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΠΎ-късно Π΄Π° сС изяснят ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ ΠΈ ΡΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΡ‚Π° Π·Π°Π΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ ΠΊΠΎΠ΄Π°.

ОбикновСно ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ pull request, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° Π΄Π° ΠΎΠ±ΡΡŠΠ΄ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°. НапримСр, Π°ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎ функция, която ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎ няколко Π½Π°Ρ‡ΠΈΠ½Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° промяна Π΄ΠΎΡ€ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π΄ ΠΊΠΎΠ΄, Π·Π° Π΄Π° сподСлитС ΠΈΠ΄Π΅ΠΈΡ‚Π΅ си ΠΈ Π΄Π° ΠΎΠ±ΡΡŠΠ΄ΠΈΡ‚Π΅ ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅ си с ΠΊΠΎΠ»Π΅Π³ΠΈΡ‚Π΅. Ако Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ ΠΏΠΎ-проста, pull request сС отваря, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅Ρ‰ΠΎ Π΅ Π²Π΅Ρ‡Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ, фиксирано ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС обсъТдано. Π’ някои сцСнарии ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ PR само ΠΎΡ‚ ΡΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° качСството: Π·Π° Π΄Π° стартиратС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ тСстовС ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΊΠΎΠ΄Π°. ΠšΠ°ΠΊΠ²ΠΎΡ‚ΠΎ ΠΈ Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅, Π½Π΅ забравяйтС Π΄Π° @спомСнСтС Ρ…ΠΎΡ€Π°Ρ‚Π°, Ρ‡ΠΈΠΉΡ‚ΠΎ ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° вашия pull request.

ОбикновСно, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ PR, ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слСдното.

  • Π£ΠΊΠ°Π·Π²Π°Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈ къдС.
  • ΠŸΠΈΡˆΠ΅Ρ‚Π΅ описаниС, ΠΊΠΎΠ΅Ρ‚ΠΎ обяснява Ρ†Π΅Π»Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅. МоТС Π΄Π° искатС:
    • Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° контСкста, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈ #бъговС ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ;
    • @Π΄Π° спомСнСтС всички, с ΠΊΠΎΠΈΡ‚ΠΎ искатС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°Π΅Π΄Π½ΠΎ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° @спомСнСтС тях ΠΏΠΎ-късно Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅;
    • Π΄Π° ΠΏΠΎΠΌΠΎΠ»ΠΈΡ‚Π΅ ΠΊΠΎΠ»Π΅Π³ΠΈ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ с Π½Π΅Ρ‰ΠΎ ΠΈΠ»ΠΈ Π΄Π° провСрят Π½Π΅Ρ‰ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ PR, сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ тСстовС, настроСни Π΄Π° сС стартират Π² Ρ‚Π°ΠΊΠΈΠ²Π° случаи. Π’ нашия случай Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС ΡΡŠΡ‰ΠΈΡΡ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ тСстовС, ΠΊΠΎΠΉΡ‚ΠΎ стартирахмС Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π½ΠΎ Π² истински ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠΌΠ° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ тСстовС ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

Моля, ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΉΡ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ°Ρ‚ тСстовСтС. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ статуса Π½Π° тСстовСтС Π² Π΄ΠΎΠ»Π½Π°Ρ‚Π° част Π½Π° дискусията PR Π² интСрфСйса Π½Π° GitHub. ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Ρ‚Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ тСстовСтС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π°Ρ‚.

️ Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ относно произволността Π½Π° списъка с Π΅Ρ‚Π°ΠΏΠΈ CI

Π‘ΠΏΠΈΡΡŠΠΊΡŠΡ‚, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² Ρ‚ΠΎΠ·ΠΈ курс, Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΠΈ субСктивСн, трябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ Π·Π° Ρ‚ΠΎΠ²Π°.

️ Π—Π°Π΄Π°Ρ‡Π°: създаванС Π½Π° pull request Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

  1. auth0 master.
  2. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ с ΠΈΠΌΠ΅ bugfix.
  3. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ тСкста Π½Π° Π±Π΅Π»Π΅ΠΆΠΊΠ°Ρ‚Π° Π² края Π½Π° Ρ„Π°ΠΉΠ»Π° ci.md.
    > **GitHub flow** понякога сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ прякор Π·Π° Π²ΠΈΠ΄ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° основната ΠΊΠ»ΠΎΠ½ΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ сС Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΠ·ΠΈ списък Π΅ просто интСрпрСтация, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Π² ΠΌΠΎΠΈΡ‚Π΅ [DevOps курсовС](http://redpill.solutions). ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈΡΡ‚ ΡƒΡ€ΠΎΠΊ Π΅ [Ρ‚ΡƒΠΊ](https://guides.github.com/introduction/flow/).
  4. Π—Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅.
  5. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½Π° bugfix Π² отдалСчСния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
  6. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request с ΠΈΠΌΠ΅ ДобавянС Π½Π° ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ с основния ΠΊΠ»ΠΎΠ½ bugfix ΠΈ базовия ΠΊΠ»ΠΎΠ½master.

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ стС Π·Π°Π΄Π°Π»ΠΈ master Π² своя Ρ„ΠΎΡ€ΠΊΠ° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ "base branch", няма Π΄Π° отговарям Π½Π° заявки Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΡ‚Π΅ Π½Π° курса.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²Π°ΡˆΠΈΡΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

ΠžΡ‚Π±ΠΎΡ€ΠΈ

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

Π£Ρ‚Π²ΡŠΡ€Π΄Π΅Ρ‚Π΅ pull request "ДобавянС Π½Π° ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€"

️ Π—Π°Π΄Π°Ρ‡Π°

  1. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request.
  2. НатиснСтС "Merge pull request".
  3. НатиснСтС "Confirm merge".
  4. НатиснСтС "Delete branch", Π²Π΅Ρ‡Π΅ Π½Π΅ Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½.

Π’ΠΎΠ²Π° Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ слСд сливанСто.
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

️ ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈ Π΄Π° добавятС тСстовС

Π‘ΡŠΠ²ΠΌΠ΅ΡΡ‚Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ pull request чСсто Π½Π°Π»Π°Π³Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. ОбикновСно Ρ‚ΠΎΠ²Π° Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ обсъТданС, Π½ΠΎ Π² нашия курс Ρ‰Π΅ симулирамС Ρ‚ΠΎΠ²Π°, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π² нашия списък с Π΅Ρ‚Π°ΠΏΠΈ CI.

ΠŸΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΏΡ€ΠΈΠ»Π°Π³Π° тСстово ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅. Π˜Π·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡ‚Π° към ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ с тСстовС Π²Π°Ρ€ΠΈΡ€Π°Ρ‚ ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ са Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с ΠΈΠΌΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° "Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Π°Π²Ρ‚ΠΎΡ€ΠΈ" (contribution guidelines). НиС Ρ‰Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΠΈΠΌ просто ΠΈ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎ тСст Π·Π° всСки Ρ€Π΅Π΄ Π² нашия ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ списък.

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ задания, ΠΏΡŠΡ€Π²ΠΎ ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° Π·Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ тСстовСтС. Ако стС настроили ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ pre-commit Ρ…ΡƒΠΊ ΠΏΡ€Π΅Π΄ΠΈ, Π½ΠΎΠ²ΠΎΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡΡ‚ тСст Ρ‰Π΅ сС стартира, няма Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΠΈ Π½ΠΈΡ‰ΠΎ няма Π΄Π° бъдС Π·Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Π½ΠΎ. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, Ρ‡Π΅ Π½Π°ΡˆΠΈΡ‚Π΅ тСстовС наистина провСряват Π½Π΅Ρ‰ΠΎ. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π΅, Ρ‡Π΅ Π°ΠΊΠΎ бяхмС Π·Π°ΠΏΠΎΡ‡Π½Π°Π»ΠΈ с ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄ΠΈ тСстовСтС, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° тСстовСтС моТСшС Π΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΠΊΠ°ΠΊΡ‚ΠΎ, Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΎΡ‡Π°ΠΊΠ²Π°, Ρ‚Π°ΠΊΠ° ΠΈ Ρ‡Π΅ тСстовСтС Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ провСряват Π½ΠΈΡ‰ΠΎ. ОсвСн Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π½Π΅ бяхмС написали тСстовСтС Π² ΠΏΡŠΡ€Π²ΠΎ място, ΠΌΠΎΠΆΠ΅Ρ…ΠΌΠ΅ изцяло Π΄Π° Π³ΠΈ Π·Π°Π±Ρ€Π°Π²ΠΈΠΌ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½ΠΈΡ‰ΠΎ нямашС Π΄Π° Π½ΠΈ напомня Π·Π° тях.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‡Ρ€Π΅Π· тСстовС (TDD)

TDD ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π΄Π° сС ΠΏΠΈΡˆΠ°Ρ‚ тСстовС ΠΏΡ€Π΅Π΄ΠΈ ΠΊΠΎΠ΄Π°. ΠžΠ±ΠΈΡ‡Π°ΠΉΠ½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° с TDD ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°.

  1. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ тСст.
  2. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ всички тСстовС ΠΈ сС ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ новият тСст Π½Π΅ ΠΌΠΈΠ½Π°Π²Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.
  3. ΠΠ°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄Π°.
  4. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ тСстовСтС, ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ всички тСстовС ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.
  5. Π˜Π·Π²ΡŠΡ€ΡˆΠ΅Ρ‚Π΅ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° ΠΊΠΎΠ΄Π°.
  6. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Ρ‚Π΅.

Въй ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ тСстовСтС, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΠΌΠΈΠ½Π°Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π² Ρ‡Π΅Ρ€Π²Π΅Π½ΠΎ, Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ β€” Π² Π·Π΅Π»Π΅Π½ΠΎ, Ρ†ΠΈΠΊΡŠΠ»ΡŠΡ‚ ΡΡŠΡ‰ΠΎ Π΅ извСстСн ΠΊΠ°Ρ‚ΠΎ "Ρ‡Π΅Ρ€Π²Π΅Π½-Π·Π΅Π»Π΅Π½-Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³".

️ Π—Π°Π΄Π°Ρ‡Π°

ΠŸΡŠΡ€Π²ΠΎ ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° Π·Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ€Π°Ρ‚Π΅ тСстовСтС ΠΈ Π΄Π° Π³ΠΈ оставитС Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠ°Ρ‚ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΈ Π·Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π΅ самия тСкст Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅ CI. Π©Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ тСстовСтС ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ("Π·Π΅Π»Π΅Π½ΠΈ").
Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ новия ΠΊΠΎΠ΄ Π² отдалСчСния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π²ΠΈΠΆΡ‚Π΅ ΠΊΠ°ΠΊ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ тСстовСтС Π² интСрфСйса Π½Π° GitHub Π² Π΄ΠΎΠ»Π½Π°Ρ‚Π° част Π½Π° дискусията Π·Π° заявката Π·Π° промяна ΠΈ ΡΡ‚Π°Ρ‚ΡƒΡΡŠΡ‚ Π½Π° PR сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°.

  1. auth0 feature.
  2. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ тСстовС Π² ci.test.js слСд послСдния ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ it (...);.

    it('5. ОбСдиняванС/ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΎΡ‚ master. НаправСтС тСстовСтС Π΄Π° ΠΌΠΈΠ½Π°Π²Π°Ρ‚ с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.', () => {
      expect(/.*merge.*commits.*tests+pass.*/ig.test(fileContents)).toBe(true);
    });
    
    it('6. Π Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΎΡ‚ ΠΊΠ»ΠΎΠ½ Π½Π° функция Π΄ΠΎ продукция.', () => {
      expect(/.*Deploy.*to+production.*/ig.test(fileContents)).toBe(true);
    });
    
    it('7. Ако всичко Π΅ Π½Π°Ρ€Π΅Π΄ Π² продукцията Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² master.', () => {
      expect(/.*merge.*to+master.*/ig.test(fileContents)).toBe(true);
    });

  3. ΠžΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° Π·Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ€Π°Ρ‚Π΅ тСстовСтС. Ако pre-commit hook Π΅ инсталиран, ΠΎΠΏΠΈΡ‚ΡŠΡ‚ Π·Π° ΠΊΠΎΠΌΠΈΡ‚ Ρ‰Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈ с Π³Ρ€Π΅ΡˆΠΊΠ°.
  4. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ тСкст Π² ci.md.
    5. ОбСдиняванС/ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΎΡ‚ master. НаправСтС тСстовСтС Π΄Π° ΠΌΠΈΠ½Π°Π²Π°Ρ‚ с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.  
    6. Π Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΎΡ‚ ΠΊΠ»ΠΎΠ½ Π½Π° функция с Ρ‚Π°ΠΉΠ½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π΄ΠΎ продукция.
    7. Ако всичко Π΅ Π½Π°Ρ€Π΅Π΄ Π² продукцията Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² master. 
  5. НаправСтС ΠΈ Π·Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚e ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ.
  6. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΊΠ»ΠΎΠ½Π° feature.

Π‘Π΅Π³Π° трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π°
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

ΠžΡ‚Π±ΠΎΡ€ΠΈ


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

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ обСдиняванС

ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° заявката Π·Π° промяна Π‘Ρ‚ΡŠΠΏΠΊΠΈ Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π½Π΅ смС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π½ΠΈΡ‰ΠΎ лошо ΠΈ тСстовСтС Π·Π° нашия ΠΊΠΎΠ΄ са ΠΌΠΈΠ½Π°Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, всС ΠΏΠ°ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΎΠ½Π°. feature ΠΈ master. Π’ΠΎΠ²Π° Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ другият ΠΊΠ»ΠΎΠ½ bugfix бСшС ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ с master Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ…ΠΌΠ΅ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ PR.
Π’ΠΎΠ²Π° създава ситуация, ΠΏΡ€ΠΈ която отдалСчСният ΠΊΠ»ΠΎΠ½ master ΠΈΠΌΠ° ΠΏΠΎ-Π½ΠΎΠ²Π° вСрсия ΠΎΡ‚ Ρ‚Π°Π·ΠΈ, Π½Π° която смС Π±Π°Π·ΠΈΡ€Π°Π»ΠΈ нашия ΠΊΠ»ΠΎΠ½. feature. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ Π½Π°Π·Π°Π΄ HEAD master Π΄ΠΎ края Π½Π° ΠΊΠ»ΠΎΠ½Π°. feature. Π’ Ρ‚Π°Π·ΠΈ ситуация трябва ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ feature ΠΎΡ‚Π³ΠΎΡ€Π΅. masterGitHub Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сливанС, Π°ΠΊΠΎ няма ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ. Π—Π° съТалСниС, Π² Π½Π°ΡˆΠ°Ρ‚Π° ситуация ΠΈ Π΄Π²Π΅Ρ‚Π΅ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ ΠΈΠΌΠ°Ρ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€Π°Ρ‰ΠΈ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ„Π°ΠΉΠ»Π°. ci.mdΠ’Π°Π·ΠΈ ситуация Π΅ извСстна ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ сливанС (merge conflict) ΠΈ трябва Π΄Π° я Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Ρ€ΡŠΡ‡Π½ΠΎ.

Merge ΠΈΠ»ΠΈ rebase

Merge

  • Бъздава Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΊΠΎΠΌΠΈΡ‚ Π·Π° сливанС (merge commit) ΠΈ Π·Π°ΠΏΠ°Π·Π²Π° историята Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.
    • Π—Π°ΠΏΠ°Π·Π²Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅Ρ‚Π΅ с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΌΠ°Ρ€ΠΊΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈ.
    • Π—Π°ΠΏΠ°Π·Π²Π° SHA Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈΡ‚Π΅ към тях Π² ΠΎΠ±ΡΡŠΠΆΠ΄Π°Π½ΠΈΡΡ‚Π° Π½Π° заявки Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.
  • Изисква Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅.
  • ΠŸΡ€Π°Π²ΠΈ историята Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½Π°.
    • Π˜ΡΡ‚ΠΎΡ€ΠΈΡΡ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ‚Ρ€ΡƒΠ΄Π½Π° Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π·Π°Ρ€Π°Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ‚ΠΎ ΠΊΠ»ΠΎΠ½ΠΈ (напомня Π½Π° ΠΊΠ°Π±Π΅Π»ΠΈΡ‚Π΅ Π½Π° IDE).
    • УслоТнява Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π°Ρ‚Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π°Π²ΠΈ git bisect ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ β€” Ρ‚ΠΎΠΉ само Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈ ΠΊΠΎΠΌΠΈΡ‚Π° Π·Π° сливанС.

Rebase

  • Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ тСкущия ΠΊΠ»ΠΎΠ½ Π²ΡŠΡ€Ρ…Ρƒ базовия Π΅Π΄ΠΈΠ½ слСд Π΄Ρ€ΡƒΠ³.
    • Π‘ΡŠΠ·Π΄Π°Π²Π°Ρ‚ сС Π½ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΈΡ‚ΠΈ с Π½ΠΎΠ²ΠΈ SHA, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ Π² GitHub корСспондират с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ pull requests, Π½ΠΎ Π½Π΅ ΠΈ с ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ.
    • ΠšΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π΅ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΈ промСняни Π² процСса ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ Π² Π΅Π΄ΠΈΠ½.
  • МоТС Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ няколко ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°.
  • Позволява ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅Ρ‚ΠΎ Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½Π° история.
    • Π˜ΡΡ‚ΠΎΡ€ΠΈΡΡ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎ-лСсна Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, освСн Π°ΠΊΠΎ Π½Π΅ Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ дълга Π±Π΅Π· Ρ€Π°Π·ΡƒΠΌΠ½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°.
    • Автоматичната ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ отстраняванСто Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ са ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-лСсни: ΠΏΡ€Π°Π²ΠΈ възмоТни git bisectΠ°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΠΎ-ясни ΠΈ прСдсказуСми.
  • Изисква ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½Π° с прСнСсСнитС ΠΊΠΎΠΌΠΈΡ‚ΠΈ с Ρ„Π»Π°Π³Π° --force ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ с заявки Π·Π° внСсСни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.

ОбикновСно Π΅ΠΊΠΈΠΏΠΈΡ‚Π΅ сС ΡΡŠΠ³Π»Π°ΡΡΠ²Π°Ρ‚ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° стратСгия, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сливат ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС "чисто" сливанС ΠΈΠ»ΠΈ "чисто" ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΎΡ‚Π³ΠΎΡ€Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, упраТняванС Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ (git rebase -i) Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π·Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ Π² общия Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΠΎ сливанС (merge) Π·Π° "ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ" ΠΊΠ»ΠΎΠ½ΠΈ.

Π’ΡƒΠΊ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ сливанС.

️ Π—Π°Π΄Π°Ρ‡Π°

  1. Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ Π² локалния ΠΊΠ»ΠΎΠ½ master Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΎΡ‚ отдалСчСния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
  2. auth0 feature.
  3. Π˜Π½ΠΈΡ†ΠΈΠΈΡ€Π°ΠΉΡ‚Π΅ сливанСто с ΠΊΠ»ΠΎΠ½Π° master. Π©Π΅ бъдС ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΎ Π·Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ сливанСто, ΡΠ²ΡŠΡ€Π·Π°Π½ с ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€Π°Ρ‰ΠΈΡ‚Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ci.md.
  4. Π Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Π² тСкста Π΄Π° останС ΠΈ Π½Π°ΡˆΠΈΡΡ‚ списък ΡΡ‚ΡŠΠΏΠΊΠΈ CI, ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° Π½Π΅Π³ΠΎ.
  5. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚Π° ΠΎΡ‚ сливанСто Π² ΠΎΡ‚Π΄Π°Π»Π΅Π½Π°Ρ‚Π° ΠΊΠ»ΠΎΠ½ΠΊΠ° feature.
  6. ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ статуса Π½Π° pull request Π² потрСбитСлския интСрфСйс Π½Π° GitHub, ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΉΡ‚Π΅ сливанСто Π΄Π° бъдС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ.

ΠžΡ‚Π±ΠΎΡ€ΠΈ

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

ΠžΡ‚Π»ΠΈΡ‡Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°!

Π‘ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ списъка, сСга трябва Π΄Π° ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ pull request Π² master.

️ Π—Π°Π΄Π°Ρ‡Π°: ΠžΠ΄ΠΎΠ±Ρ€Π΅Ρ‚Π΅ pull request "ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅"

  1. ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ pull request.
  2. НатиснСтС "Merge pull request".
  3. НатиснСтС "Confirm merge".
  4. НатиснСтС "Π˜Π·Ρ‚Ρ€ΠΈΠΉ ΠΊΠ»ΠΎΠ½", Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½.

Π’ΠΎΠ²Π° Π΅ Π²Π°ΡˆΠ΅Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

Π“Ρ€Π΅ΡˆΠΊΠ° Π² продукция

ΠšΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ "тСстовСтС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ‚ тяхното ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅". Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ тСстовС ΠΈ Ρ‚Π΅ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ…Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΈΠ·ΠΌΠ°ΠΌΠ½Π° Π³Ρ€Π΅ΡˆΠΊΠ° сС ΠΏΡ€ΠΎΠΌΡŠΠΊΠ½Π° Π² продукция.

Π’ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ сцСнарий трябва Π΄Π° сС ΠΏΠΎΠ³Ρ€ΠΈΠΆΠΈΠΌ Π·Π°:

  • Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π² продукция;
  • ΠΊΠΎΠ΄Π° Π² ΠΊΠ»ΠΎΠ½Π° master с Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚ Π½ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π°.

Π”Π° Π²ΡŠΡ€Π½Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ Π² слСдващата вСрсия?

"Π’Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ"(rolling back) Π΅ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ ΠΏΠΎ-Ρ€Π°Π½Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Π° срСда ΠΈ отмяната(revert) Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°. "ΠŸΠΎΠΏΡ€Π°Π²ΠΊΠ° Π² слСдващата вСрсия"(fixing forward) Π΅ добавянСто Π½Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ° Π² master ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²Π° вСрсия възмоТно Π½Π°ΠΉ-скоро. Въй ΠΊΠ°Ρ‚ΠΎ API ΠΈ схСмитС Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ сС промСнят с Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° срСда, ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° доставка ΠΈ Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ с тСстовС, Π²Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-слоТно ΠΈ рисковано, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ поправянСто Π² слСдващата вСрсия.

Въй ΠΊΠ°Ρ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π΅ носи риск Π² нашия случай, Ρ‰Π΅ Ρ‚Ρ€ΡŠΠ³Π½Π΅ΠΌ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π½ΠΈ позволява

  • Π΄Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Π² продукция възмоТно Π½Π°ΠΉ-скоро;
  • Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΊΠΎΠ΄Π° Π² master Π²Π΅Π΄Π½Π°Π³Π° подходящ Π·Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π°.

️ Π—Π°Π΄Π°Ρ‡Π°

  1. auth0 master Π»ΠΎΠΊΠ°Π»Π½ΠΎ.
  2. АктуализирайтС Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΡ‚ ΠΎΡ‚Π΄Π°Π»Π΅Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
  3. ΠžΡ‚ΠΌΠ΅Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚Π° ΠΎΡ‚ сливанСто Π½Π° PR Π‘Ρ‚ΡŠΠΏΠΊΠΈ Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π² master.
  4. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΎΡ‚Π΄Π°Π»Π΅Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Π’ΠΎΠ²Π° Π΅ историята Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ ΠΊΠΎΠΌΠΈΡ‚ ΠΎΡ‚ сливанСто
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

ΠžΡ‚Π±ΠΎΡ€ΠΈ

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

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

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

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

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

️ Π‘Π°ΠΌΠΎΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

Π£Π±Π΅Π΄Π΅Ρ‚Π΅ сС, Ρ‡Π΅ ci.md ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° тСкста "sneaky bug" слСд ΠΎΡ‚ΠΌΠ΅Π½Π° Π½Π° ΠΊΠΎΠΌΠΈΡ‚ ΠΎΡ‚ сливанСто.

ΠŸΠΎΠΏΡ€Π°Π²Π΅Ρ‚Π΅ списъка ΡΡ‚ΡŠΠΏΠΊΠΈ CI ΠΈ Π³ΠΎ Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ Π² master

Пълно ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ…ΠΌΠ΅ ΠΊΠΎΠΌΠΈΡ‚Π° ΠΎΡ‚ сливанСто Π½Π° ΠΊΠ»ΠΎΠ½Π° feature. Π”ΠΎΠ±Ρ€Π°Ρ‚Π° Π½ΠΎΠ²ΠΈΠ½Π° Π΅, Ρ‡Π΅ сСга нямамС Π³Ρ€Π΅ΡˆΠΊΠ° Π² masterΠ›ΠΎΡˆΠ°Ρ‚Π° Π½ΠΎΠ²ΠΈΠ½Π° Π΅, Ρ‡Π΅ ΠΈΠ·Ρ‡Π΅Π·Π½Π° ΠΈ Π½Π°ΡˆΠΈΡΡ‚ Ρ†Π΅Π½Π΅Π½ списък с ΡΡ‚ΡŠΠΏΠΊΠΈ Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция. Π’Π°ΠΊΠ° Ρ‡Π΅, ΠΈΠ΄Π΅Π°Π»Π½ΠΎ Π΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ° към ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ feature ΠΈ Π΄Π° Π³ΠΈ Π²ΡŠΡ€Π½Π΅ΠΌ Π² master Π·Π°Π΅Π΄Π½ΠΎ с ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ°Ρ‚Π°.

МоТСм Π΄Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ към Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ:

  • Π΄Π° ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠΌ (revert) ΠΊΠΎΠΌΠΈΡ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ отмСня сливанСто feature с master;
  • Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΠΌ ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Π±ΠΈΠ²ΡˆΠ°Ρ‚Π° feature.

Π Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ΠΈ Π΅ΠΊΠΈΠΏΠΈ Π² Ρ‚ΠΎΠ·ΠΈ случай ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ, Π½ΠΈΠ΅ Ρ‰Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΊΠ»ΠΎΠ½ ΠΈ Ρ‰Π΅ създадСм ΠΎΡ‚Π΄Π΅Π»Π΅Π½ pull request Π·Π° новия ΠΊΠ»ΠΎΠ½.

️ Π—Π°Π΄Π°Ρ‡Π°

  1. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ с ΠΈΠΌΠ΅Ρ‚ΠΎ feature-fix ΠΈ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π΅Ρ‚Π΅ Π½Π° Π½Π΅Π³ΠΎ.
  2. ΠŸΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Ρ‚Π΅ всички ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΎΡ‚ бившия ΠΊΠ»ΠΎΠ½ feature Π² новия ΠΊΠ»ΠΎΠ½. Π Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ сливанСто, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ…Π° ΠΏΡ€ΠΈ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ.

    Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

  3. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ рСгрСсионСн тСст Π² ci.test.js:

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

  4. Π˜Π·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ тСстовСтС Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Π΅ Π½Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.
  5. ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ тСкста " with a sneaky bug" Π² ci.md.
  6. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π² индСкса ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² тСстовСтС ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² списъка със ΡΡ‚ΡŠΠΏΠΊΠΈ ΠΈ Π³ΠΈ ΠΊΠΎΠΌΠΈΡ‚Π½Π΅Ρ‚Π΅.
  7. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½Π° Π² отдалСчСния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π°
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

ΠžΡ‚Π±ΠΎΡ€ΠΈ

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

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request.

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ pull request с ΠΈΠΌΠ΅ Fixing the feature. Π—Π°Π΄Π°ΠΉΡ‚Π΅ feature-fix ΠΊΠ°Ρ‚ΠΎ "head branch", Π° master ΠΊΠ°Ρ‚ΠΎ "base branch".
Моля, ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΉΡ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ тСстовСтС Π·Π°Π²ΡŠΡ€ΡˆΠ°Ρ‚. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ статуса Π½Π° тСстовСтС Π² Π΄ΠΎΠ»Π½Π°Ρ‚Π° част Π½Π° дискусията ΠΏΠΎ PR.

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ стС Π·Π°Π΄Π°Π»ΠΈ master Π² своя Ρ„ΠΎΡ€ΠΊΠ° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ "base branch", няма Π΄Π° отговарям Π½Π° заявки Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΡ‚Π΅ Π½Π° курса.

ΠžΠ΄ΠΎΠ±Ρ€Π΅Ρ‚Π΅ pull request "Fixing the feature"

Благодаря Π²ΠΈ Π·Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ°Ρ‚Π°! Моля, ΠΎΠ΄ΠΎΠ±Ρ€Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² master ΠΎΡ‚ pull request.

️ Π—Π°Π΄Π°Ρ‡Π°

  1. НатиснСтС "Merge pull request".
  2. НатиснСтС "Confirm merge".
  3. НатиснСтС "Π˜Π·Ρ‚Ρ€ΠΈΠΉ ΠΊΠ»ΠΎΠ½", Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½.

Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°
Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ ситуации ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»Π΅Π½ΠΈΡ!

Изпълнили стС всички дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Π² процСса Π½Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция.

Ако Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅ някакви ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с курса ΠΈΠ»ΠΈ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ issue Π² рСпозитория с ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΡ‚Π΅ Π½Π° курса. Π’ΠΎΠ·ΠΈ курс ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠΌΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π° вСрсия ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰Π° GitHub Learning Lab ΠΊΠ°Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster