рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

рдХреЗ рддрдкрд╛рдИрдВрд▓реЗ Git рдЖрджреЗрд╢рд╣рд░реВ рд╕рд┐рдХреНрдиреБрднрдпреЛ рддрд░ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдХрд╕рд░реА рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг (CI) рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ? рд╡рд╛ рд╕рд╛рдпрдж рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ рджреИрдирд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ? рдпрд╕ рдкрд╛рдареНрдпрдХреНрд░рдорд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ GitHub рднрдгреНрдбрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдорд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реАрдкрд╣рд░реВ рджрд┐рдиреЗрдЫред рдпреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рд╡рд┐рдЬрд╛рд░реНрдб рдмрдиреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛрдИрди рдЬреБрди рддрдкрд╛рдИрд▓реЗ рд╕рдЬрд┐рд▓реИ рдХреНрд▓рд┐рдХ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ; рдпрд╕рдХреЛ рд╡рд┐рдкрд░рд┐рдд, рддрдкрд╛рдИрд▓реЗ рдЙрд╣реА рдХрд╛рд░реНрдпрд╣рд░реВ рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫ рдЬреБрди рдорд╛рдирд┐рд╕рд╣рд░реВрд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХрд╛рдордорд╛ рдЧрд░реНрдЫрдиреН, рдЬрд╕рд░реА рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЧрд░реНрдЫрдиреНред рдо рд╕рд┐рджреНрдзрд╛рдиреНрддрдХреЛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреЗрдЫреБ рдЬрдм рддрдкрд╛рдИрдВ рд╕рдВрд▓рдЧреНрди рдЪрд░рдгрд╣рд░реВ рдорд╛рд░реНрдлрдд рдЬрд╛рдиреБрд╣реБрдиреНрдЫред

рд╣рд╛рдореА рдХреЗ рдЧрд░реНрдЫреМ?

рд╣рд╛рдореА рдкреНрд░рдЧрддрд┐ рдЧрд░реНрджреИ рдЬрд╛рдБрджрд╛, рд╣рд╛рдореА рдмрд┐рд╕реНрддрд╛рд░реИ рд╡рд┐рд╢рд┐рд╖реНрдЯ CI рдЪрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬреБрди рдпреЛ рд╕реВрдЪреА рд╕рдореНрдЭрдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рддрд░рд┐рдХрд╛ рд╣реЛред рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рд╣рд╛рдореА рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг рдЧрд░реНрджрд╛, рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг рдЧрд░реНрджрд╛ рдЧрд░реНрдиреЗ рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ CI рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдирдЬрд┐рдХ рд▓реНрдпрд╛рдЙрди рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗрдЯ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред

рдпреЛ GIF рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдкрдорд╛ рддрдкрд╛рдЗрдБрдХреЛ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдорд╛ рдХрдорд┐рдЯрд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрджрдЫ рдЬрдм рддрдкрд╛рдЗрдБ рдкрд╛рдареНрдпрдХреНрд░рдо рдорд╛рд░реНрдлрдд рдкреНрд░рдЧрддрд┐ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдпрд╣рд╛рдБ рдХреЗрд╣рд┐ рдЬрдЯрд┐рд▓ рдЫреИрди рд░ рдХреЗрд╡рд▓ рд╕рдмреИрднрдиреНрджрд╛ рдЖрд╡рд╢реНрдпрдХ рдЫред

рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

рддрдкрд╛рдИрдВ рдирд┐рдореНрди рдорд╛рдирдХ CI рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВ рдорд╛рд░реНрдлрдд рдЬрд╛рдиреБрд╣реБрдиреЗрдЫ:

  • рд╕реБрд╡рд┐рдзрд╛ рдорд╛ рдХрд╛рдо;
  • рдЧреБрдгрд╕реНрддрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рдЖрд╡реЗрджрди;
  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛рд░реНрдпрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди;
  • рд╢рд╛рдЦрд╛рд╣рд░реВ рдорд░реНрдЬ рдЧрд░реНрджрд╛ рджреНрд╡рдиреНрджреНрд╡ рд╕рдорд╛рдзрд╛рди (рдорд░реНрдЬ рджреНрд╡рдиреНрджреНрд╡);
  • рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рддреНрд░реБрдЯрд┐ рд╣реБрдиреНрдЫред

рдХреЗ рд╕рд┐рдХреНрдиреЗ рд╣реЛ ?

рддрдкрд╛рдЗрдБ рдирд┐рдореНрди рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдЬрд╡рд╛рдл рджрд┐рди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗрдЫ:

  • рд▓рдЧрд╛рддрд╛рд░ рдПрдХреАрдХрд░рдг (CI) рдХреЗ рд╣реЛ?
  • CI рдорд╛ рдХрд╕реНрддрд╛ рдкреНрд░рдХрд╛рд░рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рд░ рдХреБрди рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛ рддрд┐рдиреАрд╣рд░реВ рдЯреНрд░рд┐рдЧрд░ рд╣реБрдиреНрдЫрдиреН?
  • рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдХреЗ рд╣реБрдиреН рд░ рддрд┐рдиреАрд╣рд░реВ рдХрд╣рд┐рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдЫрдиреН?
  • рдЯреЗрд╕реНрдЯ рдбреНрд░рд╛рдЗрднрди рдбреЗрднрд▓рдкрдореЗрдиреНрдЯ (TDD) рдХреЗ рд╣реЛ рд░ рдпреЛ рдХрд╕рд░реА CI рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫ?
  • рдХреЗ рдореИрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдорд░реНрдЬ рд╡рд╛ рд░рд┐рдмреЗрд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫ?
  • рд░реЛрд▓ рдмреНрдпрд╛рдХ рдЧрд░реНрдиреЗ рд╡рд╛ рдЕрд░реНрдХреЛ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ?

рд╕реБрд░реБрдорд╛ рдореИрд▓реЗ рдЬрддрд╛рддрддреИ "рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ" рдЬрд╕реНрддрд╛ рдХреБрд░рд╛рд╣рд░реВ рдЕрдиреБрд╡рд╛рдж рдЧрд░реЗрдВ, рддрд░ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд░реВрдк рдореИрд▓реЗ рдкрд╛рдардорд╛ рдкрд╛рдЧрд▓рдкрдирдХреЛ рдбрд┐рдЧреНрд░реА рдХрдо рдЧрд░реНрди рдХреЗрд╣реА рдард╛рдЙрдБрд╣рд░реВрдорд╛ рдЕрдВрдЧреНрд░реЗрдЬреАрдорд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢рд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред рдо рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рд░реНрдЬрд┐рдХ" рдХреЛ рдЕрджреНрднреБрдд рдХреНрд░рд┐рдпрд╛ "рдХрдорд┐рдЯ" рдЬрд╕реНрддреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреБ рдЬрд╣рд╛рдБ рдорд╛рдирд┐рд╕рд╣рд░реВрд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХрд╛рдордорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред

рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ?

рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг, рд╡рд╛ CI, рдПрдХ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдЕрднреНрдпрд╛рд╕ рд╣реЛ рдЬрд╕рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрд▓реА рд╕рджрд╕реНрдпрд▓реЗ рдЖрдлреНрдиреЛ рдХреЛрдбрд▓рд╛рдИ рджрд┐рдирдХреЛ рдХрдореНрддрд┐рдорд╛ рдПрдХ рдкрдЯрдХ рд╕рд╛рдЭрд╛ рднрдгреНрдбрд╛рд░рдорд╛ рдПрдХреАрдХреГрдд рдЧрд░реНрджрдЫ, рд░ рдирддрд┐рдЬрд╛ рдХреЛрдб рдХрдореНрддрд┐рдорд╛ рддреНрд░реБрдЯрд┐ рдмрд┐рдирд╛ рдирд┐рд░реНрдорд╛рдг рд╣реБрдиреБрдкрд░реНрдЫред

рдпрд╕ рд╢рдмреНрджрдХреЛ рдмрд╛рд░реЗрдорд╛ рдорддрднреЗрджрд╣рд░реВ рдЫрдиреН

рд╡рд┐рд╡рд╛рджрдХреЛ рдмрд┐рдиреНрджреБ рдПрдХреАрдХрд░рдгрдХреЛ рдЖрд╡реГрддреНрддрд┐ рд╣реЛред рдХрд╕реИ-рдХрд╕реИрд▓реЗ рджрд┐рдирдорд╛ рдПрдХ рдкрдЯрдХ рдорд╛рддреНрд░ рдХреЛрдб рдорд░реНрдЬ рдЧрд░реНрдиреБ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХреГрдд рд╣реБрди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реБрдиреЗ рддрд░реНрдХ рдЧрд░реНрдЫрдиреНред рдПрдЙрдЯрд╛ рдЯреЛрд▓реАрдХреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЗрдПрдХреЛ рдЫ рдЬрд╣рд╛рдБ рд╕рдмреИрд▓реЗ рдмрд┐рд╣рд╛рди рддрд╛рдЬрд╛ рдХреЛрдб рд▓рд┐рдиреНрдЫ рд░ рдмреЗрд▓реБрдХрд╛ рдПрдХ рдкрдЯрдХ рдПрдХреАрдХреГрдд рдЧрд░реНрджрдЫред рдпрджреНрдпрдкрд┐ рдпреЛ рдПрдХ рдЙрдЪрд┐рдд рдЖрдкрддреНрддрд┐ рд╣реЛ, рдпреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░рд┐рдиреНрдЫ рдХрд┐ рджрд┐рдирдорд╛ рдПрдХ рдкрдЯрдХрдХреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдЙрдЪрд┐рдд рд░реВрдкрдорд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ, рд╡рд┐рд╢рд┐рд╖реНрдЯ, рд░ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░рдХрд╛ рдЯреЛрд▓реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫред

