เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชธเชพเชฅเซ‡ เชฒเชพเช•เซเชทเชฃเชฟเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“

เชถเซเช‚ เชคเชฎเซ‡ เช—เชฟเชŸ เช•เชฎเชพเชจเซเชกเซเชธ เชถเซ€เช–เซเชฏเชพ เช›เซ‹ เชชเชฐเช‚เชคเซ เช•เชฒเซเชชเชจเชพ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹ เช•เซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ (CI) เชตเชพเชธเซเชคเชตเชฟเช•เชคเชพเชฎเชพเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡? เช…เชฅเชตเชพ เช•เชฆเชพเชš เชคเชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชฆเซˆเชจเชฟเช• เชชเซเชฐเชตเซƒเชคเซเชคเชฟเช“เชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹? เช† เช•เซ‹เชฐเซเชธ เชคเชฎเชจเซ‡ GitHub เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃเชฎเชพเช‚ เชตเซเชฏเชตเชนเชพเชฐเซ เช•เซŒเชถเชฒเซเชฏ เช†เชชเชถเซ‡. เช† เช•เซ‹เชฐเซเชธเชจเซ‹ เชนเซ‡เชคเซ เชตเชฟเชเชพเชฐเซเชก เชฌเชจเชตเชพเชจเซ‹ เชจเชฅเซ€ เช•เซ‡ เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชคเชฎเซ‡ เชซเช•เซเชค เช•เซเชฒเชฟเช• เช•เชฐเซ€ เชถเช•เซ‹; เชคเซ‡เชจเชพเชฅเซ€ เชตเชฟเชชเชฐเชฟเชค, เชคเชฎเซ‡ เชคเซ‡ เชœ เช•เซเชฐเชฟเชฏเชพเช“ เช•เชฐเชถเซ‹ เชœเซ‡ เชฒเซ‹เช•เซ‹ เช–เชฐเซ‡เช–เชฐ เช•เชพเชฎ เชชเชฐ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡ เชœ เชฐเซ€เชคเซ‡ เชคเซ‡เช“ เช•เชฐเซ‡ เช›เซ‡. เชคเชฎเซ‡ เชธเชพเชฎเซ‡เชฒ เชชเช—เชฒเชพเช‚เช“เชฎเชพเช‚เชฅเซ€ เชชเชธเชพเชฐ เชฅเชถเซ‹ เชคเซ‡เชฎ เชนเซเช‚ เชธเชฟเชฆเซเชงเชพเช‚เชค เชธเชฎเชœเชพเชตเซ€เชถ.

เช†เชชเชฃเซ‡ เชถเซเช‚ เช•เชฐเซ€เช?

เชœเซ‡เชฎ เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เชชเซเชฐเช—เชคเชฟ เช•เชฐเซ€เชถเซเช‚ เชคเซ‡เชฎ, เช…เชฎเซ‡ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชฒเชพเช•เซเชทเชฃเชฟเช• CI เชชเช—เชฒเชพเช‚เช“เชจเซ€ เชธเซ‚เชšเชฟ เชฌเชจเชพเชตเซ€เชถเซเช‚, เชœเซ‡ เช† เชธเซ‚เชšเชฟเชจเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเชพเชจเซ€ เชเช• เชธเชฐเชธ เชฐเซ€เชค เช›เซ‡. เชฌเซ€เชœเชพ เชถเชฌเซเชฆเซ‹เชฎเชพเช‚ เช•เชนเซ€เช เชคเซ‹, เช…เชฎเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชฒเซ‡เชคเซ€ เช•เซเชฐเชฟเชฏเชพเช“เชจเซ€ เชธเซ‚เชšเชฟ เชฌเชจเชพเชตเซ€เชถเซเช‚. เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ CI เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชจเชœเซ€เช• เชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเชพ เชเช• เชธเชฐเชณ เชธเซ‡เชŸเชจเซ‹ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚.

เช† GIF เชฏเซ‹เชœเชจเชพเช•เซ€เชฏ เชฐเซ€เชคเซ‡ เชคเชฎเชพเชฐเชพ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เช•เชฎเชฟเชŸเซเชธเชจเซ‡ เชฌเชคเชพเชตเซ‡ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเชฎเซ‡ เช•เซ‹เชฐเซเชธเชฎเชพเช‚ เช†เช—เชณ เชตเชงเซ‹ เช›เซ‹. เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เช…เชนเซ€เช‚ เช•เช‚เชˆ เชœเชŸเชฟเชฒ เชจเชฅเซ€ เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชธเซŒเชฅเซ€ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡.

เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชธเชพเชฅเซ‡ เชฒเชพเช•เซเชทเชฃเชฟเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“

เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค CI เชฆเซƒเชถเซเชฏเซ‹เชฎเชพเช‚เชฅเซ€ เชชเชธเชพเชฐ เชฅเชถเซ‹:

  • เชฒเช•เซเชทเชฃ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‹;
  • เช—เซเชฃเชตเชคเซเชคเชพ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเซ€ เช…เชฐเชœเซ€;
  • เช…เช—เซเชฐเชคเชพ เช•เชพเชฐเซเชฏเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ;
  • เชถเชพเช–เชพเช“ เชฎเชฐเซเชœ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเช‚เช˜เชฐเซเชทเชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ (เชฎเชฐเซเชœ เชธเช‚เช˜เชฐเซเชท);
  • เชชเซเชฐเซ‹เชกเช•เซเชถเชจ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸเชฎเชพเช‚ เชญเซ‚เชฒ เชฅเชพเชฏ เช›เซ‡.

เชคเชฎเซ‡ เชถเซเช‚ เชถเซ€เช–เชถเซ‹?

เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชชเซเชฐเชถเซเชจเซ‹เชจเชพ เชœเชตเชพเชฌ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชฅ เชนเชถเซ‹:

  • เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ (CI) เชถเซเช‚ เช›เซ‡?
  • CI เชฎเชพเช‚ เช•เชฏเชพ เชชเซเชฐเช•เชพเชฐเชจเชพ เชธเซเชตเชšเชพเชฒเชฟเชค เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เช•เชˆ เช•เซเชฐเชฟเชฏเชพเช“ เชŸเซเชฐเชฟเช—เชฐ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡เชจเชพ เชœเชตเชพเชฌเชฎเชพเช‚?
  • เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“ เชถเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เช•เซเชฏเชพเชฐเซ‡ เชœเชฐเซ‚เชฐ เช›เซ‡?
  • เชŸเซ‡เชธเซเชŸ เชกเซเชฐเชฟเชตเชจ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ (TDD) เชถเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ CI เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡?
  • เชถเซเช‚ เชฎเชพเชฐเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชฎเชฐเซเชœ เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช เช…เชฅเชตเชพ เชฐเซ€เชฌเซ‡เช เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช?
  • เชฐเซ‹เชฒ เชฌเซ‡เช• เช•เชฐเซ€เช เช•เซ‡ เชชเช›เซ€เชจเชพ เชตเชฐเซเชเชจเชฎเชพเช‚ เช เซ€เช• เช•เชฐเซ€เช?

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชฎเซ‡เช‚ เชฆเชฐเซ‡เช• เชœเช—เซเชฏเชพเช "เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“" เชœเซ‡เชตเซ€ เชตเชธเซเชคเซเช“เชจเซ‹ เช…เชจเซเชตเชพเชฆ เช•เชฐเซเชฏเซ‹, เชชเชฐเช‚เชคเซ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เชฎเซ‡เช‚ เชŸเซ‡เช•เซเชธเซเชŸเชฎเชพเช‚ เช—เชพเช‚เชกเชชเชฃเชจเซ€ เชกเชฟเช—เซเชฐเซ€ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชœเช—เซเชฏเชพเช เช…เช‚เช—เซเชฐเซ‡เชœเซ€เชฎเชพเช‚ เชถเชฌเซเชฆเชธเชฎเซ‚เชนเซ‹ เชชเชฐเชค เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚. เชนเซเช‚ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เช…เชฆเซเชญเซเชค เช•เซเชฐเชฟเชฏเชพเชชเชฆ "เช•เชฎเชฟเชŸ" เชจเซ€ เชœเซ‡เชฎ "เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐ เชธเชฐเซเชเชฟเช•" เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถ เชœเซเชฏเชพเช‚ เชฒเซ‹เช•เซ‹ เช–เชฐเซ‡เช–เชฐ เช•เชพเชฎ เชชเชฐ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.

เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชถเซเช‚ เช›เซ‡?

เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ, เช…เชฅเชตเชพ CI, เชเช• เชคเช•เชจเซ€เช•เซ€ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชฆเชฐเซ‡เช• เชŸเซ€เชฎเชจเชพ เชธเชญเซเชฏ เชคเซ‡เชฎเชจเชพ เช•เซ‹เชกเชจเซ‡ เชฆเชฟเชตเชธเชฎเชพเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชเช• เชตเช–เชค เชเช• เชธเชพเชฎเชพเชจเซเชฏ เชญเช‚เชกเชพเชฐเชฎเชพเช‚ เชเช•เซ€เช•เซƒเชค เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เช•เซ‹เชก เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ‹ เชญเซ‚เชฒเซ‹ เชตเชฟเชจเชพ เชฌเชพเช‚เชงเชตเซ‹ เชœเซ‹เชˆเช.

เช† เชถเชฌเซเชฆ เชตเชฟเชถเซ‡ เชฎเชคเชญเซ‡เชฆเซ‹ เช›เซ‡

