ΠΠ·ΡΡΠΈΠ»ΠΈ Π»ΠΈ ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π½Π° 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) ΠΏΠΎ ΡΠΎΠ²Π°, ΡΠ΅ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ Π·Π° Π²Π΅ΡΡΠΈΡ ΡΠ»Π΅Π΄ Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΊΡΠ» Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ.
Π‘ΠΏΠΈΡΡΠΊ Π½Π° ΡΡΡΠΏΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΠ΅Π· ΠΊΡΡΡΠ°.
- ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΊΠΎΠ΄. Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ ΠΎΡ
master. ΠΠ°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΈΡΠΈ Π½Π° Π½ΠΎΠ²ΠΈΡ ΡΠΈ ΠΊΠ»ΠΎΠ½. ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΡΠ΅ΡΡΠ²Π°ΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. Π£ΡΠΏΠ΅Ρ ? ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ°. ΠΠ΅ΡΡΠΏΠ΅Ρ ? ΠΠΎΠΏΡΠ°Π²Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ.
- ΠΠ·ΠΏΡΠ°ΡΠ΅ΡΠ΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎΡΠΎ ΡΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΎΠ½.
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ pull request. ΠΠ±ΡΡΠ΄Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΎΡΠ΅ ΠΊΠΎΠΌΠΈΡΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°. ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΈ Π½Π° ΠΊΠ»ΠΎΠ½ Π·Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°.
- ΠΠ±Π΅Π΄ΠΈΠ½Π΅ΡΠ΅/ΠΏΡΠ΅ΠΎΡΠ½ΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠΌΠΈΡΠΈΡΠ΅ ΠΎΡ master. ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΈ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΡΠΎ.
- Π Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅ΡΠ΅ ΠΎΡ ΠΊΠ»ΠΎΠ½Π° Π·Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ.
- ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π΄ΠΎΠ±ΡΠ΅ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² master.

οΈ ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ½ΠΎΡΠΎ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅
ΠΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠ΅Π· ΡΠΎΠ·ΠΈ ΠΊΡΡΡ, ΡΠ΅ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ .
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ 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, Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°
- ΠΠ»ΠΎΠ½ΠΈΡΠ°ΠΉΡΠ΅ ΠΊΡΡΡΠ° Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΎΡ
<URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>. - Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅
npm installΠ² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π½Π° ΠΊΡΡΡΠ°; Π½ΡΠΆΠ΅Π½ Π΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Jest, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ ΠΈ Π³ΠΎ Π½Π°ΡΠ΅ΡΠ΅ΡΠ΅
feature. ΠΡΠ΅Π²ΠΊΠ»ΡΡΠ΅ΡΠ΅ ΡΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠ»ΠΎΠ½. ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄ Π²
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); });- ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΡΡΠ²ΠΈΡΠ΅ 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/.
ΠΡΠΈ ΠΊΠΎΠΌΠΈΡ ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π΄Π°Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠ»ΡΡΠΎΠ²ΠΈ Π΄ΡΠΌΠΈ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ.
- Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ½ΠΎ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
npm testΠ² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° ΠΊΡΡΡΠ°. Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ. - ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ hook Π·Π° ΠΊΠΎΠΌΠΈΡ (pre-commit hook), ΠΊΠ°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅
install_hook.sh. - ΠΠΎΠΌΠΈΡΠ½Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
- Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΡΠ΅Π΄ΠΈ ΠΊΠΎΠΌΠΈΡΠ°.
ΠΠ°ΡΠΈΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ° ΡΠ»Π΅Π΄ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.