рдЕрд░реНрдХреЛ рдЖрдкрддреНрддрд┐ рдпреЛ рд╣реЛ рдХрд┐ C++ рдЕрдм рд╡рд┐рдХрд╛рд╕рдорд╛ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рдПрдХ рдорд╛рддреНрд░ рднрд╛рд╖рд╛ рд╣реЛрдЗрди, рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрдХреЛ рддрд░рд┐рдХрд╛рдХреЛ рд░реВрдкрдорд╛ рддреНрд░реБрдЯрд┐-рд░рд╣рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдЖрд╡рд╢реНрдпрдХ рдЫред рдкрд░реАрдХреНрд╖рдгрдХрд╛ рдХреЗрд╣реА рд╕реЗрдЯрд╣рд░реВ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдПрдХрд╛рдЗ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ) рдкрдирд┐ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫред рд╣рд╛рд▓, рд╕рдореБрджрд╛рдп рдпрд╕рд▓рд╛рдИ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрдирд╛рдЙрди рддрд░реНрдл рдЕрдШрд┐ рдмрдврд┐рд░рд╣реЗрдХреЛ рдЫ, рд░ рднрд╡рд┐рд╖реНрдпрдорд╛ "рдирд┐рд░реНрдорд╛рдг + рдПрдХрд╛рдЗ рдкрд░реАрдХреНрд╖рдг" рд╕рдореНрднрд╡рддрдГ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдмрдиреНрдиреЗрдЫ, рдпрджрд┐ рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЫреИрдиред

рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг рднрдиреНрджрд╛ рдлрд░рдХ рдирд┐рд░рдиреНрддрд░ рд╡рд┐рддрд░рдг (рдирд┐рд░рдиреНрддрд░ рдбреЗрд▓рд┐рднрд░реА, CD) рдпрд╕рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдПрдХреАрдХрд░рдг рдЪрдХреНрд░ рдкрдЫрд┐ рд░рд┐рд▓реАрдЬ рдЙрдореНрдореЗрджреНрд╡рд╛рд░ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред

рд╣рд╛рдореАрд▓реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рднрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЪрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА

  1. рдкрдЫрд┐рд▓реНрд▓реЛ рдХреЛрдбрдорд╛ рддрд╛рдиреНрдиреБрд╣реЛрд╕реНред рдмрд╛рдЯ рд╢рд╛рдЦрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН masterред рдХрд╛рдо рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░ред
  2. рддрдкрд╛рдИрдВрдХреЛ рдирдпрд╛рдБ рд╢рд╛рдЦрд╛рдорд╛ рдХрдорд┐рдЯрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдирд┐рд░реНрдорд╛рдг рд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкрд╛рд╕? рдЕрд░реНрдХреЛ рдЪрд░рдгрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред рдЕрд╕рдлрд▓? рддреНрд░реБрдЯрд┐ рд╡рд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдлреЗрд░рд┐ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. рддрдкрд╛рдИрдВрдХреЛ рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╡рд╛ рд░рд┐рдореЛрдЯ рд╢рд╛рдЦрд╛рдорд╛ рдкреБрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  4. рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЫрд▓рдлрд▓ рдЬрд╛рд░реА рд░рд╣рдБрджрд╛ рдердк рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рд╣рд░реВ рдердкреНрдиреБрд╣реЛрд╕реНред рдлреАрдЪрд░ рд╢рд╛рдЦрд╛рдорд╛ рдкрд░реАрдХреНрд╖рд╛рд╣рд░реВ рдкрд╛рд╕ рдЧрд░рд╛рдЙрдиреБрд╣реЛрд╕реНред
  5. рдорд╛рд╕реНрдЯрд░рдмрд╛рдЯ рдорд░реНрдЬ/рд░рд┐рдмреЗрд╕ рдХрдорд┐рдЯрд╣рд░реВред рдорд░реНрдЬрдХреЛ рдирддрд┐рдЬрд╛рдорд╛ рдкрд░реАрдХреНрд╖рд╛рд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  6. рд╕реБрд╡рд┐рдзрд╛ рд╢рд╛рдЦрд╛рдмрд╛рдЯ рдЙрддреНрдкрд╛рджрдирдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  7. рдпрджрд┐ рдХреЗрд╣рд┐ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрдкрд╛рджрдирдорд╛ рд╕рдмреИ рдХреБрд░рд╛ рд░рд╛рдореНрд░реЛ рдЫ рднрдиреЗ, рдорд╛рд╕реНрдЯрд░рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдорд░реНрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

я╕П рддрдпрд╛рд░реА

рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рддрдкрд╛рдИрдВрд╕рдБрдЧ рд╕рд╣реА рд╕рдлреНрдЯрд╡реЗрдпрд░ рдЫ

рдпреЛ рдХреЛрд░реНрд╕ рд▓рд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫ Node.js ╨╕ Git рдЧреНрд░рд╛рд╣рдХ.

рддрдкрд╛рдЗрдБ рдХреБрдиреИ рдкрдирд┐ Git рдХреНрд▓рд╛рдЗрдиреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рдо рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗрдЫреБред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдПрдХ Git рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдЫ рдЬрд╕рд▓реЗ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ

рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдЕрдЭреИ рд╕рдореНрдо рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рд╕рдорд░реНрдерди рдЧрд░реНрдиреЗ Git рдЧреНрд░рд╛рд╣рдХ рдЫреИрди рднрдиреЗ, рддрдкрд╛рдЗрдБ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдпрд╣рд╛рдБ.

рднрдгреНрдбрд╛рд░ рддрдпрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рддрдкрд╛рдИрдВрд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ (рдлреЛрд░реНрдХ) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред рдкрд╛рдареНрдпрдХреНрд░рдордХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдбрдХреЛ рд╕рд╛рде рдЯреЗрдореНрдкреНрд▓реЗрдЯ рднрдгреНрдбрд╛рд░ GitHub рдорд╛ред рдпреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХрд▓ рдЧрд░реНрди рд╕рд╣рдордд рдЧрд░реМрдВ рдкрд╛рдареНрдпрдХреНрд░рдо рднрдгреНрдбрд╛рд░.

рд╕рдХрд┐рдпреЛ? рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫреИрди рднрдиреЗ, рддрдкрд╛рдЗрдБрдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рднрдгреНрдбрд╛рд░рд▓рд╛рдИ рд╕рдореНрднрд╡рддрдГ рднрдирд┐рдиреНрдЫ continuous-integration-team-scenarios-students, рдпреЛ рддрдкрд╛рдИрдВрдХреЛ GitHub рдЦрд╛рддрд╛рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫ рд░ URL рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ

https://github.com/<╨▓╨░╤И╨╡ ╨╕╨╝╤П ╨┐╨╛╨╗╨╖╨╛╨▓╨░╤В╨╡╨╗╤П ╨╜╨░ GitHub>/continuous-integration-team-scenarios-students

рдо рдХреЗрд╡рд▓ рдпреЛ рдареЗрдЧрд╛рдирд╛рдорд╛ рдХрд▓ рдЧрд░реНрдиреЗрдЫреБ <URL ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╤П>.

рдХреЛрдг рдХреЛрд╖реНрдардХ рдЬрд╕реНрддреИ <╤В╤Г╤В> рдпрд╕рдХреЛ рдорддрд▓рдм рддрдкрд╛рдИрдВрд▓реЗ рдЙрдкрдпреБрдХреНрдд рдорд╛рдирд╕рдБрдЧ рддреНрдпрд╕реНрддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд▓рд╛рдИ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреБрдкрд░реНрдЫред

рддреНрдпреЛ рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░ GitHub рдХрд╛рд░реНрдпрд╣рд░реВ рдпрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рднрдгреНрдбрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рд╡реЗрд╢ред рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рд╕рдХреНрд╖рдо рдЫреИрдирдиреН рднрдиреЗ, рдХреГрдкрдпрд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреГрд╖реНрдардХреЛ рдмреАрдЪрдорд╛ рдареВрд▓реЛ рдмрдЯрди рдХреНрд▓рд┐рдХ рдЧрд░реЗрд░ рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЬреБрди рддрдкрд╛рдИрдВ GitHub рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдХреНрд▓рд┐рдХ рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдпрджрд┐ GitHub рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рдХреНрд╖рдо рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреЗ рддрдкрд╛рдИрдВрд▓реЗ рдореЗрд░рд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкрдЫреНрдпрд╛рдПрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдкреВрд░рд╛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗ рдЫреИрдиред

рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

рд╣рд╛рдореАрд▓реЗ рдпрд╣рд╛рдБ рд░рдЪрдирд╛ рдЧрд░рд┐рд░рд╣рдиреБрднрдПрдХреЛ рд╕реВрдЪреАрдХреЛ рд╣рд╛рд▓рдХреЛ рдЕрд╡рд╕реНрдерд╛ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрд▓реЗ рд╕рдзреИрдВ рдорд╛рд░реНрдХрдбрд╛рдЙрди рд░реЗрдиреНрдбрд░ рдЧрд░реНрди GitHub рдХреЛ рдХреНрд╖рдорддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

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, рдХрд╛рдо рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░

  1. рдмрд╛рдЯ рдкрд╛рдареНрдпрдХреНрд░рдо рднрдгреНрдбрд╛рд░ рдХреНрд▓реЛрди рдЧрд░реНрдиреБрд╣реЛрд╕реН <URL ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╤П>.
  2. рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН npm install рдкрд╛рдареНрдпрдХреНрд░рдо рднрдгреНрдбрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдорд╛; рд╣рд╛рдореАрд▓рд╛рдИ рдЬреЗрд╕реНрдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред
  3. рдПрдЙрдЯрд╛ рд╢рд╛рдЦрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдирд╛рдо рджрд┐рдиреБрд╣реЛрд╕реН featureред рдпреЛ рдереНрд░реЗрдбрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  4. рдорд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдердкреНрдиреБрд╣реЛрд╕реН 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);
    });

  5. рдлрд╛рдЗрд▓рдорд╛ рдкрд╣рд┐рд▓реЛ рек рдЪрд░рдгрдХреЛ рдкрд╛рда рдердкреНрдиреБрд╣реЛрд╕реН 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 рд╣реБрдХрд╣рд░реВрд▓рд╛рдИ рднрдгреНрдбрд╛рд░рдХреЛ рдЕрдВрд╢ рдорд╛рдирд┐рдиреЗ рдЫреИрди рд░ рддреНрдпрд╕реИрд▓реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рд╛рдордЧреНрд░реАрдХреЛ рдмрд╛рдБрдХреА рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рд╕рд╣рд┐рдд GitHub рдмрд╛рдЯ рдХреНрд▓реЛрди рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред рд╣реБрдХ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓реЗ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ install_hook.sh рд╡рд╛ рдлрд╛рдЗрд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН repo/hooks/pre-commit рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдорд╛ .git/hooks/.