เชตเชฟเชตเชพเชฆเชจเซ‹ เชฎเซเชฆเซเชฆเซ‹ เช เชเช•เซ€เช•เชฐเชฃเชจเซ€ เช†เชตเชฐเซเชคเชจ เช›เซ‡. เช•เซ‡เชŸเชฒเชพเช• เชเชตเซ€ เชฆเชฒเซ€เชฒ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชฆเชฟเชตเชธเชฎเชพเช‚ เชฎเชพเชคเซเชฐ เชเช• เชœ เชตเชพเชฐ เช•เซ‹เชก เชฎเชฐเซเชœ เช•เชฐเชตเซ‹ เช เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เชธเชคเชค เชเช•เซ€เช•เซƒเชค เชฅเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เชจเชฅเซ€. เชเช• เชŸเซ€เชฎเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟ เชธเชตเชพเชฐเซ‡ เชคเชพเชœเซ‹ เช•เซ‹เชก เชฒเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชพเช‚เชœเซ‡ เชเช•เชตเชพเชฐ เชคเซ‡เชจเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเซ‡ เช›เซ‡. เช† เชตเชพเชœเชฌเซ€ เชตเชพเช‚เชงเซ‹ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชเชตเซเช‚ เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เชฆเชฟเชตเชธเชฎเชพเช‚ เชเช•เชตเชพเชฐเชจเซ€ เชตเซเชฏเชพเช–เซเชฏเชพ เชตเซเชฏเชพเชœเชฌเซ€ เชฐเซ€เชคเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ, เชตเชฟเชถเชฟเชทเซเชŸ เช…เชจเซ‡ เชตเชฟเชตเชฟเชง เช•เชฆเชจเซ€ เชŸเซ€เชฎเซ‹ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เช›เซ‡.

เชฌเซ€เชœเซ‹ เชตเชพเช‚เชงเซ‹ เช เช›เซ‡ เช•เซ‡ C++ เช เชนเชตเซ‡ เชตเชฟเช•เชพเชธเชฎเชพเช‚ เชตเชชเชฐเชพเชคเซ€ เชเช•เชฎเชพเชคเซเชฐ เชญเชพเชทเชพ เชจเชฅเซ€, เช…เชจเซ‡ เชฎเชพเชจเซเชฏเชคเชพเชจเชพ เชฎเชพเชฐเซเช— เชคเชฐเซ€เช•เซ‡ เชญเซ‚เชฒ-เชฎเซเช•เซเชค เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ€ เช†เชตเชถเซเชฏเช•เชคเชพ เชจเชฌเชณเซ€ เช›เซ‡. เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชธเซ‡เชŸ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชคเชพ เชเช•เชฎ เชชเชฐเซ€เช•เซเชทเชฃเซ‹) เชชเชฃ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชชเซ‚เชฐเซเชฃ เชฅเชตเชพ เชœเซ‹เชˆเช. เช† เช•เซเชทเชฃเซ‡, เชธเชฎเซเชฆเชพเชฏ เช†เชจเซ‡ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชฌเชจเชพเชตเชตเชพ เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡, เช…เชจเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ "เชฌเชฟเชฒเซเชก + เชฏเซเชจเชฟเชŸ เชชเชฐเซ€เช•เซเชทเชฃเซ‹" เช•เชฆเชพเชš เชธเชพเชฎเชพเชจเซเชฏ เชชเซเชฐเชฅเชพ เชฌเชจเซ€ เชœเชถเซ‡, เชœเซ‹ เชคเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชจเชฅเซ€.

เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชฅเซ€ เช…เชฒเช— เชธเชคเชค เชกเชฟเชฒเชฟเชตเชฐเซ€ (เชธเชคเชค เชกเชฟเชฒเชฟเชตเชฐเซ€, เชธเซ€เชกเซ€) เชœเซ‡เชฎเชพเช‚ เชฆเชฐเซ‡เช• เชเช•เซ€เช•เชฐเชฃ เชšเช•เซเชฐ เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชฐเชฟเชฒเซ€เช เช‰เชฎเซ‡เชฆเชตเชพเชฐเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชชเช—เชฒเชพเช‚เช“เชจเซ€ เชธเซ‚เชšเชฟ เชœเซ‡เชจเซ‹ เช…เชฎเซ‡ เชธเชฎเช—เซเชฐ เช…เชญเซเชฏเชพเชธเช•เซเชฐเชฎ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚

  1. เชจเชตเซ€เชจเชคเชฎ เช•เซ‹เชก เช–เซ‡เช‚เชšเซ‹. เชฅเซ€ เชถเชพเช–เชพ เชฌเชจเชพเชตเซ‹ master. เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ เช•เชฐเซ‹.
  2. เชคเชฎเชพเชฐเซ€ เชจเชตเซ€ เชถเชพเช–เชพ เชชเชฐ เช•เชฎเชฟเชŸ เชฌเชจเชพเชตเซ‹. เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเซ‹ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ‹. เชชเชพเชธ? เช†เช—เชฒเชพ เชชเช—เชฒเชพ เชชเชฐ เชœเชพเช“. เชจเชฟเชทเซเชซเชณ? เชญเซ‚เชฒเซ‹ เช…เชฅเชตเชพ เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเซ‡ เช เซ€เช• เช•เชฐเซ‹ เช…เชจเซ‡ เชซเชฐเซ€ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‹.
  3. เชคเชฎเชพเชฐเชพ เชฐเชฟเชฎเซ‹เชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ เช…เชฅเชตเชพ เชฐเชฟเชฎเซ‹เชŸ เชฌเซเชฐเชพเชจเซเชš เชชเชฐ เชฆเชฌเชพเชฃ เช•เชฐเซ‹.
  4. เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เชฌเชจเชพเชตเซ‹. เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ‹, เชšเชฐเซเชšเชพ เชšเชพเชฒเซ เชฐเชนเซ‡ เชคเซ‡เชฎ เชตเชงเซ เช•เชฎเชฟเชŸ เช‰เชฎเซ‡เชฐเซ‹. เชซเซ€เชšเชฐ เชฌเซเชฐเชพเชจเซเชš เชชเชฐ เชŸเซ‡เชธเซเชŸ เชชเชพเชธ เช•เชฐเชพเชตเซ‹.
  5. เชฎเชพเชธเซเชŸเชฐ เชคเชฐเชซเชฅเซ€ เชฎเชฐเซเชœ/เชฐเซ€เชฌเซ‡เชธ เช•เชฎเชฟเชŸ. เชฎเชฐเซเชœ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชชเชพเชธ เช•เชฐเซ‹.
  6. เชธเซเชตเชฟเชงเชพ เชถเชพเช–เชพเชฅเซ€ เช‰เชคเซเชชเชพเชฆเชจ เชธเซเชงเซ€ เชœเชฎเชพเชตเชŸ เช•เชฐเซ‹.
  7. เชœเซ‹ เช…เชฎเซเช• เชธเชฎเชฏเช—เชพเชณเชพ เชฎเชพเชŸเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชฌเชงเซเช‚ เชธเชพเชฐเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชฎเชพเชธเซเชŸเชฐเชฎเชพเช‚ เชฎเชฐเซเชœ เช•เชฐเซ‹.

เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชธเชพเชฅเซ‡ เชฒเชพเช•เซเชทเชฃเชฟเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“

๏ธ เชคเซˆเชฏเชพเชฐเซ€

เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฏเซ‹เช—เซเชฏ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เช›เซ‡

เช† เช•เซ‹เชฐเซเชธ เชฒเซ‡เชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ Node.js ะธ Git เช•เซเชฒเชพเชฏเชจเซเชŸ.

เชคเชฎเซ‡ เช•เซ‹เชˆเชชเชฃ Git เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เชนเซเช‚ เชซเช•เซเชค เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏ เชฎเชพเชŸเซ‡ เช†เชฆเซ‡เชถเซ‹ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ€เชถ.

เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช—เชฟเชŸ เช•เซเชฒเชพเชฏเชจเซเชŸ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเซเช‚ เช›เซ‡ เชœเซ‡ เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡

เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชนเชœเซ เชธเซเชงเซ€ เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเชคเซเช‚ เช—เชฟเชŸ เช•เซเชฒเชพเชฏเช‚เชŸ เชจเชฅเซ€, เชคเซ‹ เชคเชฎเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชธเซ‚เชšเชจเชพเช“ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชนเซ€เช‚.

เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ‹

เชคเชฎเชพเชฐเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชจเช•เชฒ (เชซเซ‹เชฐเซเช•) เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ เช•เซ‹เชฐเซเชธ เชฎเชพเชŸเซ‡ เช•เซ‹เชก เชธเชพเชฅเซ‡ เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ GitHub เชชเชฐ. เชšเชพเชฒเซ‹ เช† เชตเซเชฏเช•เซเชคเชฟเช—เชค เชจเช•เชฒเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเช‚เชฎเชค เชฅเชˆเช เช•เซ‹เชฐเซเชธ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€.

เชฅเชˆ เช—เชฏเซเช‚? เชœเซ‹ เชคเชฎเซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชฌเชฆเชฒเซเชฏเชพ เชจเชฅเซ€, เชคเซ‹ เชคเชฎเชพเชฐเชพ เช•เซ‹เชฐเซเชธ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ continuous-integration-team-scenarios-students, เชคเซ‡ เชคเชฎเชพเชฐเชพ GitHub เชเช•เชพเช‰เชจเซเชŸเชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡ เช…เชจเซ‡ URL เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡

https://github.com/<ะฒะฐัˆะต ะธะผั ะฟะพะปะทะพะฒะฐั‚ะตะปั ะฝะฐ GitHub>/continuous-integration-team-scenarios-students

เชนเซเช‚ เชซเช•เซเชค เช† เชธเชฐเชจเชพเชฎเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€เชถ <URL ั€ะตะฟะพะทะธั‚ะพั€ะธั>.

เชœเซ‡เชตเชพ เช•เซ‹เชฃ เช•เซŒเช‚เชธ <ั‚ัƒั‚> เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เชฅเชถเซ‡ เช•เซ‡ เชคเชฎเชพเชฐเซ‡ เชฏเซ‹เช—เซเชฏ เชฎเซ‚เชฒเซเชฏ เชธเชพเชฅเซ‡ เช†เชตเชพ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเชจเซ‡ เชฌเชฆเชฒเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡.

เชคเซ‡ เชชเชพเช•เซเช‚ เช•เชฐเซ€ เชฒเซ‹ 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. เชซเชพเช‡เชฒเชฎเชพเช‚ เชชเซเชฐเชฅเชฎ 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. เชคเซ‡ เชชเช›เซ€, เชšเชพเชฒเซ‹ เช•เชฎเชฟเชŸ เชชเชฐ เช…เชฎเชพเชฐเชพ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช—เชฟเชŸ เชนเซ‚เช• เช‰เชฎเซ‡เชฐเซ€เช. เชคเซเชฏเชพเช‚ เชเช• เช•เซ‡เชš เช›เซ‡: เช—เชฟเชŸ เชนเซเช•เซเชธเชจเซ‡ เชญเช‚เชกเชพเชฐเชจเซ‹ เชญเชพเช— เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ‹ เชจเชฅเซ€ เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชฌเชพเช•เซ€เชจเซ€ เช•เซ‹เชฐเซเชธ เชธเชพเชฎเช—เซเชฐเซ€ เชธเชพเชฅเซ‡ เช—เชฟเชŸเชนเชฌเชฎเชพเช‚เชฅเซ€ เช•เซเชฒเซ‹เชจ เช•เชฐเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€. เชนเซ‚เช• เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ 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 เชชเชฐ เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚ เชตเชชเชฐเชพเชฏ เช›เซ‡. เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฎเชพเชฐเชพ เชเชกเชตเชพเชจเซเชธ เช•เซ‹เชฐเซเชธเชฎเชพเช‚ เชชเชฃ เชฅเชพเชฏ เช›เซ‡ [เชŸเซ€เชฎ เชตเชฐเซเช• เช…เชจเซ‡ เชธเซ€เช†เชˆ เชตเชฟเชฅ เช—เชฟเชŸ] (http://devops.redpill.solutions/).
  • เชฌเซ€เชœเซ‹ เช…เชญเชฟเช—เชฎ เช เช›เซ‡ เช•เซ‡ เชฎเชพเชคเซเชฐ เชเช• เชฐเชฟเชฎเซ‹เชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชถเชพเช–เชพเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเซ€ master เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชญเช‚เชกเชพเชฐ "เชธเช‚เชฐเช•เซเชทเชฟเชค". เช† เชฆเซƒเชถเซเชฏเชฎเชพเช‚, เชตเซเชฏเช•เซเชคเชฟเช—เชค เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชคเซ‡เชฎเชจเชพ เช•เซ‹เชกเชจเซ‡ เชฐเชฟเชฎเซ‹เชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ€ เชถเชพเช–เชพเช“เชฎเชพเช‚ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹ เช† เช•เซ‹เชกเชจเซ‡ เชœเซ‹เชˆ เชถเช•เซ‡, เชœเซ‹ เชฌเชงเซเช‚ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชนเซ‹เชฏ, เชคเซ‹ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชฎเชฐเซเชœ เช•เชฐเซ‹ master เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€.

เช† เชšเซ‹เช•เซเช•เชธ เช•เซ‹เชฐเซเชธเชฎเชพเช‚, เช…เชฎเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชœเซ‡ เชถเชพเช–เชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เช…เชฎเชพเชฐเซ‹ เช•เซ‹เชก เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ€เช.

๏ธเชŸเชพเชธเซเช•

  • เชคเชฎเชพเชฐเซ€ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชถเชพเช–เชพเชจเชพ เชจเชพเชฎเชจเชพ เชœ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชฆเซ‚เชฐเชธเซเชฅ เชถเชพเช–เชพเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ‹

เช•เซ‹เชฎเซ‡เชกเซ€

git push --set-upstream origin feature

เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เชฌเชจเชพเชตเซ‹

เชถเซ€เชฐเซเชทเช• เชธเชพเชฅเซ‡ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เชฌเชจเชพเชตเซ‹ เชชเช—เชฒเชพเช‚ เชธเชฎเซ€เช•เซเชทเชพ. เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹ feature เชœเซ‡เชฎ เช•เซ‡ "เชนเซ‡เชก เชฌเซเชฐเชพเชจเซเชš" เช…เชจเซ‡ master เชœเซ‡เชฎ เช•เซ‡ "เช†เชงเชพเชฐ เชถเชพเช–เชพ".

เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เชคเชฎเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ master เชคเซ‡เชจเชพ เชฎเชพเช‚ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เชซเซ‹เชฐเซเช• เช•เชฐเซ‹ "เชฌเซ‡เช เชฌเซเชฐเชพเชจเซเชš" เชคเชฐเซ€เช•เซ‡, เชนเซเช‚ เช•เซ‹เชฐเซเชธ เชฎเชŸเชฟเชฐเชฟเชฏเชฒ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เชฎเชพเชŸเซ‡เชจเซ€ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‹ เชœเชตเชพเชฌ เช†เชชเซ€เชถ เชจเชนเซ€เช‚.

GitHub เชญเชพเชทเชพเชฎเชพเช‚, "เช†เชงเชพเชฐ เชถเชพเช–เชพ" เช เชถเชพเช–เชพ เช›เซ‡ เชœเซ‡เชจเชพ เชชเชฐ เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เช†เชงเชพเชฐ เช†เชชเซ‹ เช›เซ‹, เช…เชจเซ‡ "เชนเซ‡เชก เชฌเซเชฐเชพเชจเซเชš" เช เชธเซ‚เชšเชฟเชค เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชงเชฐเชพเชตเชคเซ€ เชถเชพเช–เชพ เช›เซ‡.

เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ‹, เชšเชฐเซเชšเชพ เชšเชพเชฒเซ เชฐเชนเซ‡ เชคเซ‡เชฎ เชจเชตเซ€ เชชเซเชฐเชคเชฟเชฌเชฆเซเชงเชคเชพเช“ เช‰เชฎเซ‡เชฐเซ‹

เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ (PR)

เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ (PR) เช•เซ‹เชกเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช•เชฐเชตเชพเชจเซ€ เชคเซ‡เชฎเชœ เช•เซ‹เชกเชจเซ€ เชธเชฎเซ€เช•เซเชทเชพ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชค เช›เซ‡. เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‡ เชเช•เช‚เชฆเชฐ เช•เซ‹เชกเชฎเชพเช‚ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเชพเชจเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเชจเชพ เชจเชพเชฎ เชชเชฐเชฅเซ€ เชจเชพเชฎ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชตเซเชฏเช•เซเชคเชฟ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชฐเชฟเชฎเซ‹เชŸ เช“เชซเชฟเชถเชฟเชฏเชฒ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เช•เซเชฒเซ‹เชจ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‹เชก เชชเชฐ เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช† เชชเช›เซ€, เชคเซ‡ เช•เซ‹เชกเชจเซ‡ เชคเซ‡เชจเซ€ เช…เช‚เช—เชค เชฐเซ€เชฎเซ‹เชŸ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เชฒเซ‹เช•เซ‹เชจเซ‡ เช‰เชชเชพเชกเชตเชพเชจเซเช‚ เช•เชนเซ‡ เช›เซ‡(เช–เซ‡เช‚เชšเซ‹) เชคเซ‡เชจเซ‹ เช•เซ‹เชก เชคเซ‡เชฎเชจเซ€ เชธเซเชฅเชพเชจเชฟเช• เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชเชฎเชพเช‚ เช›เซ‡, เชœเซเชฏเชพเช‚ เชคเซ‡เช“ เชธเชฎเซ€เช•เซเชทเชพ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเช‚เชญเชตเชคเชƒ เชธเช‚เช•เชฒเชฟเชค เช•เชฐเซ‡ เช›เซ‡(เชฎเชฐเซเชœ เช•เชฐเซ‹) เชคเซ‡เชจเชพ. เช† เช–เซเชฏเชพเชฒ เช…เชจเซเชฏ เชจเชพเชฎเซ‹เชฅเซ€ เชชเชฃ เช“เชณเช–เชพเชฏ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฎเชฐเซเชœ เช•เชฐเชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€.

เชคเชฎเชพเชฐเซ‡ เช–เชฐเซ‡เช–เชฐ GitHub เช…เชฅเชตเชพ เชธเชฎเชพเชจ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเชจเซ€ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เชธเซเชตเชฟเชงเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชŸเซ€เชฎเซ‹ เชธเชพเชฎ-เชธเชพเชฎเซ‡ เชธเช‚เชšเชพเชฐ, เชตเซ‰เช‡เชธ เช•เซ‰เชฒเซเชธ เช…เชฅเชตเชพ เช‡เชฎเซ‡เช‡เชฒ เชธเชนเชฟเชค เชธเช‚เชšเชพเชฐเชจเซ€ เช…เชจเซเชฏ เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชซเซ‹เชฐเชฎ-เชถเซˆเชฒเซ€ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชนเชœเซ เชชเชฃ เช˜เชฃเชพ เช•เชพเชฐเชฃเซ‹ เช›เซ‡. เช…เชนเซ€เช‚ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช• เช›เซ‡:

  • เชšเซ‹เช•เซเช•เชธ เช•เซ‹เชก เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเช‚เชฌเช‚เชงเชฟเชค เชธเช‚เช—เช เชฟเชค เชšเชฐเซเชšเชพเช“;
  • เช‘เชŸเซ‹เชŸเซ‡เชธเซเชŸเชฐเซเชธ เช…เชจเซ‡ เชธเชพเชฅเซ€เชฆเชพเชฐเซ‹ เชฌเช‚เชจเซ‡ เชคเชฐเชซเชฅเซ€ เชตเชฐเซเช•-เช‡เชจ-เชชเซเชฐเซ‹เช—เซเชฐเซ‡เชธ เชชเชฐ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเซเชฅเชณ เชคเชฐเซ€เช•เซ‡;
  • เช•เซ‹เชก เชธเชฎเซ€เช•เซเชทเชพเช“เชจเซเช‚ เช”เชชเชšเชพเชฐเชฟเช•เช•เชฐเชฃ;
  • เชœเซ‡เชฅเซ€ เชชเช›เซ€เชฅเซ€ เชคเชฎเซ‡ เช•เซ‹เชกเชจเชพ เช† เช…เชฅเชตเชพ เชคเซ‡ เชญเชพเช— เชชเชพเช›เชณเชจเชพ เช•เชพเชฐเชฃเซ‹ เช…เชจเซ‡ เชตเชฟเชšเชพเชฐเชฃเชพเช“ เชถเซ‹เชงเซ€ เชถเช•เซ‹.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เช•เซ‹เชˆ เชตเชพเชคเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชจเซ€ เช…เชฅเชตเชพ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เชฌเชจเชพเชตเซ‹ เช›เซ‹. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเซ‹ เชคเชฎเซ‡ เชเชตเซ€ เชธเซเชตเชฟเชงเชพ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‹ เช•เซ‡ เชœเซ‡ เชเช• เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฐเซ€เชคเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เช†เชตเซ€ เชถเช•เซ‡, เชคเซ‹ เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชตเชฟเชšเชพเชฐเซ‹เชจเซ‡ เชถเซ‡เชฐ เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชธเชนเชฏเซ‹เช—เซ€เช“ เชธเชพเชฅเซ‡ เชคเชฎเชพเชฐเซ€ เชฏเซ‹เชœเชจเชพเช“เชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชกเชจเซ€ เชชเซเชฐเชฅเชฎ เชฒเชพเช‡เชจ เชฒเช–เชคเชพ เชชเชนเซ‡เชฒเชพ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹. เชœเซ‹ เช•เชพเชฐเซเชฏ เชธเชฐเชณ เชนเซ‹เชฏ, เชคเซ‹ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เช–เซ‹เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เช‚เชˆเช• เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเซ‹เชฏ, เชชเซเชฐเชคเชฟเชฌเชฆเซเชง เชนเซ‹เชฏ เช…เชจเซ‡ เชšเชฐเซเชšเชพ เช•เชฐเซ€ เชถเช•เชพเชฏ. เช•เซ‡เชŸเชฒเซ€เช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚, เชคเชฎเซ‡ เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเชพ เช•เชพเชฐเชฃเซ‹เชธเชฐ PR เช–เซ‹เชฒเชตเชพ เชฎเชพเช—เซ€ เชถเช•เซ‹ เช›เซ‹: เชธเซเชตเชฏเช‚เชธเช‚เชšเชพเชฒเชฟเชค เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเชตเชพ เช…เชฅเชตเชพ เช•เซ‹เชก เชธเชฎเซ€เช•เซเชทเชพเช“ เชถเชฐเซ‚ เช•เชฐเชตเชพ. เชคเชฎเซ‡ เชœเซ‡ เชชเชฃ เชจเช•เซเช•เซ€ เช•เชฐเซ‹ เช›เซ‹, เชคเชฎเชพเชฐเซ€ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชคเชฎเซ‡ เชœเซ‡เชฎเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช‡เชšเซเช›เซ‹ เช›เซ‹ เชคเซ‡ เชฒเซ‹เช•เซ‹เชจเซ‹ @ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, PR เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡, เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช•เชฐเซ‹ เช›เซ‹.

  • เชธเซ‚เชšเชตเซ‹ เช•เซ‡ เชคเชฎเซ‡ เชถเซเช‚ เชฌเชฆเชฒเชตเชพเชจเซ‹ เชชเซเชฐเชธเซเชคเชพเชต เชฎเซ‚เช•เซเชฏเซ‹ เช›เซ‡ เช…เชจเซ‡ เช•เซเชฏเชพเช‚.
  • เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‹ เชนเซ‡เชคเซ เชธเชฎเชœเชพเชตเชคเซเช‚ เชตเชฐเซเชฃเชจ เชฒเช–เซ‹. เชคเชฎเซ‡ เช‡เชšเซเช›เซ€ เชถเช•เซ‹ เช›เซ‹:
    • เช•เซ‹เชกเชฎเชพเช‚เชฅเซ€ เชธเซเชชเชทเซเชŸ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เช•เซ‹เชˆ เชชเชฃ เช…เช—เชคเซเชฏเชจเซ€ เชตเชธเซเชคเซ เช…เชฅเชตเชพ เชธเช‚เชฆเชฐเซเชญเชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เช•เช‚เชˆเช• เช‰เชฎเซ‡เชฐเซ‹, เชœเซ‡เชฎ เช•เซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค #เชฌเช—เซเชธ เช…เชจเซ‡ เช•เชฎเชฟเชŸ เชจเช‚เชฌเชฐเซเชธ;
    • เชคเชฎเซ‡ เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹ เชคเซ‡ เช•เซ‹เชˆเชชเชฃเชจเซ‡ @เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‹, เช…เชฅเชตเชพ เชคเชฎเซ‡ เชชเช›เซ€เชฅเซ€ เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชคเซ‡เชฎเชจเซ‹ @เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹;
    • เชธเชนเช•เชพเชฐเซเชฏเช•เชฐเซ‹เชจเซ‡ เช•เซ‹เชˆ เชฌเชพเชฌเชคเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชนเซ‹ เช…เชฅเชตเชพ เชšเซ‹เช•เซเช•เชธ เช•เช‚เชˆเช• เชคเชชเชพเชธเซ‹.

เชเช•เชตเชพเชฐ เชคเชฎเซ‡ 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 เชจเซ‡ เชธเชพเชšเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เชฒเชฟเช‚เช• เช•เชฐเซ‡ เช›เซ‡.
  • เชเช•-เชตเช–เชคเชจเชพ เชธเช‚เช˜เชฐเซเชทเชจเชพ เชจเชฟเชฐเชพเช•เชฐเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
  • เชตเชพเชฐเซเชคเชพเชจเซ‡ เชฌเชฟเชจ-เชฐเซ‡เช–เซ€เชฏ เชฌเชจเชพเชตเซ‡ เช›เซ‡.
    • เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชถเชพเช–เชพเช“ (IDE เช•เซ‡เชฌเชฒเชจเซ€ เชฏเชพเชฆ เช…เชชเชพเชตเซ‡ เช›เซ‡)เชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชตเชพเชฐเซเชคเชพ เชตเชพเช‚เชšเชตเซ€ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡.
    • เชธเซเชตเชšเชพเชฒเชฟเชค เชกเซ€เชฌเช—เซ€เช‚เช—เชจเซ‡ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเชพเชตเซ‡ เช›เซ‡, เชฆเชพ.เชค. 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 เช…เชจเซ‡ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซ€ เชตเชนเซ‡เชฒเซ€ เชคเช•เซ‡ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช. เช•เชพเชฐเชฃ เช•เซ‡ APIs เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเซเช•เซ€เชฎเชพ เช•เซ‹เชกเชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชคเซˆเชจเชพเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเชพเช‚ เชฌเชฆเชฒเชพเชฏ เช›เซ‡, เชธเชคเชค เชกเชฟเชฒเชฟเชตเชฐเซ€ เช…เชจเซ‡ เชธเชพเชฐเชพ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชตเชฐเซ‡เชœ เชธเชพเชฅเซ‡, เชฐเซ‹เชฒ เชฌเซ‡เช• เช•เชฐเชตเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช†เช—เชฒเชพ เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เชคเซ‡เชจเซ‡ เช เซ€เช• เช•เชฐเชตเชพ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เช…เชจเซ‡ เชœเซ‹เช–เชฎเซ€ เช›เซ‡.

เช•เชพเชฐเชฃ เช•เซ‡ เชชเชพเช›เชพ เชซเชฐเชตเชพเชฅเซ€ เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช•เซ‹เชˆ เชœเซ‹เช–เชฎ เชจเชฅเซ€, เช…เชฎเซ‡ เช† เชฎเชพเชฐเซเช— เชชเชฐ เชœเชˆเชถเซเช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เช…เชฎเชจเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡

  • เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซ€ เชตเชนเซ‡เชฒเซ€ เชคเช•เซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชชเชฐเชจเซ€ เชญเซ‚เชฒเชจเซ‡ เช เซ€เช• เช•เชฐเซ‹;
  • เชฎเชพเช‚ เช•เซ‹เชก เชฌเชจเชพเชตเซ‹ 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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