ΠΠ°ΡΡΠΈΡ ΡΠ΅ Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π½Π° Git, Π½ΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ (CI) ΡΠ°Π±ΠΎΡΠΈ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ? ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΈΡΠ΅ ΡΠΈ Π΄Π΅ΠΉΠ½ΠΎΡΡΠΈ? Π’ΠΎΠ·ΠΈ ΠΊΡΡΡ ΡΠ΅ Π²ΠΈ Π΄Π°Π΄Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΌΠ΅Π½ΠΈΡ Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° GitHub. Π’ΠΎΠ·ΠΈ ΠΊΡΡΡ Π½Π΅ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ²Π΅ΡΠ½ΠΈΠΊ, Π²ΡΡΡ Ρ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅; Π½Π°ΠΏΡΠΎΡΠΈΠ², ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΡΡΡΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Ρ ΠΎΡΠ°ΡΠ° Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠ°Π²ΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ Π³ΠΎ ΠΏΡΠ°Π²ΡΡ. Π©Π΅ ΠΎΠ±ΡΡΠ½Ρ ΡΠ΅ΠΎΡΠΈΡΡΠ°, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΡΠ΅ ΠΏΡΠ΅Π· ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ.
Π ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠΌ?
ΠΠΎΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠ΅Π΄Π²Π°ΠΌΠ΅, ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠΏΠΈΡΡΠΊ Ρ ΡΠΈΠΏΠΈΡΠ½ΠΈ CI ΡΡΡΠΏΠΊΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΡΠ΄Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ. Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, Π½ΠΈΠ΅ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠΏΠΈΡΡΠΊ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ°Ρ, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΏΡΠ°Π²ΡΡ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ, ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ. Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈ ΠΏΡΠΎΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅, Π·Π° Π΄Π° Π΄ΠΎΠ±Π»ΠΈΠΆΠΈΠΌ Π½Π°ΡΠΈΡ CI ΠΏΡΠΎΡΠ΅Ρ Π΄ΠΎ ΡΠ΅Π°Π»Π½ΠΈΡ.
Π’ΠΎΠ·ΠΈ GIF ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ Π²ΡΠ² Π²Π°ΡΠ΅ΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠ΅Π΄Π²Π°ΡΠ΅ Π² ΠΊΡΡΡΠ°. ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΊ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΈ ΡΠ°ΠΌΠΎ Π½Π°ΠΉ-Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΠΎ.
Π©Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠ΅Π· ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ CI ΡΡΠ΅Π½Π°ΡΠΈΠΈ:
- Π Π°Π±ΠΎΡΠ° ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΡ;
- ΠΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ;
- ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°;
- Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ ΠΏΡΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ (ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π½Π° ΡΠ»ΠΈΠ²Π°Π½Π΅);
- ΠΡΠ·Π½ΠΈΠΊΠ²Π° Π³ΡΠ΅ΡΠΊΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΡΠ΅Π΄Π°.
ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π½Π°ΡΡΠΈΡ?
Π©Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²ΡΠΏΡΠΎΡΠΈ:
- ΠΠ°ΠΊΠ²ΠΎ Π΅ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ (CI)?
- ΠΠ°ΠΊΠ²ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² CI ΠΈ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Ρ?
- ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΊΠΎΠ³Π° ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ?
- ΠΠ°ΠΊΠ²ΠΎ Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½Π° ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ (TDD) ΠΈ ΠΊΠ°ΠΊΠ²Π° Π΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΌΡ Ρ CI?
- Π’ΡΡΠ±Π²Π° Π»ΠΈ Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½Ρ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π±Π°Π·ΠΈΡΠ°ΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅?
- ΠΡΡΡΠ°Π½Π΅ Π½Π°Π·Π°Π΄ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ?
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΏΡΠ΅Π²Π΅ΠΆΠ΄Π°Ρ Π½Π΅ΡΠ° ΠΊΠ°ΡΠΎ βΠ·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅β Π½Π°Π²ΡΡΠΊΡΠ΄Π΅, Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ Π΄Π° Π²ΡΡΠ½Π° ΡΡΠ°Π·ΠΈ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ Π½Π° Π½ΡΠΊΠΎΠΈ ΠΌΠ΅ΡΡΠ°, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»Ρ ΡΡΠ΅ΠΏΠ΅Π½ΡΠ° Π½Π° Π»ΡΠ΄ΠΎΡΡ Π² ΡΠ΅ΠΊΡΡΠ°. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ βΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡ ΡΡΡΠΆΠΈΠΊβ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΈΡ Π³Π»Π°Π³ΠΎΠ» βΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅β, ΠΊΠΎΠ³Π°ΡΠΎ Ρ ΠΎΡΠ°ΡΠ° Π²ΡΡΡΠ½ΠΎΡΡ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π° ΡΠ°Π±ΠΎΡΠ°.
ΠΠ°ΠΊΠ²ΠΎ Π΅ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ?
ΠΠ΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ, ΠΈΠ»ΠΈ CI, Π΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΠΏΡΠΈ ΠΊΠΎΡΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠ»Π΅Π½ Π½Π° Π΅ΠΊΠΈΠΏΠ° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ° ΡΠ²ΠΎΡ ΠΊΠΎΠ΄ Π² ΠΎΠ±ΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΏΠΎΠ½Π΅ Π²Π΅Π΄Π½ΡΠΆ Π½Π° Π΄Π΅Π½ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΡΡΡΠ±Π²Π° ΠΏΠΎΠ½Π΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ Π±Π΅Π· Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠΌΠ° ΡΠ°Π·Π½ΠΎΠ³Π»Π°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠΎΠ·ΠΈ ΡΠ΅ΡΠΌΠΈΠ½
Π‘ΠΏΠΎΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π΅ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅. ΠΡΠΊΠΎΠΈ ΡΠ²ΡΡΠ΄ΡΡ, ΡΠ΅ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ ΡΠ°ΠΌΠΎ Π²Π΅Π΄Π½ΡΠΆ Π½Π° Π΄Π΅Π½ Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅. ΠΠ°Π΄Π΅Π½ Π΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π΅ΠΊΠΈΠΏ, Π² ΠΊΠΎΠΉΡΠΎ Π²ΡΠ΅ΠΊΠΈ Π²Π·ΠΈΠΌΠ° Π½ΠΎΠ² ΠΊΠΎΠ΄ ΡΡΡΡΠΈΠ½ ΠΈ Π³ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ° Π²Π΅Π΄Π½ΡΠΆ Π²Π΅ΡΠ΅ΡΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΡΠ°Π·ΡΠΌΠ½ΠΎ Π²ΡΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΡΠΌΡΡΠ°, ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π²Π΅Π΄Π½ΡΠΆ Π½Π° Π΄Π΅Π½ Π΅ ΡΠ°Π·ΡΠΌΠ½ΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ Π·Π° Π΅ΠΊΠΈΠΏΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΈ.
ΠΡΡΠ³ΠΎ Π²ΡΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΅, ΡΠ΅ C++ Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ Π΅Π·ΠΈΠΊ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°, ΠΈ ΠΏΡΠΎΡΡΠΎΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ Π±Π΅Π· Π³ΡΠ΅ΡΠΊΠΈ ΠΊΠ°ΡΠΎ Π½Π°ΡΠΈΠ½ Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π΅ ΡΠ»Π°Π±ΠΎ. ΠΡΠΊΠΎΠΈ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎ) ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π²ΡΡΡΠ°Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° ΡΠ΅ Π΄Π²ΠΈΠΆΠΈ ΠΊΡΠΌ ΡΠΎΠ²Π° Π΄Π° ΡΡΠ°Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ ΠΈ Π² Π±ΡΠ΄Π΅ΡΠ΅ βbuild + unit testsβ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, Π°ΠΊΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅.
ΠΠ΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΎΡ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ (ΠΠ΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°, CD), ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ Π·Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ ΡΠ»Π΅Π΄ Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠΈΠΊΡΠ».
Π‘ΠΏΠΈΡΡΠΊ ΡΡΡ ΡΡΡΠΏΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΡΡΡΠ°
- ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄. Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ ΠΎΡ
master
. ΠΠ°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ Π½Π° Π²Π°ΡΠΈΡ Π½ΠΎΠ² ΠΊΠ»ΠΎΠ½. ΠΠ·Π³ΡΠ°Π΄Π΅ΡΠ΅ ΠΈ ΡΠ΅ΡΡΠ²Π°ΠΉΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. ΠΏΡΠΎΠΏΡΡΠΊ? ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ°. ΠΡΠΎΠ²Π°Π»? ΠΠΎΠΏΡΠ°Π²Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ.
- ΠΠ·ΠΏΡΠ°ΡΠ΅ΡΠ΅ ΠΊΡΠΌ Π²Π°ΡΠ΅ΡΠΎ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΠΊΠ»ΠΎΠ½.
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅. ΠΠ±ΡΡΠ΄Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΎΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°. ΠΠ°ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ Π½Π° ΠΊΠ»ΠΎΠ½Π° Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈ.
- ΠΠΎΠΌΠΈΡΠΈ Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅/ΠΏΡΠ΅Π±Π°Π·ΠΈΡΠ°Π½Π΅ ΠΎΡ Π³Π»Π°Π²Π½ΠΈΡ. ΠΠ°ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ Π²ΡΡΡ Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ.
- ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΠΎΡ ΠΊΠ»ΠΎΠ½Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π΄ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ.
- ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° Π·Π° ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ.
οΈ ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΡΠΎΡΡΡΠ΅Ρ
ΠΠ° Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΡΡΡ ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π°
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ Git ΠΊΠ»ΠΈΠ΅Π½Ρ, Π½ΠΎ Π°Π· ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ°ΠΌΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄.
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Git ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄
ΠΠΊΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΌΠ°ΡΠ΅ Git ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅
ΠΠΎΠ΄Π³ΠΎΡΠ²Π΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ
Π©Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π»ΠΈΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ (ΡΠΎΡΠΊ)
Π‘Π²ΡΡΡΠ΅Π½? ΠΠΊΠΎ Π½Π΅ ΡΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π²Π°ΡΠ΅ΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΠΊΡΡΡΠΎΠ²Π΅ Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΎ continuous-integration-team-scenarios-students
, ΡΠΎΠΉ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π²ΡΠ² Π²Π°ΡΠΈΡ Π°ΠΊΠ°ΡΠ½Ρ Π² GitHub ΠΈ URL Π°Π΄ΡΠ΅ΡΡΡ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°
https://github.com/<Π²Π°ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° GitHub>/continuous-integration-team-scenarios-students
ΠΡΠΎΡΡΠΎ ΡΠ΅ ΡΠ΅ ΠΎΠ±Π°Π΄Ρ Π½Π° ΡΠΎΠ·ΠΈ Π°Π΄ΡΠ΅Ρ <URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>
.
ΠͺΠ³Π»ΠΎΠ²ΠΈ ΡΠΊΠΎΠ±ΠΈ ΠΊΠ°ΡΠΎ
<ΡΡΡ>
ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΠΊΡΠ² ΠΈΠ·ΡΠ°Π· Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ.
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ GitHub Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π·Π° ΡΠΎΠ²Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΠΊΡΡΡΠΎΠ²Π΅. ΠΠΊΠΎ Π½Π΅ ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ, ΠΌΠΎΠ»Ρ, Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ Π³ΠΈ, ΠΊΠ°ΡΠΎ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π³ΠΎΠ»Π΅ΠΌΠΈΡ Π±ΡΡΠΎΠ½ Π² ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, Π΄ΠΎ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠΈΠ³Π½Π΅ΡΠ΅, ΠΊΠ°ΡΠΎ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° GitHub.
ΠΡΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π²ΡΡΡΠΈΡΠ΅ ΠΊΡΡΡΠ°, ΠΊΠ°ΡΠΎ ΡΠ»Π΅Π΄Π²Π°ΡΠ΅ ΠΌΠΎΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π°ΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° GitHub Π½Π΅ ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ.
ΠΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π½Π° GitHub Π΄Π° ΡΠ΅Π½Π΄ΠΈΡΠ° Markdown, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠΏΠΈΡΡΠΊΠ°, ΠΊΠΎΠΉΡΠΎ ΡΡΡΡΠ°Π²ΡΠΌΠ΅ ΡΡΠΊ
https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md
ΠΡΠ½ΠΎΡΠ½ΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° Π·Π°Π²ΡΡΡΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΡΡΡ Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ°ΠΌΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ.
ΠΠΊΠΎ ΡΠΌΡΡΠ°ΡΠ΅, ΡΠ΅ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π² ΡΠ΅ΠΌΠ°ΡΠ° solution
, ΠΊΠΎΠΉΡΠΎ Π΅ Π²ΡΠ² Π²Π°ΡΠ΅ΡΠΎ Π½Π°ΡΠ°Π»Π½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΠΎΠ»Ρ, Π½Π΅ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°ΠΉΡΠ΅ solution
Π² master
ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΡΡΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠ»ΠΎΠ½, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΡΡΠ°Π²Π½ΠΈΡΠ΅ Π²Π°ΡΠΈΡ ΠΊΠΎΠ΄ Ρ ΡΠΎΠ·ΠΈ Π½Π° Π°Π²ΡΠΎΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Git Π½ΠΈ Π΄Π°Π²Π°. ΠΠΊΠΎ ΡΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΈΠ·Π³ΡΠ±Π΅Π½ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π° ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ²ΠΎΡ ΠΊΠ»ΠΎΠ½ master
Π½Π° ΠΊΠ»ΠΎΠ½ solution
ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π½ΡΠ»ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄ΠΎ ΡΡΡΠΏΠΊΠ°ΡΠ° Π½Π° ΠΊΡΡΡΠ°, ΠΎΡ ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΎΠ²Π° ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ Π½Π΅Π³ΠΎ
ΠΠ½Π³Π°ΠΆΠΈΡΠ°ΠΉΡΠ΅ ΡΠ²ΠΎΡ ΠΊΠΎΠ΄
git add .
git commit -m "Backing up my work"
Π’Π΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
- ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°ΠΌ
master
Π²master-backup
; - ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°ΠΌ
solution
Π²master
; - ΠΊΠ°ΡΠ° Π΄ΠΎ Π½ΠΎΠ² ΠΊΠ»ΠΎΠ½
master
ΠΈ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ; - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ "ΡΠ΅ΡΠ΅Π½ΠΈΠ΅" ΠΎΡ "Π³Π»Π°Π²Π΅Π½" (ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄ΠΈ Π±Π΅ΡΠ΅ "ΡΠ΅ΡΠ΅Π½ΠΈΠ΅"), Π² ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΊΠ»ΠΎΠ½ "ΡΠ΅ΡΠ΅Π½ΠΈΠ΅" Π² Π±ΡΠ΄Π΅ΡΠ΅.
git branch -m master master-backup
git branch -m solution master
git checkout master -f
git branch solution
Π‘Π»Π΅Π΄ ΡΠ΅Π·ΠΈ ΡΡΡΠΏΠΊΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ git log master
Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠΉ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π°.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½ΡΠ»ΠΈΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΊΡΠΌ ΡΠΎΠ·ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
git reset --hard <the SHA you need>
ΠΠΊΠΎ ΡΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°, Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΡΠ΅ Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΎΠ½, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°.
git push --force origin master
ΠΠΎΠ»Ρ, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ git push --force
. ΠΠ°Π»ΠΊΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π΅ Π΄Π° ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΎ, Π½ΠΎ ΡΡΠΊ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ Π΅Π΄ΠΈΠ½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ°Π·Π±ΠΈΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈ.
ΠΠ°ΠΏΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°
ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΡΡΡΡΠ°Π²ΡΠΌΠ΅ Π½Π°ΡΠΈΡ ΡΠΏΠΈΡΡΠΊ Ρ CI ΡΡΡΠΏΠΊΠΈ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π±ΠΈΡ ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°Π»ΠΈ ΡΠ°Π·ΠΈ ΡΡΡΠΏΠΊΠ°, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π° ΠΎΡ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΌΠ°ΠΌΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΠΌΠ΅ ΠΎΡ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎΡΠΎ.
οΈ ΠΠ°Π΄Π°ΡΠ°: Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ ΠΎΡ master
, Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°
- ΠΠ»ΠΎΠ½ΠΈΡΠ°ΠΉΡΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΊΡΡΡΠ° ΠΎΡ
<URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>
. - ΡΠΈΡΠ°ΠΌ
npm install
Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΊΡΡΡΠ°; Π’ΡΡΠ±Π²Π° Π½ΠΈ, Π·Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Jest, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ ΠΈ Π³ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΡΠ²Π°ΠΉΡΠ΅
feature
. ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ°. -
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ² ΠΊΠΎΠ΄ ΠΊΡΠΌ
ci.test.js
ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠ΅ ΠΌΠΎΠ»ΡΡ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΡΠΎΠ²Π°.it('1. pull latest code', () => { expect(/.*pull.*/ig.test(fileContents)).toBe(true); }); it('2. add commits', () => { expect(/.*commit.*/ig.test(fileContents)).toBe(true); }); it('3. push to the remote branch with the same name', () => { expect(/.*push.*/ig.test(fileContents)).toBe(true); }); it('4. create a pull request and continue working', () => { expect(/.*pulls+request.*/ig.test(fileContents)).toBe(true); });
- ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡ Ρ ΠΏΡΡΠ²ΠΈΡΠ΅ 4 ΡΡΡΠΏΠΊΠΈ ΠΊΡΠΌ ΡΠ°ΠΉΠ»Π°
ci.md
.1. Pull in the latest code. Create a branch from `master`. Start working. 2. Create commits on your new branch. Build and test locally. Pass? Go to the next step. Fail? Fix errors or tests and try again. 3. Push to your remote repository or remote branch. 4. Create a pull request. Discuss the changes, add more commits as discussion continues. Make tests pass on the feature branch.
ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
# ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΊΡΡΡΠ°
git clone <repository URL>
cd <repository name>
# ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ npm install Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΊΡΡΡΠ°; ΠΎΠ½ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Jest, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ².
npm install
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ feature. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° ΡΡΡ Π² Π²Π΅ΡΠΊΡ.
git checkout -b feature
# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.test.js ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅.
# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ci.md ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ Π½Π° Π½ΠΎΠ² ΠΊΠ»ΠΎΠ½, ΠΈΠ·Π³ΡΠ°Π΄Π΅ΡΠ΅ ΠΈ ΡΠ΅ΡΡΠ²Π°ΠΉΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ
Π©Π΅ Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΡΠ°ΠΌΠ΅, ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° Π°Π½Π³Π°ΠΆΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ΄Π°.
Π’ΠΈΠΏΠΈΡΠ½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ
- ΠΠ° ΠΌΠ΅ΡΡΠ½ΠΎ Π½ΠΈΠ²ΠΎ:
- ΠΠ΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΠΈΠ»ΠΈ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°;
- ΠΡΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ (Π·Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΈΠ»ΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ Π΅Π·ΠΈΡΠΈ);
- ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ (ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ);
- ΠΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅;
- ΠΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π² ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
- ΠΠ° ΡΡΡΠ²ΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈΠ»ΠΈ ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅:
- ΠΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ΄ΡΡ Π΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π² Π»ΠΈΡΠ΅Π½ ΠΊΠ»ΠΎΠ½/Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
- ΠΠΎΠ΄ΡΡ Π² ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ° ΡΠ΅ ΡΠ΅ΡΡΠ²Π°.
- ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΡΠ΅ΡΡΠ²Π° (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ
master
). - ΠΠ°ΡΠΎ Π΅ΡΠ°ΠΏ Π½Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ/ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΡΠ°Π±ΠΎΡΠΈ Π΄Π°Π΄Π΅Π½ ΡΠ΅ΡΡΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅. Π’ΠΈΠΏΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΅ΡΠ°ΠΏΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°.
- ΠΡΡΠ·ΠΈ ΠΌΠΎΠ΄ΡΠ»Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ - ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, Π² CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ
- ΠΠ°Π²Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅, Π±ΡΡΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΈ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ - ΠΏΡΠΈ Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅, Π² CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°
- Π’Π΅ΡΡΠΎΠ²Π΅ Π·Π° Π±Π°Π²Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ - Π² CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°
- Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΡΠ½Π΅ΠΌΠ°ΡΠΈ Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ - Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ CI/CD, Π½ΠΎ ΡΠ°ΠΌΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ/Π΅ΡΠ°ΠΏΠΈ/ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ Π·Π° Π²Π΅ΡΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΡΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅.
οΈΠΠ°Π΄Π°ΡΠ°
ΠΡΠ΅Π΄Π»Π°Π³Π°ΠΌ ΠΏΡΡΠ²ΠΎ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° npm test
. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ git hook, Π·Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΏΡΠΈ ΠΊΠΎΠΌΠΈΡ. ΠΠΌΠ° Π΅Π΄Π½Π° ΡΠ»ΠΎΠ²ΠΊΠ°: ΠΊΡΠΊΠΈΡΠ΅ Π½Π° Git Π½Π΅ ΡΠ΅ ΡΡΠΈΡΠ°Ρ Π·Π° ΡΠ°ΡΡ ΠΎΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½ΠΈ ΠΎΡ GitHub Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ Π½Π° ΠΊΡΡΡΠ°. ΠΠ° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΊΡΠΊΠ°, ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ install_hook.sh
ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΉΠ»Π° repo/hooks/pre-commit
ΠΊΡΠΌ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ .git/hooks/
.
ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΡΠ°ΡΠ΅, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π΄Π°Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠ»ΡΡΠΎΠ²ΠΈ Π΄ΡΠΌΠΈ ΠΏΡΠΈΡΡΡΡΠ²Π°Ρ Π² ΡΠΏΠΈΡΡΠΊΠ°.
- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ½ΠΎ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
npm test
Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΡ ΠΊΡΡΡ. ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ° Π·Π°Π²ΡΡΡΠ΅Π½ΠΈ. - ΠΠ°Π΄Π°ΠΉΡΠ΅ ΠΊΡΠΊΠ° Π·Π° Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅ (ΠΊΡΠΊΠ° Π·Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅) ΡΡΠ΅Π· ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅
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 ΡΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΈΠ»ΠΈ Π² Π»ΠΈΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ (ΠΏΠ΅ΡΡΠΎΠ½Π°Π»Π΅Π½ ΡΠΎΡΠΊ), ΠΈΠ»ΠΈ Π² Π»ΠΈΡΠ΅Π½ ΠΊΠ»ΠΎΠ½.
- Π‘ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΡΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠ° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΡΠ·Π΄Π°Π²Π°ΠΉΠΊΠΈ Π½Π΅Π³ΠΎΠ²ΠΎ Π»ΠΈΡΠ½ΠΎ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅, ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΎΡΠ΅ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ° ΡΠΎΠ²Π° Π»ΠΈΡΠ½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ Π½Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π΅ Π·Π°Π²ΡΡΡΠ΅Π½Π° ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ ΡΠ° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ, ΡΠΎΠΉ Π³ΠΈ ΠΈΠ·Π±ΡΡΠ²Π° Π² ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΈ Π² ΠΎΠ±ΡΠΎΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° GitHub. ΠΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΠΈ Π² ΠΌΠΎΡ ΠΊΡΡΡ Π·Π° Π½Π°ΠΏΡΠ΅Π΄Π½Π°Π»ΠΈ [Π Π°Π±ΠΎΡΠ° Π² Π΅ΠΊΠΈΠΏ ΠΈ CI Ρ Git] (
http://devops.redpill.solutions/ ). - ΠΡΡΠ³ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π΄Π° ΠΏΡΠ΅Π±ΡΠΎΠΈΡΠ΅ ΡΠ°ΠΌΠΎ ΠΊΠ»ΠΎΠ½Π°
master
ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ "Π·Π°ΡΠΈΡΠ΅Π½ΠΎ". Π ΡΠΎΠ·ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ ΡΠ²ΠΎΡ ΠΊΠΎΠ΄ Π² ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄ΡΡΠ³ΠΈΡΠ΅ Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π³Π»Π΅Π΄Π°Ρ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄, Π°ΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, Π΄Π° Π³ΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΡ Ρmaster
ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
Π ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΊΡΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ.
ΠΠ΅ΠΊΠ° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄.
οΈΠΠ°Π΄Π°ΡΠ°
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΠΊΠ»ΠΎΠ½ ΡΡΡ ΡΡΡΠΎΡΠΎ ΠΈΠΌΠ΅ ΠΊΠ°ΡΠΎ Π²Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΊΠ»ΠΎΠ½
ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
git push --set-upstream origin feature
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΡΡΡ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΡΠΏΠΊΠΈΡΠ΅... ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉ feature
ΠΊΠ°ΡΠΎ "Π³Π»Π°Π²Π΅Π½ ΠΊΠ»ΠΎΠ½" ΠΈ master
ΠΊΠ°ΡΠΎ "Π±Π°Π·ΠΎΠ² ΠΊΠ»ΠΎΠ½".
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΡΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ
master
Π² Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΠ°ΡΠΎ βΠ±Π°Π·ΠΎΠ² ΠΊΠ»ΠΎΠ½β Π½ΡΠΌΠ° Π΄Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡΠΌ Π½Π° ΠΈΡΠΊΠ°Π½ΠΈΡ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ Π·Π° ΠΊΡΡΡΠ°.
ΠΠ° Π΅Π·ΠΈΠΊΠ° Π½Π° GitHub βΠ±Π°Π·ΠΎΠ²ΠΈΡΡ ΠΊΠ»ΠΎΠ½β Π΅ ΠΊΠ»ΠΎΠ½ΡΡ, Π²ΡΡΡ Ρ ΠΊΠΎΠΉΡΠΎ Π±Π°Π·ΠΈΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ, Π° βΠ³Π»Π°Π²Π½ΠΈΡΡ ΠΊΠ»ΠΎΠ½β Π΅ ΠΊΠ»ΠΎΠ½ΡΡ, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ.
ΠΠ±ΡΡΠ΄Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π½ΠΎΠ²ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°
ΠΠ°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ (PR)
ΠΠ°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ (PR) Π΅ Π½Π°ΡΠΈΠ½ Π·Π° ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠ°ΡΠ²ΠΊΠΈΡΠ΅ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΡΠ° ΠΊΡΡΡΡΠ΅Π½ΠΈ Π½Π° ΠΎΠ±ΡΠΈΡ Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΎΠ±ΡΠΈΡ ΠΊΠΎΠ΄. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠΎΠ²Π΅ΠΊ ΠΊΠ»ΠΎΠ½ΠΈΡΠ° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎΡΠΎ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π²ΡΡΡ Ρ ΠΊΠΎΠ΄Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠΎΠΉ ΠΏΠΎΡΡΠ°Π²Ρ ΠΊΠΎΠ΄Π° Π² Π»ΠΈΡΠ½ΠΎΡΠΎ ΡΠΈ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ ΠΌΠΎΠ»ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈΡΠ΅ Π·Π° ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ°Ρ(ΠΈΠ·Π΄ΡΡΠΏΠ°ΠΉΡΠ΅) Π½Π΅Π³ΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄ Π² ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΈ Π΅Π²Π΅Π½ΡΡΠ°Π»Π½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Ρ (ΡΠ΅ ΡΠ»ΠΈΠ²Π°Ρ) Π½Π΅Π³ΠΎΠ²ΠΈΡΡ. Π’Π°Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΈ ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΠΈ ΠΈΠΌΠ΅Π½Π°, Π½Π°ΠΏΡ. Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅.
ΠΡΡΡΠ½ΠΎΡΡ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° GitHub ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ. ΠΠΊΠΈΠΏΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄ΡΡΠ³ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ Π»ΠΈΡΠ΅ Π² Π»ΠΈΡΠ΅, Π³Π»Π°ΡΠΎΠ²ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅ΠΉΠ», Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ° ΡΠ΅Π΄ΠΈΡΠ° ΠΏΡΠΈΡΠΈΠ½ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π² ΡΡΠΈΠ» ΡΠΎΡΡΠΌ. ΠΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΡΡΡ :
- ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°;
- ΠΊΠ°ΡΠΎ ΠΌΡΡΡΠΎ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ° Π·Π° ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΎΡ Π°Π²ΡΠΎΡΠ΅ΡΡΠ΅ΡΠΈ ΠΈ ΠΊΠΎΠ»Π΅Π³ΠΈ;
- ΡΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ΄Π°;
- ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½ΠΈΡΠ΅ ΠΈ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° Π·Π°Π΄ ΡΠ°Π·ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π°Π·ΠΈ ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π°.
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΡΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Π²ΡΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ Π½Π°ΡΠΈΠ½, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΡΠ²ΠΈΡ ΡΠ΅Π΄ ΠΊΠΎΠ΄, Π·Π° Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ ΠΈΠ΄Π΅ΠΈΡΠ΅ ΡΠΈ ΠΈ Π΄Π° ΠΎΠ±ΡΡΠ΄ΠΈΡΠ΅ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ ΡΠΈ Ρ Π²Π°ΡΠΈΡΠ΅ ΡΡΡΡΡΠ΄Π½ΠΈΡΠΈ. ΠΠΊΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π΅ ΠΏΠΎ-ΠΏΡΠΎΡΡΠ°, Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΡΠ΅ ΠΎΡΠ²Π°ΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ΡΠΎ Π²Π΅ΡΠ΅ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ, Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΎ. Π Π½ΡΠΊΠΎΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ PR ΡΠ°ΠΌΠΎ ΠΎΡ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ: Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡΠΈΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ΠΈ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠ°ΠΊΠ²ΠΎΡΠΎ ΠΈ Π΄Π° ΡΠ΅ΡΠΈΡΠ΅, Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° @ΡΠΏΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Ρ ΠΎΡΠ°ΡΠ°, ΡΠΈΠ΅ΡΠΎ ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ°ΡΠ΅ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ PR, ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ.
- ΠΠΎΡΠΎΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ ΠΊΡΠ΄Π΅.
- ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΠΎΠ±ΡΡΠ½ΡΠ²Π°ΡΠΎ ΡΠ΅Π»ΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅. ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΡΠΊΠ°ΡΠ΅:
- Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π½Π΅ΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΠΎΡ ΠΊΠΎΠ΄Π°, ΠΈΠ»ΠΈ Π½Π΅ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ #Π±ΡΠ³ΠΎΠ²Π΅ ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ;
- @ΡΠΏΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ, Ρ ΠΊΠΎΠ³ΠΎΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ @ΡΠΏΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ;
- ΠΏΠΎΠΌΠΎΠ»Π΅ΡΠ΅ ΠΊΠΎΠ»Π΅Π³ΠΈ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Ρ Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΡ Π½Π΅ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ.
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ PR, ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² ΡΠ°ΠΊΠΈΠ²Π° ΡΠ»ΡΡΠ°ΠΈ, ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΡΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΠ²Π΅Π΄ΠΎΡ ΠΌΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π½ΠΎ Π² ΡΠ΅Π°Π»Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
ΠΠΎΠ»Ρ, ΠΈΠ·ΡΠ°ΠΊΠ°ΠΉΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΈΠΊΠ»ΡΡΠ°Ρ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π² Π΄ΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° PR Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° GitHub. ΠΡΠΎΠ΄ΡΠ»ΠΆΠ΅ΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΈΠΊΠ»ΡΡΠ°Ρ.
οΈ ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ Π±Π΅Π»Π΅ΠΆΠΊΠ° ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΏΠΈΡΡΠΊΠ° Ρ CI ΡΡΡΠΏΠΊΠΈ
Π‘ΠΏΠΈΡΡΠΊΡΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΡΠΎΠ·ΠΈ ΠΊΡΡΡ, Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΠΈ ΡΡΠ±Π΅ΠΊΡΠΈΠ²Π΅Π½, ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π±Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° ΡΠΎΠ²Π°.
οΈ ΠΠ°Π΄Π°ΡΠ°: ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π·Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ
- ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΊΠ»ΠΎΠ½
master
. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»ΠΎΠ½ Ρ ΠΈΠΌΠ΅
bugfix
. - ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡ Π½Π° Π±Π΅Π»Π΅ΠΆΠΊΠ° Π² ΠΊΡΠ°Ρ Π½Π° ΡΠ°ΠΉΠ»Π°
ci.md
.> **GitHub flow** is sometimes used as a nickname to refer to a flavor of trunk-based development when code is deployed straight from feature branches. This list is just an interpretation that I use in my [DevOps courses](http://redpill.solutions). The official tutorial is [here](https://guides.github.com/introduction/flow/).
- ΠΠ·Π²ΡΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠ°
bugfix
ΠΊΡΠΌ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. - Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Ρ ΠΈΠΌΠ΅ ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° Ρ Π³Π»Π°Π²Π° ΠΊΠ»ΠΎΠ½
bugfix
ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½master
.
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΡΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ
master
Π² Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΠ°ΡΠΎ βΠ±Π°Π·ΠΎΠ² ΠΊΠ»ΠΎΠ½β Π½ΡΠΌΠ° Π΄Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡΠΌ Π½Π° ΠΈΡΠΊΠ°Π½ΠΈΡ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ Π·Π° ΠΊΡΡΡΠ°.
ΠΡΠΎ ΠΊΠ°ΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²Π°ΡΠ΅ΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ 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 ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
ΠΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ βΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°β
οΈΠΠ°Π΄Π°ΡΠ°
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠ°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅β.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠΎΡΠ²ΡΡΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎβ.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½β, Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π½Π΅Π³ΠΎ.
Π’ΠΎΠ²Π° Π΅ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ° Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΡΠ»Π΅Π΄ ΡΠ»ΠΈΠ²Π°Π½Π΅.
οΈ ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΉΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅
Π‘ΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΏΠΎ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΡΠ΅ΡΡΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΠ°Π±ΠΎΡΠ°. Π’ΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΡ, Π½ΠΎ Π² Π½Π°ΡΠΈΡ ΠΊΡΡΡ ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΊΡΠΌ Π½Π°ΡΠΈΡ ΡΠΏΠΈΡΡΠΊ Ρ CI ΡΡΡΠΏΠΊΠΈ.
ΠΠ΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅. ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° ΡΠ΅ΡΡΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π²Π°ΡΠΈΡΠ°Ρ ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, Π½Π°ΡΠ΅ΡΠ΅Π½ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ βΠ½Π°ΡΠΎΠΊΠΈ Π·Π° ΠΏΡΠΈΠ½ΠΎΡβ. Π©Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΡΡΠΈ ΠΈ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ΅ΡΡ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ΅Π΄ Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ.
ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΡΠ²ΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅. ΠΠΊΠΎ ΡΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ pre-commit
hook ΠΏΠΎ-ΡΠ°Π½ΠΎ, Π½ΠΎΠ²ΠΎΠ΄ΠΎΠ±Π°Π²Π΅Π½ΠΈΡΡ ΡΠ΅ΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½, ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΠΈ ΠΈ Π½ΠΈΡΠΎ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½ΠΎ. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π·Π½Π°Π΅ΠΌ, ΡΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ΡΡΠ²Π°Ρ Π½Π΅ΡΠΎ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ Π΅, ΡΠ΅ Π°ΠΊΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΠΊΠΎΠ΄Π° ΠΏΡΠ΅Π΄ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠΈ ΡΠΏΠΎΡΠ΅Π΄ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡΡΠ°, ΠΈΠ»ΠΈ ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ Π½Π΅ ΡΠ΅ΡΡΠ²Π°Ρ Π½ΠΈΡΠΎ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π½Π΅ Π±ΡΡ
ΠΌΠ΅ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎ, ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΡΡΡ
ΠΌΠ΅ Π΄Π° Π³ΠΈ Π·Π°Π±ΡΠ°Π²ΠΈΠΌ Π½Π°ΠΏΡΠ»Π½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΈΡΠΎ Π½ΡΠΌΠ°ΡΠ΅ Π΄Π° Π½ΠΈ Π½Π°ΠΏΠΎΠΌΠ½Ρ Π·Π° ΡΠΎΠ²Π°.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½Π° ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ (TDD)
TDD ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΏΡΠ΅Π΄ΠΈ ΠΊΠΎΠ΄. Π’ΠΈΠΏΠΈΡΠ΅Π½ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ TDD, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°.
- ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅ΡΡ.
- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ ΡΠ²Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΡ Π΅ Π½Π΅ΡΡΠΏΠ΅ΡΠ΅Π½.
- ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π°.
- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΡΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈ.
- ΠΡΠ΅ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ Π²Π°ΡΠΈΡ ΠΊΠΎΠ΄.
- ΠΠΎΠ²ΡΠΎΡΠ΅ΡΠ΅.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΈ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ Π² ΡΠ΅ΡΠ²Π΅Π½ΠΎ, Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΈΠ·Π΄ΡΡΠΆΠ°Π»ΠΈ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ Π² Π·Π΅Π»Π΅Π½ΠΎ, ΡΠΈΠΊΡΠ»ΡΡ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΡΡΠΎ ΠΊΠ°ΡΠΎ ΡΠ΅ΡΠ²Π΅Π½ΠΎ-Π·Π΅Π»Π΅Π½ ΡΠ΅ΡΠ°ΠΊΡΠΎΡ.
οΈΠΠ°Π΄Π°ΡΠ°
ΠΡΡΠ²ΠΎ ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ Π΄Π° Π³ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΡΡ, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ°ΠΌΠΈΡ ΡΠΏΠΈΡΡΠΊ ΡΡΡ ΡΡΡΠΏΠΊΠΈ Π½Π° CI. Π©Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ (βΠ·Π΅Π»Π΅Π½ΠΎβ).
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄ Π² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° GitHub Π² Π΄ΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° PR ΡΡΠ°ΡΡΡΠ°.
- ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΊΠ»ΠΎΠ½
feature
. -
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΊΡΠΌ
ci.test.js
ΡΠ»Π΅Π΄ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅it (...);
.it('5. Merge/rebase commits from master. Make tests pass on the merge result.', () => { expect(/.*merge.*commits.*testss+pass.*/ig.test(fileContents)).toBe(true); }); it('6. Deploy from the feature branch to production.', () => { expect(/.*Deploy.*tos+production.*/ig.test(fileContents)).toBe(true); }); it('7. If everything is good in production for some period of time, merge changes to master.', () => { expect(/.*merge.*tos+master.*/ig.test(fileContents)).toBe(true); });
- ΠΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅. ΠΠΊΠΎ
pre-commit
ΠΊΡΠΊΠ°ΡΠ° Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π°, ΠΎΠΏΠΈΡΡΡ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π΅ΡΡΠΏΠ΅ΡΠ΅Π½. - Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ΅ΠΊΡΡ ΠΊΡΠΌ
ci.md
.5. Merge/rebase commits from master. Make tests pass on the merge result. 6. Deploy from the feature branch with a sneaky bug to production. 7. If everything is good in production for some period of time, merge changes to master.
- ΠΡΠ°Π²Π΅ΡΠ΅ ΠΈ Π°Π½Π³Π°ΠΆΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎ.
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΊΠ»ΠΎΠ½Π°
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
ΠΏΡΠ΅Π±Π°Π·ΠΈΡΠ°Π½Π΅ master
. GitHub Π²ΡΡΡΠ½ΠΎΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ»ΠΈΠ²Π°Π½Π΅, Π°ΠΊΠΎ Π½ΡΠΌΠ° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ. Π£Π²ΠΈ, Π² Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ ΠΈ Π΄Π²Π°ΡΠ° ΠΊΠ»ΠΎΠ½Π° ΠΈΠΌΠ°Ρ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠ°ΡΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΡΠ² ΡΠ°ΠΉΠ»Π° ci.md
. Π’Π°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π½Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Ρ ΡΠ°Π·ΡΠ΅ΡΠΈΠΌ ΡΡΡΠ½ΠΎ.
ΠΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π±Π°Π·ΠΈΡΠ°Π½Π΅
ΠΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅
- Π‘ΡΠ·Π΄Π°Π²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Ρ
ΡΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ.
- ΠΠ°ΠΏΠ°Π·Π²Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΊΠ»Π΅ΠΉΠΌΠ° ΠΈ Π°Π²ΡΠΎΡΠΈ.
- ΠΠ°ΠΏΠ°Π·Π²Π° SHA Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΠΈ Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ ΡΡΡ Π² Π΄ΠΈΡΠΊΡΡΠΈΠΈ Π·Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΏΡΠΎΠΌΡΠ½Π°.
- ΠΠ·ΠΈΡΠΊΠ²Π° Π΅Π΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ.
- ΠΡΠ°Π²ΠΈ ΠΈΡΡΠΎΡΠΈΡΡΠ° Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½Π°.
- ΠΡΡΠΎΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡΠ΄Π½Π° Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΏΠΎΡΠ°Π΄ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΡ Π±ΡΠΎΠΉ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ (Π½Π°ΠΏΠΎΠΌΠ½ΡΡΠΈ Π½Π° IDE ΠΊΠ°Π±Π΅Π»).
- ΠΠ°ΡΡΡΠ΄Π½ΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, Π½Π°ΠΏΡ.
git bisect
ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ - ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ ΡΠ°ΠΌΠΎ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅.
Π Π΅Π±Π°Π·Π°
- ΠΡΠ·ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡ ΠΊΠ»ΠΎΠ½ Π²ΡΡΡ
Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½ Π΅Π΄ΠΈΠ½ ΡΠ»Π΅Π΄ Π΄ΡΡΠ³.
- ΠΠ΅Π½Π΅ΡΠΈΡΠ°Ρ ΡΠ΅ Π½ΠΎΠ²ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ Ρ Π½ΠΎΠ²ΠΈ SHA, ΠΊΠΎΠ΅ΡΠΎ ΠΊΠ°ΡΠ° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ Π² GitHub Π΄Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅, Π½ΠΎ Π½Π΅ ΠΈ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ.
- ΠΠ½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ Π² Π΅Π΄Π½ΠΎ.
- ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ.
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π²ΠΈ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½Π° ΠΈΡΡΠΎΡΠΈΡ.
- ΠΡΡΠΎΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎ-Π»Π΅ΡΠ½Π° Π·Π° ΡΠ΅ΡΠ΅Π½Π΅, ΡΡΠΈΠ³Π° Π΄Π° Π½Π΅ Π΅ ΡΠ²ΡΡΠ΄Π΅ Π΄ΡΠ»Π³Π° Π±Π΅Π· ΡΠ°Π·ΡΠΌΠ½Π° ΠΏΡΠΈΡΠΈΠ½Π°.
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΡΠ°Π²Π½ΠΎΡΡΠΈ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ: ΠΏΡΠ°Π²ΠΈ Π³ΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ
git bisect
, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ Π²ΡΡΡΠ°Π½Π΅ Π½Π°Π·Π°Π΄ ΠΏΠΎ-ΡΡΠ½ΠΎ ΠΈ ΠΏΠΎ-ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΎ.
- ΠΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½ Ρ ΠΌΠΈΠ³ΡΠΈΡΠ°Π½ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ Ρ ΡΠ»Π°Π³
--force
ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΡ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ΠΊΠΈΠΏΠΈΡΠ΅ ΡΠ΅ ΡΡΠ³Π»Π°ΡΡΠ²Π°Ρ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ "ΡΠΈΡΡΠΎ" ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ "ΡΠΈΡΡΠΎ" Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅ ΠΎΡΠ³ΠΎΡΠ΅, ΠΈΠ»ΠΈ Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ
, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ ΠΎΡΠ³ΠΎΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ (git rebase -i
) Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π·Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, Π½ΠΎ ΡΠ΅ ΡΠ»ΠΈΠ²Π°Ρ Π·Π° βΠΏΡΠ±Π»ΠΈΡΠ½ΠΈβ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅.
Π’ΡΠΊ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ»ΠΈΠ²Π°Π½Π΅.
οΈΠΠ°Π΄Π°ΡΠ°
- Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ Π΅ Π² ΠΌΠ΅ΡΡΠ΅Π½ ΠΊΠ»ΠΎΠ½
master
Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΠΎΡ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. - ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΊΠ»ΠΎΠ½
feature
. - ΠΠ½ΠΈΡΠΈΠΈΡΠ°ΠΉΡΠ΅ ΡΠ»ΠΈΠ²Π°Π½Π΅ Ρ ΠΊΠ»ΠΎΠ½
master
. ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ Π½Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠ°ΡΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ci.md
. - Π Π°Π·ΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΠ°ΠΊΡΠΎ Π½Π°ΡΠΈΡΡ ΡΠΏΠΈΡΡΠΊ Ρ CI ΡΡΡΠΏΠΊΠΈ, ΡΠ°ΠΊΠ° ΠΈ Π±Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° Π½Π΅Π³ΠΎ Π΄Π° ΠΎΡΡΠ°Π½Π°Ρ Π² ΡΠ΅ΠΊΡΡΠ°.
- ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΊΡΠΌ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΠΊΠ»ΠΎΠ½
feature
. - ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° 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, Π΄ΠΎΠΆΠ΄ΠΈΡΠ΅ΡΡ ΠΏΠΎΠΊΠ° ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ.
ΠΠΎΠ±ΡΠ° ΡΠ°Π±ΠΎΡΠ°!
ΠΠΎΡΠΎΠ²ΠΈ ΡΡΠ΅ ΡΡΡ ΡΠΏΠΈΡΡΠΊΠ° ΠΈ ΡΠ΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ master
.
οΈ ΠΠ°Π΄Π°ΡΠ°: ΠΠ΄ΠΎΠ±ΡΠ΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ βΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΡΠΏΠΊΠΈΡΠ΅β
- ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠ°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅β.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠΎΡΠ²ΡΡΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎβ.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½β, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π½Π΅Π³ΠΎ.
Π’ΠΎΠ²Π° Π΅ Π²Π°ΡΠ΅ΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°
ΠΡΠ΅ΡΠΊΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°
ΠΠ°Π·Π²Π° ΡΠ΅, ΡΠ΅ βΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π»ΠΈΠΏΡΠ°ΡΠ° ΠΈΠΌβ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΌΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ Π½Π΅ Π½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ Π° Π³ΡΠ΅ΡΠΊΠΈ, Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΡΠΊΠ½Π° ΠΊΠΎΠ²Π°ΡΠ΅Π½ Π±ΡΠ³.
Π ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ·ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΠΌ Π·Π°:
- ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ;
- ΠΊΠΎΠ΄ Π² ΡΠ΅ΠΌΠ°ΡΠ°
master
Ρ Π³ΡΠ΅ΡΠΊΠ°, ΠΎΡ ΠΊΠΎΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°.
Π’ΡΡΠ±Π²Π° Π»ΠΈ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²Ρ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ?
ΠΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π°Π·Π°Π΄ Π΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠ½Π° Π΄ΠΎΠ±ΡΠ° ΠΏΠΎ-ΡΠ°Π½Π½Π° Π²Π΅ΡΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΈ Π²ΡΡΡΠ°Π½Π΅ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π³ΡΠ΅ΡΠΊΠ°ΡΠ°. βΠ€ΠΈΠΊΡΠΈΡΠ°Π½Π΅ Π½Π°ΠΏΡΠ΅Π΄β Π΅ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΊΠΎΡΠ΅ΠΊΡΠΈΡ ΠΊΡΠΌ master
ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΡΠΊΠΎΡΠΎ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ (API) ΠΈ ΡΡ
Π΅ΠΌΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΡΠ°Π·Π³ΡΡΡΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ, Ρ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΈ Π΄ΠΎΠ±ΡΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅, Π²ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π°Π·Π°Π΄ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ ΠΈ ΡΠΈΡΠΊΠΎΠ²Π°Π½ΠΎ ΠΎΡ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΡ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π°Π·Π°Π΄ Π½Π΅ Π½ΠΎΡΠΈ Π½ΠΈΠΊΠ°ΠΊΡΠ² ΡΠΈΡΠΊ Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΡΡΡΠ³Π½Π΅ΠΌ ΠΏΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΡ, Π·Π°ΡΠΎΡΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°
- ΠΏΠΎΠΏΡΠ°Π²Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΡΠΊΠΎΡΠΎ;
- Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΊΠΎΠ΄ Π²
master
Π²Π΅Π΄Π½Π°Π³Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°.
οΈΠΠ°Π΄Π°ΡΠ°
- ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΊΠ»ΠΎΠ½
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
Π²Π΅ΡΠ΅ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ° ΡΠ΅ΠΊΡΡΠ° "ΠΏΠΎΠ΄ΡΠ» Π±ΡΠ³" ΡΠ»Π΅Π΄ Π²ΡΡΡΠ°Π½Π΅ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅.
ΠΠΎΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠΏΠΈΡΡΠΊΠ° ΡΡΡ ΡΡΡΠΏΠΊΠΈ Π½Π° CI ΠΈ Π³ΠΎ Π²ΡΡΠ½Π΅ΡΠ΅ Π½Π° master
ΠΠΈΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π²ΡΡΠ½Π°Ρ
ΠΌΠ΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½Π°. feature
. ΠΠΎΠ±ΡΠ°ΡΠ° Π½ΠΎΠ²ΠΈΠ½Π° Π΅, ΡΠ΅ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ°ΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π² master
. ΠΠΎΡΠ°ΡΠ° Π½ΠΎΠ²ΠΈΠ½Π° Π΅, ΡΠ΅ Π½Π°ΡΠΈΡΡ ΡΠ΅Π½Π΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΎΡ ΡΡΡΠΏΠΊΠΈ Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΡΡΡΠΎ Π³ΠΎ Π½ΡΠΌΠ°. Π’Π°ΠΊΠ° ΡΠ΅ Π² ΠΈΠ΄Π΅Π°Π»Π½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΊΠΎΡΠ΅ΠΊΡΠΈΡΡΠ° ΠΊΡΠΌ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΎΡ feature
ΠΈ Π³ΠΈ Π²ΡΡΠ½Π΅ΡΠ΅ Π½Π° master
Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΊΠΎΡΠ΅ΠΊΡΠΈΡΡΠ°.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠΌ ΠΊΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ:
- Π²ΡΡΡΠ°Π½Π΅ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠΌΠ΅Π½Ρ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ
feature
Ρmaster
; - ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ
feature
.
Π Π°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π΅ΠΊΠΈΠΏΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ, Π½ΠΎ Π½ΠΈΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΊΠ»ΠΎΠ½ ΠΈ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΎΡΠ΄Π΅Π»Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π·Π° ΡΠΎΠ·ΠΈ Π½ΠΎΠ² ΠΊΠ»ΠΎΠ½.
οΈΠΠ°Π΄Π°ΡΠ°
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΈΡΠΊΠ°, Π½Π°ΡΠ΅ΡΠ΅Π½Π°
feature-fix
ΠΈ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ΅ΡΠ΅ ΠΊΡΠΌ Π½Π΅Π³ΠΎ. -
ΠΠΈΠ³ΡΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΊΠ»ΠΎΠ½
feature
ΠΊΡΠΌ Π½ΠΎΠ²Π° ΡΠ΅ΠΌΠ°. Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ ΠΏΡΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅, Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Π»ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ°. -
ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅Π³ΡΠ΅ΡΠΈΠΎΠ½Π΅Π½ ΡΠ΅ΡΡ ΠΊΡΠΌ
ci.test.js
:it('does not contain the sneaky bug', () => { expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false); });
- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π·Π° Π΄Π° ΡΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΡΡ.
- ΠΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ° βΡ ΠΏΠΎΠ΄ΡΠ» Π±ΡΠ³β Π²
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
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΡΡΡ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°... ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉ feature-fix
ΠΊΠ°ΡΠΎ "Π³Π»Π°Π²Π΅Π½ ΠΊΠ»ΠΎΠ½" ΠΈ master
ΠΊΠ°ΡΠΎ "Π±Π°Π·ΠΎΠ² ΠΊΠ»ΠΎΠ½".
ΠΠΎΠ»Ρ, ΠΈΠ·ΡΠ°ΠΊΠ°ΠΉΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π·Π°Π²ΡΡΡΠ°Ρ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠ°ΡΡΡΠ° Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π² Π΄ΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° PR Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ°.
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΡΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ
master
Π² Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΠ°ΡΠΎ βΠ±Π°Π·ΠΎΠ² ΠΊΠ»ΠΎΠ½β Π½ΡΠΌΠ° Π΄Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡΠΌ Π½Π° ΠΈΡΠΊΠ°Π½ΠΈΡ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ Π·Π° ΠΊΡΡΡΠ°.
ΠΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ βΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°β
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π·Π° ΠΊΠΎΡΠ΅ΠΊΡΠΈΡΡΠ°! ΠΠΎΠ»Ρ, ΠΎΠ΄ΠΎΠ±ΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² master
ΠΎΡ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
οΈΠΠ°Π΄Π°ΡΠ°
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠ°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅β.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠΎΡΠ²ΡΡΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎβ.
- ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½β, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π½Π΅Π³ΠΎ.
Π’ΠΎΠ²Π° Π΅, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°.
Π§Π΅ΡΡΠΈΡΠΎ!
ΠΠ·ΠΏΡΠ»Π½ΠΈΡ ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠΏΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Ρ ΠΎΡΠ°ΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ.
ΠΠΊΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΊΡΡΡΠ° ΠΈΠ»ΠΈ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅, ΠΌΠΎΠ»Ρ, ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com