рдЬрдм рддрдкрд╛рдЗрдБ рдкреНрд░рддрд┐рдмрджреНрдз рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рддрдкрд╛рдЗрдБ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫ рдХрд┐ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЗрдПрдХрд╛ рдЫрдиреН рд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рдХреБрдЮреНрдЬреА рд╢рдмреНрджрд╣рд░реВ рд╕реВрдЪреАрдорд╛ рдЙрдкрд╕реНрдерд┐рдд рдЫрдиреН рдХрд┐ рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫред

  1. рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрд░ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН npm test рддрдкрд╛рдИрдВрдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рднрдгреНрдбрд╛рд░ рдлреЛрд▓реНрдбрд░рдорд╛ред рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкреВрд░рд╛ рднрдПрдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  2. рдЪрд▓рд╛рдПрд░ рдХрдорд┐рдЯ рд╣реБрдХ (рдкреНрд░рд┐-рдХрдорд┐рдЯ рд╣реБрдХ) рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН install_hook.sh.
  3. рдЖрдлреНрдиреЛ рд╕реНрдерд╛рдиреАрдп рднрдгреНрдбрд╛рд░рдорд╛ рдЖрдлреНрдиреЛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреНрд░рддрд┐рдмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  4. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдХрдорд┐рдЯ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЗрдПрдХреЛ рдЫред

рдпреА рдЪрд░рдгрд╣рд░реВ рдкрдЫреНрдпрд╛рдПрд░ рддрдкрд╛рдИрдВрдХреЛ рднрдгреНрдбрд╛рд░ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреБ рдкрд░реНрдЫред
рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

╨Ъ╨╛╨╝╨░╨╜╨┤╤Л

# ╨г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╨╡ pre-commit hook ╨▓╤Л╨┐╨╛╨╗╨╜╨╕╨▓ install_hook.sh.  

# ╨Ч╨░╨║╨╛╨╝╨╝╨╕╤В╤М╤В╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П ╨▓ ╨╗╨╛╨║╨░╨╗╤М╨╜╤Л╨╣ ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╨╣. ╨Ш╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╣╤В╨╡ "Add first CI steps" ╨▓ ╨║╨░╤З╨╡╤Б╤В╨▓╨╡ ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╤П ╨┐╤А╨╕ ╨║╨╛╨╝╨╝╨╕╤В╨╡.
git add ci.md ci.test.js
git commit -m "Add first CI steps"

# ╨г╨▒╨╡╨┤╨╕╤В╨╡╤Б╤М, ╤З╤В╨╛ ╤В╨╡╤Б╤В╤Л ╨╖╨░╨┐╤Г╤Б╨║╨░╤О╤В╤Б╤П ╨┐╨╡╤А╨╡╨┤ ╨║╨╛╨╝╨╝╨╕╤В╨╛╨╝.  

рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╡рд╛ рд░рд┐рдореЛрдЯ рд╢рд╛рдЦрд╛рдорд╛ рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдПрдХ рдкрдЯрдХ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХреЛрдб рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдкрдорд╛ рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрдБрдЫрдиреН рддрд╛рдХрд┐ рдпреЛ рдЕрдиреНрддрддрдГ рдЬрдирддрд╛рд╕рдБрдЧ рдПрдХреАрдХреГрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред GitHub рдХреЛ рд╕рд╛рде, рдпреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рднрдгреНрдбрд╛рд░рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлреЛрд░реНрдХ) рд╡рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╢рд╛рдЦрд╛рдорд╛ рдХрд╛рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдиреНрдЫред

  • рдлреЛрд░реНрдХрдХреЛ рд╕рд╛рде, рдПрдХ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓реЗ рд░рд┐рдореЛрдЯ рд╕рд╛рдЭрд╛ рднрдгреНрдбрд╛рд░ рдХреНрд▓реЛрди рдЧрд░реНрджрдЫ, рдпрд╕рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд┐рдореЛрдЯ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓рд╛рдИ рдлреЛрд░реНрдХ рдкрдирд┐ рднрдирд┐рдиреНрдЫред рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрди рдпреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрдгреНрдбрд╛рд░ рдХреНрд▓реЛрди рдЧрд░реНрджрдЫред рдЬрдм рдХрд╛рдо рдкреВрд░рд╛ рд╣реБрдиреНрдЫ рд░ рдХрдорд┐рдЯрд╣рд░реВ рдмрдирд╛рдЗрдиреНрдЫ, рдЙрд╕рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЖрдлреНрдиреЛ рдлреЛрд░реНрдХрдорд╛ рдзрдХреЗрд▓реНрдЫ, рдЬрд╣рд╛рдБ рддрд┐рдиреАрд╣рд░реВ рдЕрд░реВрд▓рд╛рдИ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреНрдЫрдиреН рд░ рд╕рд╛рдЭрд╛ рднрдгреНрдбрд╛рд░рдорд╛ рдПрдХреАрдХреГрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ GitHub рдорд╛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпреЛ рдореЗрд░реЛ рдЙрдиреНрдирдд рдкрд╛рдареНрдпрдХреНрд░рдо [Team Work рд░ CI with Git] рдорд╛ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ (http://devops.redpill.solutions/).
  • рдЕрд░реНрдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рднрдиреЗрдХреЛ рдПрдЙрдЯрд╛ рдорд╛рддреНрд░ рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд░ рд╢рд╛рдЦрд╛ рдорд╛рддреНрд░ рдЧрдгрдирд╛ рдЧрд░реНрдиреБ рд╣реЛ master рд╕рд╛рдЭрд╛ рднрдгреНрдбрд╛рд░ "рд╕реБрд░рдХреНрд╖рд┐рдд"ред рдпрд╕ рдкрд░рд┐рджреГрд╢реНрдпрдорд╛, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдЖрдлреНрдиреЛ рдХреЛрдб рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдХреЛ рд╢рд╛рдЦрд╛рд╣рд░реВрдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдЫрдиреН рддрд╛рдХрд┐ рдЕрд░реВрд▓реЗ рдпреЛ рдХреЛрдб рд╣реЗрд░реНрди рд╕рдХреВрдиреН, рдпрджрд┐ рд╕рдмреИ рдХреБрд░рд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЫ рднрдиреЗ, рдпрд╕рд▓рд╛рдИ рдорд░реНрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реНред master рд╕рд╛рдЭрд╛ рднрдгреНрдбрд╛рд░ред

рдпрд╕ рд╡рд┐рд╢реЗрд╖ рдкрд╛рдареНрдпрдХреНрд░рдордорд╛, рд╣рд╛рдореА рд╢рд╛рдЦрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред

рд╣рд╛рдореНрд░реЛ рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реМрдВред

я╕ПрдХрд╛рд░реНрдп

  • рддрдкрд╛рдИрдВрдХреЛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╢рд╛рдЦрд╛рдХреЛ рдирд╛рдордХреЛ рд░реВрдкрдорд╛ рдЯрд╛рдврд╛рдХреЛ рд╢рд╛рдЦрд╛рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

╨Ъ╨╛╨╝╨░╨╜╨┤╤Л

git push --set-upstream origin feature

рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╢реАрд░реНрд╖рдХрдХреЛ рд╕рд╛рде рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЪрд░рдг рд╕рдореАрдХреНрд╖рд╛... рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН feature рдЬрд╕реНрддреИ "рд╣реЗрдб рд╢рд╛рдЦрд╛" рд░ master рдЬрд╕реНрддреИ "рдЖрдзрд╛рд░ рд╢рд╛рдЦрд╛"ред

рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫ master рдЖрдлреНрдиреЛ рдорд╛ рднрдгреНрдбрд╛рд░ рдХрд╛рдБрдЯрд╛ "рдЖрдзрд╛рд░ рд╢рд╛рдЦрд╛" рдХреЛ рд░реВрдкрдорд╛, рдо рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рд╛рдордЧреНрд░реА рднрдгреНрдбрд╛рд░рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рдЬрд╡рд╛рдл рджрд┐рдиреЗ рдЫреИрдиред

GitHub lingo рдорд╛, "рдЖрдзрд╛рд░ рд╢рд╛рдЦрд╛" рддреНрдпреЛ рд╢рд╛рдЦрд╛ рд╣реЛ рдЬрд╕рдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдХрд╛рдорд▓рд╛рдИ рдЖрдзрд╛рд░ рдмрдирд╛рдЙрдиреБрд╣реБрдиреНрдЫ, рд░ "рд╣реЗрдб рд╢рд╛рдЦрд╛" рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рд╢рд╛рдЦрд╛ рд╣реЛред

рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЫрд▓рдлрд▓ рдЬрд╛рд░реА рд░рд╣рдБрджрд╛ рдирдпрд╛рдБ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рд╣рд░реВ рдердкреНрдиреБрд╣реЛрд╕реН

рдкреБрд▓ рдЕрдиреБрд░реЛрдз (PR)

рдкреБрд▓ рдЕрдиреБрд░реЛрдз (PR) рдЫрд▓рдлрд▓ рд░ рдХрд╛рдЧрдЬрд╛рдд рдХреЛрдб, рд╕рд╛рдереИ рдЖрдЪрд╛рд░ рд╕рдВрд╣рд┐рддрд╛ рд╕рдореАрдХреНрд╖рд╛ рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рд╣реЛред рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВрд▓рд╛рдИ рд╕рдордЧреНрд░ рдХреЛрдбрдорд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдПрдХреАрдХреГрдд рдЧрд░реНрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░рд┐рдХрд╛рдХреЛ рдирд╛рдордорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдПрдХ рд╡реНрдпрдХреНрддрд┐рд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд░рд┐рдореЛрдЯ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рднрдгреНрдбрд╛рд░ рдХреНрд▓реЛрди рдЧрд░реНрджрдЫ рд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдХреЛрдбрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫред рдпрд╕рдкрдЫрд┐, рдЙрд╕рд▓реЗ рдХреЛрдбрд▓рд╛рдИ рдЖрдлреНрдиреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдорд╛ рд░рд╛рдЦреНрдЫ рд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рднрдгреНрдбрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓рд╛рдИ рдЙрдард╛рдЙрди рд╕реЛрдзреНрдЫредрдЦреАрдВрдЪреЛ) рдпрд╕рдХреЛ рдХреЛрдб рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕реНрдерд╛рдиреАрдп рднрдгреНрдбрд╛рд░рд╣рд░реВрдорд╛, рдЬрд╣рд╛рдБ рддрд┐рдиреАрд╣рд░реВ рд╕рдореАрдХреНрд╖рд╛ рдЧрд░реНрдЫрдиреН рд░ рд╕рдореНрднрд╡рддрдГ рдПрдХреАрдХреГрдд рд╣реБрдиреНрдЫрдиреН(рдорд░реНрдЬ) рдЙрдирдХреЛред рдпреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЕрдиреНрдп рдирд╛рдорд╣рд░реБ рджреНрд╡рд╛рд░рд╛ рдкрдирд┐ рдЪрд┐рдирд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз.