ΠΡΠ±ΠΎΡΠΈ
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ 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]).
- ΠΡΡΠ³ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π΄Π° ΡΠ΅ ΡΡΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΊΠ»ΠΎΠ½ΡΡ
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 Π·Π° ΡΠΎΠ²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
- auth0
master. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ Ρ ΠΈΠΌΠ΅
bugfix. - ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ° Π½Π° Π±Π΅Π»Π΅ΠΆΠΊΠ°ΡΠ° Π² ΠΊΡΠ°Ρ Π½Π° ΡΠ°ΠΉΠ»Π°
ci.md.> **GitHub flow** ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΏΡΡΠΊΠΎΡ Π·Π° Π²ΠΈΠ΄ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΊΠ»ΠΎΠ½ΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Π² ΠΌΠΎΠΈΡΠ΅ [DevOps ΠΊΡΡΡΠΎΠ²Π΅](http://redpill.solutions). ΠΡΠΈΡΠΈΠ°Π»Π½ΠΈΡΡ ΡΡΠΎΠΊ Π΅ [ΡΡΠΊ](https://guides.github.com/introduction/flow/). - ΠΠ°ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½Π°
bugfixΠ² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ 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 "ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ"
οΈ ΠΠ°Π΄Π°ΡΠ°
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ pull request.
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "Merge pull request".
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "Confirm merge".
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "Delete branch", Π²Π΅ΡΠ΅ Π½Π΅ Π½ΠΈ Π΅ Π½ΡΠΆΠ΅Π½.
Π’ΠΎΠ²Π° Π΅ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΈΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ.

οΈ ΠΡΠΎΠ΄ΡΠ»ΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅
Π‘ΡΠ²ΠΌΠ΅ΡΡΠ½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ pull request ΡΠ΅ΡΡΠΎ Π½Π°Π»Π°Π³Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΠ°Π±ΠΎΡΠ°. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π΅, Π½ΠΎ Π² Π½Π°ΡΠΈΡ ΠΊΡΡΡ ΡΠ΅ ΡΠΈΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π² Π½Π°ΡΠΈΡ ΡΠΏΠΈΡΡΠΊ Ρ Π΅ΡΠ°ΠΏΠΈ CI.
ΠΡΠΈ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΡΠ΅ΡΡΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅. ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ Π²Π°ΡΠΈΡΠ°Ρ ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ ΠΈΠΌΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° "ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° Π°Π²ΡΠΎΡΠΈ" (contribution guidelines). ΠΠΈΠ΅ ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΠΈΠΌ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎ ΡΠ΅ΡΡ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ΅Π΄ Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ.
ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ, ΠΏΡΡΠ²ΠΎ ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° Π·Π°ΠΊΠΎΠΌΠΈΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅. ΠΠΊΠΎ ΡΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ pre-commit Ρ
ΡΠΊ ΠΏΡΠ΅Π΄ΠΈ, Π½ΠΎΠ²ΠΎΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡΡ ΡΠ΅ΡΡ ΡΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°, Π½ΡΠΌΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ ΠΈ Π½ΠΈΡΠΎ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΠΊΠΎΠΌΠΈΡΠ΅Π½ΠΎ. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ, ΡΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π½Π΅ΡΠΎ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΅, ΡΠ΅ Π°ΠΊΠΎ Π±ΡΡ
ΠΌΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°Π»ΠΈ Ρ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΠΊΠ°ΠΊΡΠΎ, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π°, ΡΠ°ΠΊΠ° ΠΈ ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π½ΠΈΡΠΎ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π½Π΅ Π±ΡΡ
ΠΌΠ΅ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π² ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎ, ΠΌΠΎΠΆΠ΅Ρ
ΠΌΠ΅ ΠΈΠ·ΡΡΠ»ΠΎ Π΄Π° Π³ΠΈ Π·Π°Π±ΡΠ°Π²ΠΈΠΌ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΈΡΠΎ Π½ΡΠΌΠ°ΡΠ΅ Π΄Π° Π½ΠΈ Π½Π°ΠΏΠΎΠΌΠ½Ρ Π·Π° ΡΡΡ
.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠ΅Π· ΡΠ΅ΡΡΠΎΠ²Π΅ (TDD)
TDD ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΠΈΡΠ°Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΏΡΠ΅Π΄ΠΈ ΠΊΠΎΠ΄Π°. ΠΠ±ΠΈΡΠ°ΠΉΠ½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Ρ TDD ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°.
- ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅ΡΡ.
- Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ ΡΠ²Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΡ Π½Π΅ ΠΌΠΈΠ½Π°Π²Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ.
- ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π°.
- Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΡΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΌΠΈΠ½Π°Π²Π°Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
- ΠΠ·Π²ΡΡΡΠ΅ΡΠ΅ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ Π½Π° ΠΊΠΎΠ΄Π°.
- ΠΠΎΠ²ΡΠΎΡΠ΅ΡΠ΅.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΌΠΈΠ½Π°Π»ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ Π² ΡΠ΅ΡΠ²Π΅Π½ΠΎ, Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΡΠ΅ β Π² Π·Π΅Π»Π΅Π½ΠΎ, ΡΠΈΠΊΡΠ»ΡΡ ΡΡΡΠΎ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΡΠΎ "ΡΠ΅ΡΠ²Π΅Π½-Π·Π΅Π»Π΅Π½-ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³".
οΈ ΠΠ°Π΄Π°ΡΠ°
ΠΡΡΠ²ΠΎ ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° Π·Π°ΠΊΠΎΠΌΠΈΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ Π΄Π° Π³ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π΄Π° Π·Π°Π²ΡΡΡΠ°Ρ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΈ Π·Π°ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈΡ ΡΠ΅ΠΊΡΡ Π½Π° ΡΡΡΠΏΠΊΠΈΡΠ΅ CI. Π©Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΌΠΈΠ½Π°Π²Π°Ρ ("Π·Π΅Π»Π΅Π½ΠΈ").
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄ Π² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ Π²ΠΈΠΆΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° GitHub Π² Π΄ΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° ΠΈ ΡΡΠ°ΡΡΡΡΡ Π½Π° PR ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°.
- auth0
feature. ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π²
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); });- ΠΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° Π·Π°ΠΊΠΎΠΌΠΈΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅. ΠΠΊΠΎ
pre-commithook Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½, ΠΎΠΏΠΈΡΡΡ Π·Π° ΠΊΠΎΠΌΠΈΡ ΡΠ΅ Π·Π°Π²ΡΡΡΠΈ Ρ Π³ΡΠ΅ΡΠΊΠ°. - Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ΅ΠΊΡΡ Π²
ci.md.5. ΠΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅/ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈ ΠΎΡ master. ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π΄Π° ΠΌΠΈΠ½Π°Π²Π°Ρ Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΡΠΎ. 6. Π Π°Π·Π³ΡΡΡΠ°Π½Π΅ ΠΎΡ ΠΊΠ»ΠΎΠ½ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Ρ ΡΠ°ΠΉΠ½Π° Π³ΡΠ΅ΡΠΊΠ° Π΄ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. 7. ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² master. - ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΈ Π·Π°ΠΊΠΎΠΌΠΈΡΠ΅Ρe ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ.
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΊΠ»ΠΎΠ½Π°
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) Π·Π° "ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ" ΠΊΠ»ΠΎΠ½ΠΈ.
Π’ΡΠΊ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ»ΠΈΠ²Π°Π½Π΅.
οΈ ΠΠ°Π΄Π°ΡΠ°
- Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΊΠ»ΠΎΠ½
masterΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΠΎΡ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. - auth0
feature. - ΠΠ½ΠΈΡΠΈΠΈΡΠ°ΠΉΡΠ΅ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ Ρ ΠΊΠ»ΠΎΠ½Π°
master. Π©Π΅ Π±ΡΠ΄Π΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΎ Π·Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΏΡΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ, ΡΠ²ΡΡΠ·Π°Π½ Ρ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ci.md. - Π Π°Π·ΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΡΠ°ΠΊΠ°, ΡΠ΅ Π² ΡΠ΅ΠΊΡΡΠ° Π΄Π° ΠΎΡΡΠ°Π½Π΅ ΠΈ Π½Π°ΡΠΈΡΡ ΡΠΏΠΈΡΡΠΊ ΡΡΡΠΏΠΊΠΈ CI, ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° Π½Π΅Π³ΠΎ.
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΈΡΠ° ΠΎΡ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ Π² ΠΎΡΠ΄Π°Π»Π΅Π½Π°ΡΠ° ΠΊΠ»ΠΎΠ½ΠΊΠ°
feature. - ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΡΡΠ°ΡΡΡΠ° Π½Π° 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 "ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΡΠΏΠΊΠΈΡΠ΅"
- ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ pull request.
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "Merge pull request".
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "Confirm merge".
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "ΠΠ·ΡΡΠΈΠΉ ΠΊΠ»ΠΎΠ½", ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ Π½ΠΈ Π΅ Π½ΡΠΆΠ΅Π½.
Π’ΠΎΠ²Π° Π΅ Π²Π°ΡΠ΅ΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°

ΠΡΠ΅ΡΠΊΠ° Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ
ΠΠ°Π·Π²Π°Ρ, ΡΠ΅ "ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ ΡΡΡ Π½ΠΎΡΠΎ ΠΎΡΡΡΡΡΠ²ΠΈΠ΅". ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΌΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΈΠ·ΠΌΠ°ΠΌΠ½Π° Π³ΡΠ΅ΡΠΊΠ° ΡΠ΅ ΠΏΡΠΎΠΌΡΠΊΠ½Π° Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ.
Π ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΠΌ Π·Π°:
- ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ;
- ΠΊΠΎΠ΄Π° Π² ΠΊΠ»ΠΎΠ½Π°
masterΡ Π³ΡΠ΅ΡΠΊΠ°, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°.
ΠΠ° Π²ΡΡΠ½Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ?
"ΠΡΡΡΠ°Π½Π΅ΡΠΎ"(rolling back) Π΅ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ ΠΏΠΎ-ΡΠ°Π½Π΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½Π° ΡΡΠ΅Π΄Π° ΠΈ ΠΎΡΠΌΡΠ½Π°ΡΠ°(revert) Π½Π° ΠΊΠΎΠΌΠΈΡΠΈ, ΡΡΠ΄ΡΡΠΆΠ°ΡΠΈ Π³ΡΠ΅ΡΠΊΠ°ΡΠ°. "ΠΠΎΠΏΡΠ°Π²ΠΊΠ° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ"(fixing forward) Π΅ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠΏΡΠ°Π²ΠΊΠ° Π² master ΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΡΠΊΠΎΡΠΎ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ API ΠΈ ΡΡ
Π΅ΠΌΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ Ρ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°, ΠΏΡΠΈ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΈ Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Ρ ΡΠ΅ΡΡΠΎΠ²Π΅, Π²ΡΡΡΠ°Π½Π΅ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΈ ΡΠΈΡΠΊΠΎΠ²Π°Π½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎΠΏΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π΅ Π½ΠΎΡΠΈ ΡΠΈΡΠΊ Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΡΡΡΠ³Π½Π΅ΠΌ ΠΏΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°
- Π΄Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΡΠΊΠΎΡΠΎ;
- Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠ΄Π° Π²
masterΠ²Π΅Π΄Π½Π°Π³Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°.
οΈ ΠΠ°Π΄Π°ΡΠ°
- auth0
masterΠ»ΠΎΠΊΠ°Π»Π½ΠΎ. - ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΎΡ ΠΎΡΠ΄Π°Π»Π΅Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
- ΠΡΠΌΠ΅Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠΈΡΠ° ΠΎΡ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° PR Π‘ΡΡΠΏΠΊΠΈ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π²
master. - ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΎΡΠ΄Π°Π»Π΅Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
Π’ΠΎΠ²Π° Π΅ ΠΈΡΡΠΎΡΠΈΡΡΠ° Π½Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Ρ ΠΎΡΠΌΠ΅Π½Π΅Π½ ΠΊΠΎΠΌΠΈΡ ΠΎΡ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ

ΠΡΠ±ΠΎΡΠΈ
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ 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 Π·Π° Π½ΠΎΠ²ΠΈΡ ΠΊΠ»ΠΎΠ½.
οΈ ΠΠ°Π΄Π°ΡΠ°
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ Ρ ΠΈΠΌΠ΅ΡΠΎ
feature-fixΠΈ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ΅ΡΠ΅ Π½Π° Π½Π΅Π³ΠΎ. ΠΡΠ΅Ρ Π²ΡΡΠ»Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΈΡΠΈ ΠΎΡ Π±ΠΈΠ²ΡΠΈΡ ΠΊΠ»ΠΎΠ½
featureΠ² Π½ΠΎΠ²ΠΈΡ ΠΊΠ»ΠΎΠ½. Π Π°Π·ΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈΡΠ΅ ΠΏΡΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ Π° ΠΏΡΠΈ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ΡΠΎ.
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅Π³ΡΠ΅ΡΠΈΠΎΠ½Π΅Π½ ΡΠ΅ΡΡ Π²
ci.test.js:it('does not contain the sneaky bug', () => { expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false); });- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΡΠ΅, ΡΠ΅ Π½Π΅ Π·Π°Π²ΡΡΡΠ²Π°Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
- ΠΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ° " with a sneaky bug" Π²
ci.md. - ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ° ΡΡΡ ΡΡΡΠΏΠΊΠΈ ΠΈ Π³ΠΈ ΠΊΠΎΠΌΠΈΡΠ½Π΅ΡΠ΅.
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½Π° Π² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π°

ΠΡΠ±ΠΎΡΠΈ
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 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.
οΈ ΠΠ°Π΄Π°ΡΠ°
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "Merge pull request".
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "Confirm merge".
- ΠΠ°ΡΠΈΡΠ½Π΅ΡΠ΅ "ΠΠ·ΡΡΠΈΠΉ ΠΊΠ»ΠΎΠ½", ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ Π½ΠΈ Π΅ Π½ΡΠΆΠ΅Π½.
Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°

ΠΠΎΠ·Π΄ΡΠ°Π²Π»Π΅Π½ΠΈΡ!
ΠΠ·ΠΏΡΠ»Π½ΠΈΠ»ΠΈ ΡΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Ρ ΠΎΡΠ°ΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ.
ΠΠΊΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅ Π½ΡΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΊΡΡΡΠ° ΠΈΠ»ΠΈ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅, ΡΡΠ·Π΄Π°ΠΉΡΠ΅ issue Π² . Π’ΠΎΠ·ΠΈ ΠΊΡΡΡ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ° GitHub Learning Lab ΠΊΠ°ΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com