рддрдкрд╛рдИрд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ GitHub рд╡рд╛ рд╕рдорд╛рди рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдХреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрджреИрдиред рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реАрд╣рд░реВрд▓реЗ рдЖрдордиреЗ-рд╕рд╛рдордиреЗ рд╕рдЮреНрдЪрд╛рд░, рднреНрд╡рд╛рдЗрд╕ рдХрд▓, рд╡рд╛ рдЗрдореЗрд▓ рд╕рд╣рд┐рдд рд╕рдЮреНрдЪрд╛рд░рдХрд╛ рдЕрдиреНрдп рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН, рддрд░ рддреНрдпрд╣рд╛рдБ рдЕрдЭреИ рдкрдирд┐ рдлреЛрд░рдо-рд╢реИрд▓реА рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдереБрдкреНрд░реИ рдХрд╛рд░рдгрд╣рд░реВ рдЫрдиреНред рдпрд╣рд╛рдБ рддрд┐рдиреАрд╣рд░реВ рдордзреНрдпреЗ рдХреЗрд╣реА рдЫрдиреН:

  • рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдВрдЧрдард┐рдд рдЫрд▓рдлрд▓;
  • рджреБрдмреИ autotesters рд░ рд╕рд╛рдереАрд╣рд░реБ рдмрд╛рдЯ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдард╛рдЙрдБ рдХреЛ рд░реВрдк рдорд╛;
  • рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХреАрдХрд░рдг;
  • рддрд╛рдХрд┐ рдкрдЫрд┐ рддрдкрд╛рдИрд▓реЗ рдпреЛ рд╡рд╛ рддреНрдпреЛ рдХреЛрдбрдХреЛ рдЯреБрдХреНрд░рд╛ рдкрдЫрд╛рдбрд┐рдХреЛ рдХрд╛рд░рдг рд░ рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдиреИ рдХреБрд░рд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрди рд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдБрджрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдпрджрд┐ рддрдкрд╛рдЗрдБ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдорд╛ рдХрд╛рдо рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдПрдХ рднрдиреНрджрд╛ рдмрдвреА рддрд░рд┐рдХрд╛рдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрдкрд╛рдЗрдБ рддрдкрд╛рдЗрдБрдХреЛ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рд░ рддрдкрд╛рдЗрдБрдХреЛ рдпреЛрдЬрдирд╛рд╣рд░реБ рд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рд╕рд╣рдпреЛрдЧреАрд╣рд░реБ рд╕рдВрдЧ рдЫрд▓рдлрд▓ рдЧрд░реНрди рдХреЛрдб рдХреЛ рдкрд╣рд┐рд▓реЛ рд▓рд╛рдЗрди рд▓реЗрдЦреНрдиреБ рдЕрдШрд┐ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рдХрд╛рдо рд╕рд░рд▓ рдЫ рднрдиреЗ, рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЦреЛрд▓рд┐рдиреНрдЫ рдЬрдм рдХреЗрд╣рд┐ рдкрд╣рд┐рд▓реЗ рдиреИ рдЧрд░рд┐рд╕рдХреЗрдХреЛ рдЫ, рдкреНрд░рддрд┐рдмрджреНрдз рдЫ, рд░ рдЫрд▓рдлрд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдХреЗрд╣реА рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВрдорд╛, рддрдкрд╛рдИрдВ рдЧреБрдгрд╕реНрддрд░ рдирд┐рдпрдиреНрддреНрд░рдг рдХрд╛рд░рдгрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ PR рдЦреЛрд▓реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ: рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрди рд╡рд╛ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рд╣рд░реВ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрдиред рддрдкрд╛рдИрдВрд▓реЗ рдЬреЗ рдкрдирд┐ рдирд┐рд░реНрдгрдп рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, @рдореЗрдиреНрд╕рди рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН рдЬрд╕рдХреЛ рд╕реНрд╡реАрдХреГрддрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрдорд╛ рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, PR рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛, рддрдкрд╛рдЗрдБ рдирд┐рдореНрди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред

  • рддрдкрд╛рдИрд▓реЗ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрдиреБрднрдпреЛ рд░ рдХрд╣рд╛рдБ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  • рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рдЙрджреНрджреЗрд╢реНрдп рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрджреИ рд╡рд┐рд╡рд░рдг рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдЗрдБ рдЪрд╛рд╣рд╛рдиреБрд╣реБрдиреНрдЫ:
    • рдХреЛрдбрдмрд╛рдЯ рд╕реНрдкрд╖реНрдЯ рдирднрдПрдХреЛ рд╡рд╛ рд╕рдиреНрджрд░реНрдн рдмреБрдЭреНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧреА рдХреЗрд╣реА рдкрдирд┐ рдердкреНрдиреБрд╣реЛрд╕реН, рдЬрд╕реНрддреИ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ #bugs рд░ рдХрдорд┐рдЯ рдирдореНрдмрд░рд╣рд░реВ;
    • @рдореЗрдиреНрд╕рди рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд╕реИрдХреЛ рд╕рд╛рде рддрдкрд╛рдИрдВ рдХрд╛рдо рд╕реБрд░реБ рдЧрд░реНрди рдЪрд╛рд╣рд╛рдиреБрд╣реБрдиреНрдЫ, рд╡рд╛ рддрдкрд╛рдИрдВ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрдЫрд┐ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ;
    • рд╕рд╣рдХрд░реНрдореАрд╣рд░реВрд▓рд╛рдИ рдХреЗрд╣рд┐рдорд╛ рдорджреНрджрдд рдЧрд░реНрди рд╡рд╛ рдХреЗрд╣рд┐ рд╡рд┐рд╢реЗрд╖ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕реЛрдзреНрдиреБрд╣реЛрд╕реНред

рдПрдХрдЪреЛрдЯрд┐ рддрдкрд╛рдИрдВрд▓реЗ PR рдЦреЛрд▓реНрдиреБрднрдпреЛ рднрдиреЗ, рддреНрдпрд╕реНрддрд╛ рдХреЗрд╕рд╣рд░реВрдорд╛ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХрд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреНрдЫрдиреНред рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛рдорд╛, рдпреЛ рд╣рд╛рдореАрд▓реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдЪрд▓рд╛рдПрдХреЛ рдкрд░реАрдХреНрд╖рдгрдХреЛ рд╕рдорд╛рди рд╕реЗрдЯ рд╣реБрдиреЗрдЫ, рддрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрддреНрдпрд╣рд╛рдБ рдердк рдкрд░реАрдХреНрд╖рдг рд░ рдЬрд╛рдБрдЪрд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред

рдХреГрдкрдпрд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкреВрд░рд╛ рд╣реБрдБрджрд╛ рдкрд░реНрдЦрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдИрдВрд▓реЗ GitHub рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ PR рдЫрд▓рдлрд▓рдХреЛ рддрд▓рдорд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкреВрд░рд╛ рднрдПрдкрдЫрд┐ рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реНред

я╕П CI рдЪрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреАрдХреЛ рдЕрдирд┐рдпрдорд┐рддрддрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЯрд┐рдкреНрдкрдгреА рдердкреНрдиреБрд╣реЛрд╕реН

рдпрд╕ рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рд╕реВрдЪреА рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рд░ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реЛ, рд╣рд╛рдореАрд▓реЗ рдпрд╕ рдмрд╛рд░реЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрдиреБ рдкрд░реНрдЫред

я╕П рдХрд╛рд░реНрдп: рдпреЛ рдЯрд┐рдкреНрдкрдгреАрдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

  1. рд╢рд╛рдЦрд╛рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН master.
  2. рдирд╛рдордХреЛ рд╢рд╛рдЦрд╛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН bugfix.
  3. рдлрд╛рдЗрд▓рдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рдиреЛрдЯ рдкрд╛рда рдердкреНрдиреБрд╣реЛрд╕реН ci.md.
    > **GitHub flow** is sometimes used as a nickname to refer to a flavor of trunk-based development  
    when code is deployed straight from feature branches. This list is just an interpretation  
    that I use in my [DevOps courses](http://redpill.solutions).  
    The official tutorial is [here](https://guides.github.com/introduction/flow/).
  4. рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреНрд░рддрд┐рдмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  5. рдереНрд░реЗрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН bugfix рдЯрд╛рдврд╛рдХреЛ рднрдгреНрдбрд╛рд░рдорд╛ред
  6. рдирд╛рдордХреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЯрд┐рдкреНрдкрдгреА рдердкреНрджреИ рдЯрд╛рдЙрдХреЛ рд╢рд╛рдЦрд╛ рд╕рдВрдЧ 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 ╨║╨░╨║ ╨╛╨┐╨╕╤Б╨░╨╜╨╛ ╨▓╤Л╤И╨╡

рд╕реНрд╡реАрдХреГрдд рдкреБрд▓ рдЕрдиреБрд░реЛрдз "рдЯрд┐рдкреНрдкрдгреА рдердкреНрджреИ"

я╕ПрдХрд╛рд░реНрдп

  1. рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  2. "рдорд░реНрдЬ рдкреБрд▓ рдЕрдиреБрд░реЛрдз" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. "рдорд░реНрдЬ рдкреБрд╖реНрдЯрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  4. "рд╢рд╛рдЦрд╛ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдм рдпрд╕рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫреИрдиред

рдпреЛ рдорд░реНрдЬ рдкрдЫрд┐ рдХрдорд┐рдЯрд╣рд░реВрдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рд╣реЛред
рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

я╕П рдХрд╛рдо рдЧрд░рд┐рд░рд╣рдиреБрд╣реЛрд╕реН рд░ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдердкреНрдиреБрд╣реЛрд╕реН

рдкреБрд▓ рдЕрдиреБрд░реЛрдзрдорд╛ рд╕рд╣рдпреЛрдЧ рдЧрд░реНрдирд╛рд▓реЗ рдкреНрд░рд╛рдп: рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдордХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реБрдиреНрдЫред рдпреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рд╡рд╛ рдЫрд▓рдлрд▓рдХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ, рддрд░ рд╣рд╛рдореНрд░реЛ рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рд╣рд╛рдореА CI рдЪрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреАрдорд╛ рдирдпрд╛рдБ рд╡рд╕реНрддреБрд╣рд░реВ рдердкреЗрд░ рдпрд╕рд▓рд╛рдИ рдореЛрдбреЗрд▓ рдЧрд░реНрди рдЬрд╛рдБрджреИрдЫреМрдВред

рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдорд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХреЗрд╣реА рдкрд░реАрдХреНрд╖рдг рдХрднрд░реЗрдЬ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫред рдкрд░реАрдХреНрд╖рдг рдХрднрд░реЗрдЬ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рднрд┐рдиреНрди рд╣реБрдиреНрдЫрдиреН рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдкрд╛рдЗрдиреНрдЫ рдЬрд╕рд▓рд╛рдИ "рдпреЛрдЧрджрд╛рди рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢рд╣рд░реВ" рднрдирд┐рдиреНрдЫред рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕рд░рд▓ рд░рд╛рдЦреНрдиреЗрдЫреМрдВ рд░ рд╣рд╛рдореНрд░реЛ рдЪреЗрдХрд▓рд┐рд╕реНрдЯрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реАрдХреНрд╖рдг рдердкреНрдиреЗрдЫреМрдВред

рдЕрд╕рд╛рдЗрдирдореЗрдиреНрдЯрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрджрд╛, рдкрд╣рд┐рд▓реЗ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╕рд╣реА рд░реВрдкрдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ pre-commit рдкрд╣рд┐рд▓реЗ рд╣реБрдХ, рднрд░реНрдЦрд░реИ рдердкрд┐рдПрдХреЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдЗрдиреЗрдЫ, рдЕрд╕рдлрд▓ рд╣реБрдиреЗрдЫ, рд░ рдХреЗрд╣рд┐ рдкрдирд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдиреЗрдЫреИрдиред рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпрд╕рд░реА рд╣рд╛рдореА рдЬрд╛рдиреНрджрдЫреМрдВ рдХрд┐ рд╣рд╛рдореНрд░рд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреЗрд╣рд┐ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреНред рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рдХреБрд░рд╛ рдХреЗ рдЫ рднрдиреЗ, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЕрдШрд┐ рдХреЛрдбрдХреЛ рд╕рд╛рде рд╕реБрд░реБ рдЧрд░реНрдпреМрдВ рднрдиреЗ, рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрдиреБрдХреЛ рдорддрд▓рдм рдпреЛ рд╣реБрди рд╕рдХреНрдЫ рдХрд┐ рдХреЛрдбрд▓реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдпреЛ, рд╡рд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреЗрд╣рд┐ рдкрдирд┐ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдерд┐рдПрдиред рд╕рд╛рдереИ, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЛ рд╕реНрдерд╛рдирдорд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рд▓реЗрдЦреЗрдХрд╛ рдерд┐рдПрдиреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдкреВрд░реИ рдмрд┐рд░реНрд╕реЗрдХрд╛ рд╣реБрди рд╕рдХреНрдЫреМрдВ, рдХрд┐рдирдХрд┐ рдХреБрдиреИ рдкрдирд┐ рдХреБрд░рд╛рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдпрд╕рдХреЛ рд╕рдореНрдЭрдирд╛ рджрд┐рд▓рд╛рдЙрдиреЗ рдерд┐рдПрдиред

рдкрд░реАрдХреНрд╖рдг рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд┐рдХрд╛рд╕ (TDD)

TDD рд▓реЗ рдХреЛрдб рдЕрдШрд┐ рдкрд░реАрдХреНрд╖рдг рд▓реЗрдЦреНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдЫред TDD рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред

  1. рдкрд░реАрдХреНрд╖рдг рдердкреНрдиреБрд╣реЛрд╕реНред
  2. рд╕рдмреИ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН рд░ рдирдпрд╛рдБ рдкрд░реАрдХреНрд╖рдг рдЕрд╕рдлрд▓ рднрдПрдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. рдХреЛрдб рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реНред
  4. рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рд╕рдмреИ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЙрддреНрддреАрд░реНрдг рд╣реБрдиреНрдЫрдиреНред
  5. рдЖрдлреНрдиреЛ рдХреЛрдб рд░рд┐рдлреНрдпрд╛рдХреНрдЯрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  6. рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреБрд╣реЛрд╕реНред

рдЕрд╕рдлрд▓ рд╣реБрдиреЗ рдкрд░рд┐рдХреНрд╖рд╛рдХреЛ рдирддрд┐рдЬрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд░рд╛рддреЛ рд░рдВрдЧрдорд╛ рджреЗрдЦрд╛рдЗрдиреНрдЫ, рд░ рдкрд╛рд╕ рднрдПрдХрд╛рд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╣рд░рд┐рдпреЛрдорд╛ рджреЗрдЦрд╛рдЗрдиреНрдЫ, рдЪрдХреНрд░рд▓рд╛рдИ рд░рд╛рддреЛ-рд╣рд░рд┐рдпреЛ-рд░рд┐рдлреНрдпрд╛рдХреНрдЯрд░ рдкрдирд┐ рднрдирд┐рдиреНрдЫред

я╕ПрдХрд╛рд░реНрдп

рдкрд╣рд┐рд▓реЗ, рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрд╕рдлрд▓ рд╣реБрди рджрд┐рдиреБрд╣реЛрд╕реН, рддреНрдпрд╕рдкрдЫрд┐ CI рдЪрд░рдг рд╕реВрдЪреАрдХреЛ рдкрд╛рда рдердкреНрдиреБрд╣реЛрд╕реН рд░ рдХрдорд┐рдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫ рдХрд┐ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЙрддреНрддреАрд░реНрдг рд╣реБрдБрджреИрдЫрдиреН ("рд╣рд░рд┐рдпреЛ")ред
рддреНрдпрд╕рдкрдЫрд┐ рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдорд╛ рдирдпрд╛рдБ рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЫрд▓рдлрд▓ рд░ PR рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯрдХреЛ рддрд▓ GitHub рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

  1. рд╢рд╛рдЦрд╛рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН feature.
  2. рдпреА рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдердкреНрдиреБрд╣реЛрд╕реН 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);
    });

  3. рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджрд┐ pre-commit рд╣реБрдХ рд╕реНрдерд╛рдкрд┐рдд рдЫ, рдкреНрд░рддрд┐рдмрджреНрдз рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд╣реБрдиреЗрдЫред
  4. рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рдкрд╛рда рдердкреНрдиреБрд╣реЛрд╕реН ci.md.
    5. Merge/rebase commits from master. Make tests pass on the merge result.  
    6. Deploy from the feature branch with a sneaky bug to production.
    7. If everything is good in production for some period of time, merge changes to master. 
  5. рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рддрд┐рдмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  6. рд╢рд╛рдЦрд╛рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреЛрд╕реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН feature.

рддрдкрд╛рдИрд╕рдБрдЧ рдЕрдм рдпрд╕реНрддреЛ рдХреЗрд╣рд┐ рд╣реБрдиреБрдкрд░реНрдЫ
рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

╨Ъ╨╛╨╝╨░╨╜╨┤╤Л


# ╨Я╨╡╤А╨╡╨║╨╗╤О╤З╨╕╤В╨╡╨╗╤М╨╜╨░ ╨▓╨╡╤В╨║╤Г feature
git checkout feature

# ╨Ф╨╛╨▒╨░╨▓╨╕╤В╤М ╤В╨╡╤Б╤В╤Л ╨▓ ci.test.js ╨║╨░╨║ ╨╛╨┐╨╕╤Б╨░╨╜╨╛ ╨▓╤Л╤И╨╡

# ╨Ф╨╛╨▒╨░╨▓╤М╤В╨╡ ╨▓ ╨╕╨╜╨┤╨╡╨║╤Б ci.test.js ╤З╤В╨╛╨▒╤Л ╨┐╨╛╨╖╨╢╨╡ ╨╖╨░╨║╨╛╨╝╨╝╨╕╤В╨╕╤В╤М
git add ci.test.js

# ╨Я╨╛╨┐╤Л╤В╨░╨╣╤В╨╡╤Б╤М ╨╖╨░╨║╨╛╨╝╨╝╨╕╤В╨╕╤В╤М ╤В╨╡╤Б╤В╤Л. ╨Х╤Б╨╗╨╕ pre-commit hook ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜╤Л, ╨║╨╛╨╝╨╝╨╕╤В ╨╜╨╡ ╨┐╤А╨╛╨╕╨╖╨╛╨╣╨┤╤С╤В.
git commit

# ╨в╨╡╨┐╨╡╤А╤М ╨┤╨╛╨▒╨░╨▓╤М╤В╨╡ ╤В╨╡╨║╤Б╤В ╨▓ ci.md ╨║╨░╨║ ╨╛╨┐╨╕╤Б╨░╨╜╨╛ ╨▓╤Л╤И╨╡

# ╨Т╨╜╨╡╤Б╨╕╤В╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П ╨╕ ╨╖╨░╨║╨╛╨╝╨╝╨╕╤В╤М╤В╨╡ ╨╕╤Е
git add ci.md
git commit -m "Add the remaining CI steps"

# ╨Ю╨┐╤Г╨▒╨╗╨╕╨║╤Г╨╣╤В╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П ╨▓ ╨▓╨╡╤В╨║╤Г feature
git push

рд╡рд┐рд╡рд╛рдж рдорд░реНрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреБрд░реЛрдзрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рдЪрд░рдг рд╕рдореАрдХреНрд╖рд╛.

рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣реА рдЧрд▓реНрддреА рдирдЧрд░реЗ рдкрдирд┐ рд░ рд╣рд╛рдореНрд░реЛ рдХреЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкрд╛рд╕ рднрдП рддрд╛рдкрдирд┐, рд╣рд╛рдореА рдЕрдЭреИ рдкрдирд┐ рд╢рд╛рдЦрд╛ рдорд░реНрдЬ рдЧрд░реНрди рд╕рдХреНрджреИрдиреМрдВред feature ╨╕ masterред рдпреЛ рдЕрд░реНрдХреЛ рдереНрд░реЗрдбрдХреЛ рдХрд╛рд░рдг рд╣реЛ bugfix рд╕рдВрдЧ рдорд░реНрдЬ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ master рдЬрдм рд╣рд╛рдореА рдпреЛ PR рдорд╛ рдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВред
рдпрд╕рд▓реЗ рдПрдХ рдЕрд╡рд╕реНрдерд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рдЬрд╣рд╛рдБ рдЯрд╛рдврд╛рдХреЛ рд╢рд╛рдЦрд╛ master рд╣рд╛рдореАрд▓реЗ рд╢рд╛рдЦрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЧрд░реЗрдХреЛ рднрдиреНрджрд╛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рдЫ featureред рдпрд╕ рдХрд╛рд░рдгрд▓реЗ рд╣рд╛рдореА рдХреЗрд╡рд▓ рд╣реЗрдб рд░рд┐рд╡рд╛рдЗрдиреНрдб рдЧрд░реНрди рд╕рдХреНрджреИрдиреМрдВ master рдереНрд░реЗрдбрдХреЛ рдЕрдиреНрддреНрдпрд╕рдореНрдо featureред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ рдпрд╛ рдд рдорд░реНрдЬ рд╡рд╛ рдХрдорд┐рдЯрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ feature рд░рд┐рдмреЗрд╕ masterред GitHub рд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдорд░реНрдЬрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдХреНрдЫ рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╡рд┐рд╡рд╛рдж рдЫреИрдиред рдЕрдлрд╕реЛрд╕, рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рджреБрд╡реИ рд╢рд╛рдЦрд╛рд╣рд░реВрд▓реЗ рдлрд╛рдЗрд▓рдорд╛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЫрдиреН ci.mdред рдпреЛ рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рдорд░реНрдЬ рджреНрд╡рдиреНрджреНрд╡рдХреЛ рд░реВрдкрдорд╛ рдЪрд┐рдирд┐рдиреНрдЫ, рд░ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдорд░реНрдЬ рд╡рд╛ рд░рд┐рдмреЗрд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдорд░реНрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реН

  • рдердк рдорд░реНрдЬ рдХрдорд┐рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рд░ рдХрд╛рд░реНрдп рдЗрддрд┐рд╣рд╛рд╕ рдмрдЪрдд рдЧрд░реНрджрдЫред
    • рддрд┐рдиреАрд╣рд░реВрдХреЛ рдореМрд▓рд┐рдХ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рд░ рд▓реЗрдЦрдХрд╣рд░реВрд╕рдБрдЧ рдореМрд▓рд┐рдХ рд╢рд╛рдЦрд╛ рдХрдорд┐рдЯрд╣рд░реВ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрджрдЫред
    • рдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреБрд░реЛрдз рдЫрд▓рдлрд▓рд╣рд░реВрдорд╛ рдХрдорд┐рдЯрд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд▓рд┐рдЩреНрдХрд╣рд░реВрдХреЛ SHA рдмрдЪрдд рдЧрд░реНрджрдЫред
  • рдПрдХ рдкрдЯрдХ рд╡рд┐рд╡рд╛рдж рд╕рдорд╛рдзрд╛рди рдЖрд╡рд╢реНрдпрдХ рдЫред
  • рдХрдерд╛рд▓рд╛рдИ рдирдирд▓рд╛рдЗрдирд░ рдмрдирд╛рдЙрдБрдЫред
    • рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╢рд╛рдЦрд╛рд╣рд░реВ (рдЖрдИрдбреАрдИ рдХреЗрдмрд▓рдХреЛ рд╕рдореНрдЭрдирд╛ рджрд┐рд▓рд╛рдЙрдиреЗ) рдХреЛ рдХрд╛рд░рдгрд▓реЗ рдХрдерд╛ рдкрдвреНрди рдЧрд╛рд╣реНрд░реЛ рд╣реБрди рд╕рдХреНрдЫред
    • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд┐рдмрдЧрд┐рдЩрд▓рд╛рдИ рдЕрдЭ рдЧрд╛рд╣реНрд░реЛ рдмрдирд╛рдЙрдБрдЫ, рдЬрд╕реНрддреИ git bisect рдХрдо рдЙрдкрдпреЛрдЧреА - рдпрд╕рд▓реЗ рдорд░реНрдЬ рдХрдорд┐рдЯ рдорд╛рддреНрд░ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреЗрдЫред

рд░рд┐рдмреЗрд╕

  • рдПрдХ рдкрдЫрд┐ рдЕрд░реНрдХреЛ рдЖрдзрд╛рд░ рд╢рд╛рдЦрд╛рдХреЛ рд╢реАрд░реНрд╖рдорд╛ рд╣рд╛рд▓рдХреЛ рд╢рд╛рдЦрд╛рдмрд╛рдЯ рд░рд┐рдкреНрд▓реЗ рдХрдорд┐рдЯрд╣рд░реВред
    • рдирдпрд╛рдБ SHA рд╕рдБрдЧ рдирдпрд╛рдБ рдХрдорд┐рдЯрд╣рд░реВ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫрдиреН, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ GitHub рдорд╛ рдЧрд░рд┐рдПрдХрд╛ рдХрдорд┐рдЯрд╣рд░реВ рдореВрд▓ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВрд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ, рддрд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ рд╣реЛрдЗрдиред
    • рдХрдорд┐рдЯрд╣рд░реВ рдкреБрди: рд╕рдВрдпреЛрдЬрд┐рдд рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рд╡рд╛ рдПрдХрдорд╛ рдорд░реНрдЬ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
  • рдзреЗрд░реИ рд╡рд┐рд╡рд╛рджрд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрди рд╕рдХреНрдЫред
  • рддрдкрд╛рдИрдВрд▓рд╛рдИ рд░реИрдЦрд┐рдХ рдХрдерд╛ рдХрд╛рдпрдо рд░рд╛рдЦреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
    • рдХреБрдиреИ рддрд░реНрдХрд╕рдВрдЧрдд рдХрд╛рд░рдгрд▓реЗ рдзреЗрд░реИ рд▓рд╛рдореЛ рдирднрдПрд╕рдореНрдо рдХрдерд╛ рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрди рд╕рдХреНрдЫред
    • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд┐рдмрдЧрд┐рдЩ рд░ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдереЛрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫ: рдпрд╕рд▓рд╛рдИ рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫ git bisect, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реЛрд▓рдмреНрдпрд╛рдХрд╣рд░реВ рд╕реНрдкрд╖реНрдЯ рд░ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рдмрдирд╛рдЙрди рд╕рдХреНрдЫред
  • рдЭрдгреНрдбрд╛ рд╕рд╣рд┐рдд рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрдорд┐рдЯрд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рд╢рд╛рдЦрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ --force рдЬрдм рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдВрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдЯреЛрд▓реАрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдорд░реНрдЬ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдБрджрд╛ рд╕рдзреИрдВ рд╕рдорд╛рди рд░рдгрдиреАрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рд╣рдордд рд╣реБрдиреНрдЫрдиреНред рдпреЛ рдПрдХ "рд╢реБрджреНрдз" рдорд░реНрдЬ рд╡рд╛ рд╢реАрд░реНрд╖рдорд╛ "рд╢реБрджреНрдз" рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛, рд╡рд╛ рдмреАрдЪрдорд╛ рдХреЗрд╣рд┐ рд╣реБрди рд╕рдХреНрдЫ, рдЬрд╕реНрддреИ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдкрдорд╛ рд╢реАрд░реНрд╖рдорд╛ рдХрдорд┐рдЯ рдЧрд░реНрдиреЗ (git rebase -i) рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрдгреНрдбрд╛рд░рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирднрдПрдХрд╛ рд╢рд╛рдЦрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рддрд░ "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рд╢рд╛рдЦрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд░реНрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдпрд╣рд╛рдБ рд╣рд╛рдореА рдорд░реНрдЬ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред

я╕ПрдХрд╛рд░реНрдп

  1. рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдХреЛрдб рд╕реНрдерд╛рдиреАрдп рд╢рд╛рдЦрд╛рдорд╛ рдЫ master рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдмрд╛рдЯ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдпреЛред
  2. рд╢рд╛рдЦрд╛рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН feature.
  3. рд╢рд╛рдЦрд╛ рд╕рдВрдЧ рдорд░реНрдЬ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрдиреБрд╣реЛрд╕реН masterред рдорд╛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛ рдорд░реНрдЬ рд╡рд┐рд╡рд╛рдж ci.md.
  4. рджреНрд╡рдиреНрджреНрд╡ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН рддрд╛рдХрд┐ рд╣рд╛рдореНрд░реЛ CI рдЪрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд░ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдиреЛрдЯ рдкрд╛рдардорд╛ рд░рд╣рдиреНрдЫред
  5. рдЯрд╛рдврд╛рдХреЛ рд╢рд╛рдЦрд╛рдорд╛ рдорд░реНрдЬ рдХрдорд┐рдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН feature.
  6. GitHub UI рдорд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрдХреЛ рд╕реНрдерд┐рддрд┐ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдорд░реНрдЬ рд╕рдорд╛рдзрд╛рди рдирднрдПрд╕рдореНрдо рдкрд░реНрдЦрдиреБрд╣реЛрд╕реНред

╨Ъ╨╛╨╝╨░╨╜╨┤╤Л

# ╨г╨▒╨╡╨┤╨╕╤В╨╡╤Б╤М, ╤З╤В╨╛ ╨║╨╛╨┤ ╨▓ ╨╗╨╛╨║╨░╨╗╤М╨╜╨╛╨╡ ╨▓╨╡╤В╨║╨╡ `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.

я╕П рдХрд╛рд░реНрдп: рд╕реНрд╡реАрдХреГрдд рдкреБрд▓ рдЕрдиреБрд░реЛрдз "рдЪрд░рдг рд╕рдореАрдХреНрд╖рд╛"

  1. рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реНред
  2. "рдорд░реНрдЬ рдкреБрд▓ рдЕрдиреБрд░реЛрдз" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. "рдорд░реНрдЬ рдкреБрд╖реНрдЯрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  4. "рд╢рд╛рдЦрд╛ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐рдирдХрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдм рдпрд╕рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫреИрдиред

рдпреЛ рдЕрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рднрдгреНрдбрд╛рд░ рд╣реЛ
рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

рдЙрддреНрдкрд╛рджрди рддреНрд░реБрдЯрд┐

рдпреЛ рднрдирд┐рдиреНрдЫ рдХрд┐ "рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рджреЗрдЦрд╛рдЙрди рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╣рд┐рд▓реНрдпреИ рджреЗрдЦрд╛рдЙрдиред" рдпрджреНрдпрдкрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдерд┐рдП рд░ рдЙрдиреАрд╣рд░реВрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдХреБрдиреИ рддреНрд░реБрдЯрд┐рд╣рд░реВ рджреЗрдЦрд╛рдПрдирдиреН, рдПрдХ рдХрдкрдЯреА рдмрдЧ рдЙрддреНрдкрд╛рджрдирдорд╛ рдЖрдпреЛред

рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ рдЦреНрдпрд╛рд▓ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

  • рдХреЗ рдЙрддреНрдкрд╛рджрди рдорд╛ рддреИрдирд╛рдд рдЫ;
  • рдереНрд░реЗрдб рдорд╛ рдХреЛрдб master рдПрдЙрдЯрд╛ рддреНрд░реБрдЯрд┐рдХреЛ рд╕рд╛рде, рдЬрд╕рдмрд╛рдЯ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдирдпрд╛рдБ рдХрд╛рдо рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред

рдХреЗ рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЕрд░реНрдХреЛ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗ рд╡рд╛ рдпрд╕рд▓рд╛рдИ рдареАрдХ рдЧрд░реНрдиреЗ?

рд░реЛрд▓рд┐рдЩ рдмреНрдпрд╛рдХ рднрдиреЗрдХреЛ рдЬреНрдЮрд╛рдд рд░рд╛рдореНрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдгрд▓рд╛рдИ рдЙрддреНрдкрд╛рджрдирдорд╛ рдбрд┐рдкреНрд▓реЛрдЗ рдЧрд░реНрдиреЗ рд░ рддреНрд░реБрдЯрд┐ рднрдПрдХреЛ рдХрдорд┐рдЯрд╣рд░реВрд▓рд╛рдИ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛред "рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдлрд░реНрд╡рд╛рд░реНрдб" рдорд╛ рдлрд┐рдХреНрд╕рдХреЛ рдердк рд╣реЛ master рд░ рд╕рдХреЗрд╕рдореНрдо рдЪрд╛рдБрдбреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рддреИрдирд╛рдд рдЧрд░реНрджреИред рдХрд┐рдирдХреА API рд╣рд░реВ рд░ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛рд╣рд░реВ рдХреЛрдб рдЙрддреНрдкрд╛рджрдирдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдкрдЫрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫрдиреН, рдирд┐рд░рдиреНрддрд░ рдбреЗрд▓рд┐рднрд░реА рд░ рд░рд╛рдореНрд░реЛ рдкрд░реАрдХреНрд╖рдг рдХрднрд░реЗрдЬрдХреЛ рд╕рд╛рде, рд░реЛрд▓ рдмреНрдпрд╛рдХ рдЧрд░реНрдиреБ рдЕрд░реНрдХреЛ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдлрд┐рдХреНрд╕ рдЧрд░реНрдиреБ рднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рд░ рдЬреЛрдЦрд┐рдордкреВрд░реНрдг рд╣реБрдиреНрдЫред

рдХрд┐рдирдХреА рд░реЛрд▓ рдмреНрдпрд╛рдХ рдЧрд░реНрджрд╛ рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛рдорд╛ рдХреБрдиреИ рдЬреЛрдЦрд┐рдо рдЫреИрди, рд╣рд╛рдореА рдпреЛ рдмрд╛рдЯреЛ рдЬрд╛рдиреЗрдЫреМрдВ, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ

  • рд╕рдХреЗрд╕рдореНрдо рдЪрд╛рдБрдбреЛ рдЙрддреНрдкрд╛рджрди рдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдорд╛рдзрд╛рди;
  • рдХреЛрдб рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН master рдирдпрд╛рдБ рдХрд╛рдо рд╕реБрд░реБ рдЧрд░реНрди рддреБрд░реБрдиреНрддреИ рдЙрдкрдпреБрдХреНрддред

я╕ПрдХрд╛рд░реНрдп

  1. рд╢рд╛рдЦрд╛рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН master рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ред
  2. рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдмрд╛рдЯ рд╕реНрдерд╛рдиреАрдп рднрдгреНрдбрд╛рд░ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. PR рдорд░реНрдЬ рдХрдорд┐рдЯ рдЙрд▓реНрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН рдЪрд░рдг рд╕рдореАрдХреНрд╖рд╛ ╨▓ master.
  4. рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдпреЛ рдорд░реНрдЬ рдХрдорд┐рдЯ рд░рд┐рднрд░реНрдЯ рдЧрд░рд┐рдПрдХреЛ рднрдгреНрдбрд╛рд░рдХреЛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реЛ
рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

╨Ъ╨╛╨╝╨░╨╜╨┤╤Л

# ╨Я╨╡╤А╨╡╨║╨╗╤О╤З╨╕╤В╨╡╤Б╤М ╨╜╨░ ╨▓╨╡╤В╨║╤Г master.
git checkout master

# ╨Ю╨▒╨╜╨╛╨▓╨╕╤В╨╡ ╨╗╨╛╨║╨░╨╗╤М╨╜╤Л╨╣ ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╨╣ ╨╕╨╖ ╤Г╨┤╨░╨╗╤С╨╜╨╜╨╛╨│╨╛ ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╤П.
git pull

# ╨Ю╤В╨╝╨╡╨╜╨╕╤В╨╡ ╨║╨╛╨╝╨╝╨╕╤В ╤Б╨╗╨╕╤П╨╜╨╕╤П PR Steps review ╨▓ master.
# ╨Ь╤Л ╨╛╤В╨╝╨╡╨╜╤П╨╡╨╝ ╨║╨╛╨╝╨╝╨╕╤В ╤Б╨╗╨╕╤П╨╜╨╕╤П, ╨┐╨╛╤Н╤В╨╛╨╝╤Г ╨╜╨░╨╝ ╨╜╤Г╨╢╨╜╨╛ ╨▓╤Л╨▒╤А╨░╤В╤М ╨▓╨╡╤В╨║╤Г ╨╕╤Б╤В╨╛╤А╨╕╨╕, ╨║╨╛╤В╨╛╤А╤Г╤О ╨╝╤Л ╨╖╨░╤Е╨╛╤В╨╕╨╝ ╨╛╤Б╤В╨░╨▓╨╕╤В╤М
git show HEAD

# ╨┐╤А╨╡╨┤╨┐╨╛╨╗╨╛╨╢╨╕╨╝, ╤З╤В╨╛ ╨║╨╛╨╝╨╝╨╕╤В, ╨║╨╛╤В╨╛╤А╤Л╨╣ ╨▒╤Л╨╗ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╝ ╨▓ ╨▓╨╡╤В╨║╨╡ master ╨┤╨╛ ╤Б╨╗╨╕╤П╨╜╨╕╤П, ╨▒╤Л╨╗ ╨╛╤В╨╛╨▒╤А╨░╨╢╤С╨╜ ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╡╨╣ ╨║╨╛╨╝╨░╨╜╨┤╨╛╨╣ ╨┐╨╡╤А╨▓╤Л╨╝
git revert HEAD -m 1
# ╨╝╨╛╨╢╨╡╤В╨╡ ╨╜╨╡ ╨╝╨╡╨╜╤П╤В╤М ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╤П ╨║╨╛╨╝╨╝╨╕╤В╨╛╨▓

# ╨Ю╨┐╤Г╨▒╨╗╨╕╨║╤Г╨╣╤В╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П ╨▓ ╤Г╨┤╨░╨╗╤С╨╜╨╜╤Л╨╣ ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╨╣
git push

я╕П рдЖрддреНрдо-рдкрд░реАрдХреНрд╖рдг

рддреНрдпреЛ рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░ ci.md рдорд░реНрдЬ рдХрдорд┐рдЯ рдЙрд▓реНрдЯрд╛рдПрдкрдЫрд┐ рдЕрдм "рд╕реНрдиреАрдХреА рдмрдЧ" рдкрд╛рда рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрдиред

CI рдЪрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдареАрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдорд╛рд╕реНрдЯрд░рдорд╛ рдлрд░реНрдХрд╛рдЙрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореАрд▓реЗ рд╢рд╛рдЦрд╛рдХреЛ рдорд░реНрдЬрд░ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЙрд▓реНрдЯреНрдпреМрдВред featureред рд╢реБрдн рд╕рдорд╛рдЪрд╛рд░ рдпреЛ рд╣реЛ рдХрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рдЕрдм рдХреБрдиреИ рддреНрд░реБрдЯрд┐ рдЫреИрди masterред рдирд░рд╛рдореНрд░реЛ рдЦрдмрд░ рдпреЛ рд╣реЛ рдХрд┐ рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг рдЪрд░рдгрд╣рд░реВрдХреЛ рд╣рд╛рдореНрд░реЛ рдмрд╣реБрдореВрд▓реНрдп рд╕реВрдЪреА рдкрдирд┐ рдЧрдпреЛред рддреНрдпрд╕реЛрднрдП, рдЖрджрд░реНрд╢ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдХрдорд┐рдЯрд╣рд░реВрдорд╛ рдлрд┐рдХреНрд╕ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ feature рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН master рд╕рдорд╛рдзрд╛рди рд╕рдВрдЧреИред

рд╣рд╛рдореА рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рдорд╛ рд╣реЗрд░реНрди рд╕рдХреНрдЫреМрдВ:

  • рдорд░реНрдЬрд▓рд╛рдИ рдкреВрд░реНрд╡рд╡рдд рдЧрд░реНрдиреЗ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рд▓рд╛рдИ рдЙрд▓реНрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН feature ╤Б master;
  • рдЕрдШрд┐рд▓реНрд▓реЛрдмрд╛рдЯ рдХрдорд┐рдЯрд╣рд░реВ рд╕рд╛рд░реНрдиреБрд╣реЛрд╕реН feature.

рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реАрд╣рд░реВрд▓реЗ рдпрд╕ рдорд╛рдорд▓рд╛рдорд╛ рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреН, рддрд░ рд╣рд╛рдореА рдЙрдкрдпреЛрдЧреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рд╢рд╛рдЦрд╛рдорд╛ рд╕рд╛рд░реНрдиреЗрдЫреМрдВ рд░ рдпреЛ рдирдпрд╛рдБ рд╢рд╛рдЦрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред

я╕ПрдХрд╛рд░реНрдп

  1. рдирд╛рдордХ рдереНрд░реЗрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН feature-fix рд░ рдпрд╕рд▓рд╛рдИ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  2. рдкрд╣рд┐рд▓реЗрдХреЛ рд╢рд╛рдЦрд╛рдмрд╛рдЯ рд╕рдмреИ рдХрдорд┐рдЯрд╣рд░реВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН feature рдирдпрд╛рдБ рдереНрд░реЗрдбрдорд╛ред рдорд╛рдЗрдЧреНрд░реЗрд╕рдирдХреЛ рд╕рдордпрдорд╛ рднрдПрдХреЛ рдорд░реНрдЬ рд╡рд┐рд╡рд╛рджрд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реНред

    рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

  3. рдорд╛ рд░рд┐рдЧреНрд░реЗрд╕рди рдкрд░реАрдХреНрд╖рдг рдердкреНрдиреБрд╣реЛрд╕реН ci.test.js:

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

  4. рддрд┐рдиреАрд╣рд░реВ рдЕрд╕рдлрд▓ рдирд╣реБрдиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реНред
  5. рднрд┐рддреНрд░ "рдПрдХ рдбрд░рд▓рд╛рдЧреНрджреЛ рдмрдЧ рд╕рдВрдЧ" рдкрд╛рда рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реН ci.md.
  6. рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдорд╛ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд░ рдЪрд░рдг рд╕реВрдЪреА рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдердкреНрдиреБрд╣реЛрд╕реН рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддрд┐рдмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  7. рд╢рд╛рдЦрд╛рд▓рд╛рдИ рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд╕рдБрдЧ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдХреБрд░рд╛рдХреЛ рд╕рд╛рде рдЕрдиреНрддреНрдп рдЧрд░реНрдиреБрдкрд░реНрдЫ:
рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

╨Ъ╨╛╨╝╨░╨╜╨┤╤Л

# ╨б╨╛╨╖╨┤╨░╨╣╤В╨╡ ╨▓╨╡╤В╨║╤Г ╨┐╨╛╨┤ ╨╜╨░╨╖╨▓╨░╨╜╨╕╨╡╨╝ feature-fix ╨╕ ╨┐╨╡╤А╨╡╨║╨╗╤О╤З╨╕╤В╨╡╤Б╤М ╨╜╨░ ╨╜╨╡╨╡.
git checkout -b feature-fix

# ╨Я╨╡╤А╨╡╨╜╨╡╤Б╨╕╤В╨╡ ╨▓╤Б╨╡ ╨║╨╛╨╝╨╝╨╕╤В╤Л ╨╕╨╖ ╨▒╤Л╨▓╤И╨╡╨╣ ╨▓╨╡╤В╨║╨╕ feature ╨▓ ╨╜╨╛╨▓╤Г╤О ╨▓╨╡╤В╨║╤Г. ╨а╨░╨╖╤А╨╡╤И╨╕╤В╨╡ ╨║╨╛╨╜╤Д╨╗╨╕╨║╤В╤Л ╤Б╨╗╨╕╤П╨╜╨╕╤П, ╨║╨╛╤В╨╛╤А╤Л╨╡ ╨▓╨╛╨╖╨╜╨╕╨║╨╗╨╕ ╨┐╤А╨╕ ╨┐╨╡╤А╨╡╨╜╨╛╤Б╨╡.
# ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╣╤В╨╡ ╨╕╤Б╤В╨╛╤А╨╕╤О ╤З╤В╨╛╨▒╤Л ╤Г╨╖╨╜╨░╤В╤М ╤Е╤Н╤И╨╕ ╨║╨╛╨╝╨╝╨╕╤В╨╛╨▓:
# - ╨┐╤А╨╡╨┤╤И╨╡╤Б╤В╨▓╤Г╤О╤Й╨╡╨│╨╛ ╨║╨╛╨╝╨╝╨╕╤В╤Г ╤Б ╨┐╨╡╤А╨▓╨╛╨╣ ╤З╨░╤Б╤В╤М╤О ╤Б╨┐╨╕╤Б╨║╨░: C0
# - ╨┤╨╛╨▒╨░╨▓╨╗╤П╤О╤Й╨╡╨│╨╛ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╤Н╨╗╨╡╨╝╨╡╨╜╤В╤Л ╤Б╨┐╨╕╤Б╨║╨░: C2
git log --oneline --graph
git cherry-pick C0..C2
# ╤А╨░╨╖╤А╨╡╤И╨╕╤В╨╡ ╨║╨╛╨╜╤Д╨╗╨╕╨║╤В╤Л ╤Б╨╗╨╕╤П╨╜╨╕╤П
# - ╨╛╤В╤А╨╡╨┤╨░╨║╤В╨╕╤А╤Г╨╣╤В╨╡ ci.md ╨╕/╨╕╨╗╨╕ ci.test.js
# - ╨┤╨╛╨▒╨░╨▓╤М╤В╨╡ ╤Д╨░╨╣╨╗╤Л ╨▓ ╨╕╨╜╨┤╨╡╨║╤Б
# - ╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╨╡ "git cherry-pick --continue", ╨╝╨╛╨╢╨╡╤В╨╡ ╨╜╨╡ ╨╝╨╡╨╜╤П╤В╤М ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╨╡ ╨║╨╛╨╝╨╝╨╕╤В╨░

# ╨Ф╨╛╨▒╨░╨▓╤М╤В╨╡ ╤А╨╡╨│╤А╨╡╤Б╤Б╨╕╨╛╨╜╨╜╤Л╨╣ ╤В╨╡╤Б╤В ╨▓ ci.test.js
# ╨Ч╨░╨┐╤Г╤Б╤В╨╕╤В╨╡ ╤В╨╡╤Б╤В╤Л ╨╗╨╛╨║╨░╨╗╤М╨╜╨╛, ╤З╤В╨╛╨▒╤Л ╤Г╨▒╨╡╨┤╨╕╤В╤М╤Б╤П, ╤З╤В╨╛ ╨╛╨╜╨╕ ╨╜╨╡ ╨╖╨░╨▓╨╡╤А╤И╨░╤О╤В╤Б╤П ╤Г╤Б╨┐╨╡╤И╨╜╨╛.

# ╨г╨┤╨░╨╗╨╕╤В╨╡ ╤В╨╡╨║╤Б╤В " with a sneaky bug" ╨▓ ci.md.

# ╨Ф╨╛╨▒╨░╨▓╤М╤В╨╡ ╨▓ ╨╕╨╜╨┤╨╡╨║╤Б ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П ╤В╨╡╤Б╤В╨╛╨▓ ╨╕ ╨▓ ╤Б╨┐╨╕╤Б╨║╨╡ ╤И╨░╨│╨╛╨▓ ╨╕ ╨╖╨░╨║╨╛╨╝╨╝╨╕╤В╤М╤В╨╡ ╨╕╤Е.
git add ci.md ci.test.js
git commit -m "Fix the bug in steps list"

# ╨Ю╨┐╤Г╨▒╨╗╨╕╨║╤Г╨╣╤В╨╡ ╨▓╨╡╤В╨║╤Г ╨▓ ╤Г╨┤╨░╨╗╤С╨╜╨╜╤Л╨╣ ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╨╣.
git push --set-upstream origin feature-fix

рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рд╢реАрд░реНрд╖рдХрдХреЛ рд╕рд╛рде рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕реБрд╡рд┐рдзрд╛ рдлрд┐рдХреНрд╕ рдЧрд░реНрджреИ... рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН feature-fix рдЬрд╕реНрддреИ "рд╣реЗрдб рд╢рд╛рдЦрд╛" рд░ master рдЬрд╕реНрддреИ "рдЖрдзрд╛рд░ рд╢рд╛рдЦрд╛"ред
рдХреГрдкрдпрд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкреВрд░рд╛ рд╣реБрдБрджрд╛ рдкрд░реНрдЦрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдИрдВрд▓реЗ PR рдЫрд▓рдлрд▓рдХреЛ рддрд▓рдорд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫ master рдЖрдлреНрдиреЛ рдорд╛ рднрдгреНрдбрд╛рд░ рдХрд╛рдБрдЯрд╛ "рдЖрдзрд╛рд░ рд╢рд╛рдЦрд╛" рдХреЛ рд░реВрдкрдорд╛, рдо рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рд╛рдордЧреНрд░реА рднрдгреНрдбрд╛рд░рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рдЬрд╡рд╛рдл рджрд┐рдиреЗ рдЫреИрдиред

рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЕрдиреБрдореЛрджрди рдЧрд░реНрдиреБрд╣реЛрд╕реН "рд╕реБрд╡рд┐рдзрд╛ рдлрд┐рдХреНрд╕ рдЧрд░реНрджреИ"

рд╕рдЪреНрдпрд╛рдЙрдиреБ рднрдПрдХреЛрдорд╛ рдзрдиреНрдпрд╡рд╛рдж! рдХреГрдкрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрд▓рд╛рдИ рдЕрдиреБрдореЛрджрди рдЧрд░реНрдиреБрд╣реЛрд╕реН master рдкреБрд▓ рдЕрдиреБрд░реЛрдзрдмрд╛рдЯред

я╕ПрдХрд╛рд░реНрдп

  1. "рдорд░реНрдЬ рдкреБрд▓ рдЕрдиреБрд░реЛрдз" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  2. "рдорд░реНрдЬ рдкреБрд╖реНрдЯрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. "рд╢рд╛рдЦрд╛ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐рдирдХрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдм рдпрд╕рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫреИрдиред

рдпреЛ рд╕рдордп рддрдкрд╛рдИрд╕рдБрдЧ рд╣реБрдиреБ рдкрд░реНрдиреЗ рдХреБрд░рд╛ рд╣реЛред
рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ

рдмрдзрд╛рдИ рдЫ!

рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рдирд┐рд╕рд╣рд░реВрд▓реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдгрдХреЛ рдХреНрд░рдордорд╛ рд▓рд┐рдиреЗ рд╕рдмреИ рдЪрд░рдгрд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рджреЗрдЦреНрдиреБрд╣реБрдиреНрдЫ рд╡рд╛ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдЬрд╛рдиреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдХреГрдкрдпрд╛ рдорд╛ рдПрдХ рдореБрджреНрджрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЧ рднрдгреНрдбрд╛рд░ред рдпреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рдкрдирд┐ рдЫ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд░реВрдкрдорд╛ GitHub рд▓рд░реНрдирд┐рдЩ рд▓реНрдпрд╛рдм рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди