เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจ†เจฎ เจธเจฅเจฟเจคเฉ€เจ†เจ‚

เจ•เฉ€ เจคเฉเจธเฉ€เจ‚ เจ—เจฟเฉฑเจŸ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจธเจฟเฉฑเจ–เฉ€เจ†เจ‚ เจนเจจ เจชเจฐ เจ•เจฒเจชเจจเจพ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ (CI) เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจœเจพเจ‚ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€เจ†เจ‚ เจฐเฉ‹เจœเจผเจพเจจเจพ เจฆเฉ€เจ†เจ‚ เจ—เจคเฉ€เจตเจฟเจงเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹? เจ‡เจน เจ•เฉ‹เจฐเจธ เจคเฉเจนเจพเจจเฉ‚เฉฐ GitHub เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจตเจฟเฉฑเจš เจตเจฟเจนเจพเจฐเจ• เจนเฉเจจเจฐ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเฉ‡เจ—เจพเฅค เจ‡เจน เจ•เฉ‹เจฐเจธ เจ‡เฉฑเจ• เจตเจฟเจœเจผเจพเจฐเจก เจฌเจฃเจจ เจฆเจพ เจ‡เจฐเจพเจฆเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเจฟเจธ เจจเฉ‚เฉฐ เจคเฉเจธเฉ€เจ‚ เจฌเจธ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹; เจ‡เจธเจฆเฉ‡ เจ‰เจฒเจŸ, เจคเฉเจธเฉ€เจ‚ เจ‰เจนเฉ€ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจ•เจฐเฉ‹เจ—เฉ‡ เจœเฉ‹ เจฒเฉ‹เจ• เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ 'เจคเฉ‡ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจ‰เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจœเจฟเจตเฉ‡เจ‚ เจ‰เจน เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจฎเฉˆเจ‚ เจฅเจฟเจŠเจฐเฉ€ เจฆเฉ€ เจตเจฟเจ†เจ–เจฟเจ† เจ•เจฐเจพเจ‚เจ—เจพ เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เจฆเจฎเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เจฆเฉ‡ เจนเฉ‹เฅค

เจธเจพเจจเฉ‚เฉฐ เจ•เฉ€ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ?

เจœเจฟเจตเฉ‡เจ‚ เจ…เจธเฉ€เจ‚ เจคเจฐเฉฑเจ•เฉ€ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจธเฉ€เจ‚ เจนเฉŒเจฒเฉ€-เจนเฉŒเจฒเฉ€ เจ†เจฎ CI เจ•เจฆเจฎเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡, เจœเฉ‹ เจ•เจฟ เจ‡เจธ เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจฏเจพเจฆ เจฐเฉฑเจ–เจฃ เจฆเจพ เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจคเจฐเฉ€เจ•เจพ เจนเฉˆเฅค เจฆเฉ‚เจœเฉ‡ เจธเจผเจฌเจฆเจพเจ‚ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡ เจœเฉ‹ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ CI เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ…เจธเจฒ เจฆเฉ‡ เจจเฉ‡เฉœเฉ‡ เจฒเจฟเจ†เจ‰เจฃ เจฒเจˆ เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจธเฉˆเฉฑเจŸ เจฆเฉ€ เจตเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ‡เจน GIF เจฏเฉ‹เจœเจจเจพเจฌเฉฑเจง เจคเฉŒเจฐ 'เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ•เจฎเจฟเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจ•เฉ‹เจฐเจธ เจตเจฟเฉฑเจš เจ…เฉฑเจ—เฉ‡ เจตเจงเจฆเฉ‡ เจนเฉ‹เฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจตเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ‡เฉฑเจฅเฉ‡ เจ•เฉเจ เจตเฉ€ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ…เจคเฉ‡ เจธเจฟเจฐเจซ เจธเจญ เจคเฉ‹เจ‚ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ.

เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจ†เจฎ เจธเจฅเจฟเจคเฉ€เจ†เจ‚

เจคเฉเจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจฎเจฟเจ†เจฐเฉ€ CI เจฆเฉเจฐเจฟเจธเจผเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เฉ‹เจ—เฉ‡:

  • เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ 'เจคเฉ‡ เจ•เฉฐเจฎ;
  • เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚;
  • เจคเจฐเจœเฉ€เจนเฉ€ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ;
  • เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจ…เจชเจตเจพเจฆ เจฆเจพ เจนเฉฑเจฒ (เจ…เจญเฉ‡เจฆ เจตเจฟเจฐเฉ‹เจง);
  • เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจกเจ•เจธเจผเจจ เจตเจพเจคเจพเจตเจฐเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจคเฉเจธเฉ€เจ‚ เจ•เฉ€ เจธเจฟเฉฑเจ–เฉ‹เจ—เฉ‡?

เจคเฉเจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ‡ เจœเจตเจพเจฌ เจฆเฉ‡เจฃ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจตเฉ‹เจ—เฉ‡:

  • เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ (CI) เจ•เฉ€ เจนเฉˆ?
  • CI เจตเจฟเฉฑเจš เจ•เจฟเจธ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจธเจตเฉˆเจšเจพเจฒเจฟเจค เจŸเฉˆเจธเจŸ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจนเฉœเฉ€เจ†เจ‚ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจฆเฉ‡ เจœเจตเจพเจฌ เจตเจฟเฉฑเจš เจšเจพเจฒเฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ?
  • เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ•เฉ€ เจนเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจ•เจฆเฉ‹เจ‚ เจฒเฉ‹เฉœ เจนเฉˆ?
  • เจŸเฉˆเจธเจŸ เจกเฉเจฐเจพเจˆเจตเจจ เจกเจฟเจตเฉˆเจฒเจชเจฎเฉˆเจ‚เจŸ (TDD) เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน CI เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจนเฉˆ?
  • เจ•เฉ€ เจฎเฉˆเจจเฉ‚เฉฐ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจœเจพเจ‚ เจฐเฉ€เจฌเฉ‡เจธ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ?
  • เจตเจพเจชเจธ เจฐเฉ‹เจฒ เจ•เจฐเฉ‹ เจœเจพเจ‚ เจ…เจ—เจฒเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ เจตเจฟเฉฑเจš เจ เฉ€เจ• เจ•เจฐเฉ‹?

เจชเจนเจฟเจฒเจพเจ‚ เจฎเฉˆเจ‚ เจนเจฐ เจฅเจพเจ‚ "เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚" เจตเจฐเจ—เฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจฆเจพ เจ…เจจเฉเจตเจพเจฆ เจ•เฉ€เจคเจพ, เจชเจฐ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจฎเฉˆเจ‚ เจŸเฉˆเจ•เจธเจŸ เจตเจฟเฉฑเจš เจชเจพเจ—เจฒเจชเจจ เจฆเฉ€ เจกเจฟเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจ˜เจŸเจพเจ‰เจฃ เจฒเจˆ เจ•เฉเจ เจฅเจพเจตเจพเจ‚ 'เจคเฉ‡ เจ…เฉฐเจ—เจฐเฉ‡เจœเจผเฉ€ เจตเจฟเฉฑเจš เจตเจพเจ•เจพเจ‚เจธเจผ เจตเจพเจชเจธ เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพเฅค เจฎเฉˆเจ‚ เจ•เจˆ เจตเจพเจฐ "เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฐ เจธเจฐเจœเจผเจฟเจ•" เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เจพ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจธเจผเจพเจจเจฆเจพเจฐ เจ•เฉเจฐเจฟเจ† "เจ•เจฎเจฟเจŸ" เจœเจฟเฉฑเจฅเฉ‡ เจฒเฉ‹เจ• เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ 'เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจ•เฉ€ เจนเฉˆ?

เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ, เจœเจพเจ‚ CI, เจ‡เฉฑเจ• เจคเจ•เจจเฉ€เจ•เฉ€ เจ…เจญเจฟเจ†เจธ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจŸเฉ€เจฎ เจฎเฉˆเจ‚เจฌเจฐ เจ†เจชเจฃเฉ‡ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ†เจฎ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฆเจฟเจจ เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจตเจพเจฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจจเจคเฉ€เจœเจพ เจ•เฉ‹เจก เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ—เจฒเจคเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจฌเจฃเจพเจ‡เจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจธเจผเจฌเจฆ เจฌเจพเจฐเฉ‡ เจฎเจคเจญเฉ‡เจฆ เจนเจจ

เจตเจฟเจตเจพเจฆ เจฆเจพ เจฌเจฟเฉฐเจฆเฉ‚ เจเจ•เฉ€เจ•เจฐเจฃ เจฆเฉ€ เจฌเจพเจฐเฉฐเจฌเจพเจฐเจคเจพ เจนเฉˆ. เจ•เฉเจ เจฒเฉ‹เจ• เจฆเจฒเฉ€เจฒ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจ เจ•เจฟ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฆเจฟเจจ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจตเจพเจฐ เจฎเจฟเจฒเจพเจ‰เจฃเจพ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจฒเจ—เจพเจคเจพเจฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจพเจซเจผเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เฉฑเจ• เจŸเฉ€เจฎ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจฆเจฟเฉฑเจคเฉ€ เจ—เจˆ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจนเจฐ เจ•เฉ‹เจˆ เจธเจตเฉ‡เจฐเฉ‡ เจคเจพเจœเจผเจพ เจ•เฉ‹เจก เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจผเจพเจฎ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจพเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ‡เจน เจ‡เฉฑเจ• เจตเจพเจœเจฌ เจ‡เจคเจฐเจพเจœเจผ เจนเฉˆ, เจ‡เจน เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจฆเจฟเจจ เจฆเฉ€ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจตเจพเจœเจฌ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเจฟเจนเจพเจฐเจ•, เจ–เจพเจธ เจ…เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจ†เจ•เจพเจฐเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจŸเฉ€เจฎเจพเจ‚ เจฒเจˆ เจขเฉเจ•เจตเฉ€เจ‚ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจ‡เจคเจฐเจพเจœเจผ เจ‡เจน เจนเฉˆ เจ•เจฟ C++ เจนเฉเจฃ เจตเจฟเจ•เจพเจธ เจตเจฟเฉฑเจš เจตเจฐเจคเฉ€ เจœเจพเจฃ เจตเจพเจฒเฉ€ เจ‡เฉฑเจ•เฉ‹ เจ‡เฉฑเจ• เจญเจพเจธเจผเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ…เจคเฉ‡ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฆเฉ‡ เจ‡เฉฑเจ• เจขเฉฐเจ— เจตเจœเฉ‹เจ‚ เจ—เจฒเจคเฉ€-เจฎเฉเจ•เจค เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจ•เจฎเจœเจผเฉ‹เจฐ เจนเฉˆเฅค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ‡ เจ•เฉเจ เจธเฉˆเฉฑเจŸ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉ€เจคเฉ‡ เจ—เจ เจฏเฉ‚เจจเจฟเจŸ เจŸเฉˆเจธเจŸ) เจจเฉ‚เฉฐ เจตเฉ€ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจชเฉ‚เจฐเจพ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจธเจฎเฉ‡เจ‚, เจญเจพเจˆเจšเจพเจฐเจพ เจ‡เจธ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฒเฉ‹เฉœ เจฌเจฃเจพเจ‰เจฃ เจตเฉฑเจฒ เจตเจง เจฐเจฟเจนเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš "เจฌเจฟเจฒเจก + เจฏเฉ‚เจจเจฟเจŸ เจŸเฉˆเจธเจŸ" เจธเฉฐเจญเจต เจคเฉŒเจฐ 'เจคเฉ‡ เจ†เจฎ เจ…เจญเจฟเจ†เจธ เจฌเจฃ เจœเจพเจตเฉ‡เจ—เจพ, เจœเฉ‡เจ•เจฐ เจ‡เจน เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจคเฉ‹เจ‚ เจตเฉฑเจ–เจฐเจพ เจฒเจ—เจพเจคเจพเจฐ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ (เจจเจฟเจฐเฉฐเจคเจฐ เจกเจฟเจฒเจฟเจตเจฐเฉ€, เจธเฉ€เจกเฉ€) เจ‡เจธ เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจเจ•เฉ€เจ•เจฐเจฃ เจšเฉฑเจ•เจฐ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เฉฑเจ• เจฐเฉ€เจฒเฉ€เจœเจผ เจ‰เจฎเฉ€เจฆเจตเจพเจฐ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจ•เจฆเจฎเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจชเฉ‚เจฐเฉ‡ เจ•เฉ‹เจฐเจธ เจฆเฉŒเจฐเจพเจจ เจตเจฐเจคเจพเจ‚เจ—เฉ‡

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

เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจ†เจฎ เจธเจฅเจฟเจคเฉ€เจ†เจ‚

๏ธ เจคเจฟเจ†เจฐเฉ€

เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“ เจ•เจฟ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจธเจนเฉ€ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจนเฉˆ

เจ‡เจธ เจ•เฉ‹เจฐเจธ เจจเฉ‚เฉฐ เจฒเฉˆเจฃ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€ Node.js ะธ เจ—เจฟเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ.

เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ—เจฟเฉฑเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจฎเฉˆเจ‚ เจธเจฟเจฐเจซ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจฒเจˆ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจพเจ‚เจ—เจพเฅค

เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“ เจ•เจฟ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจ—เจฟเฉฑเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฅเจพเจชเจฟเจค เจนเฉˆ เจœเฉ‹ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ

เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ…เจœเฉ‡ เจคเฉฑเจ• เจ•เฉ‹เจˆ 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. เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเฉ‡ 4 เจชเฉœเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจŸเฉˆเจ•เจธเจŸ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹ ci.md.
    1. Pull in the latest code. Create a branch from `master`. Start working.    
    2. Create commits on your new branch. Build and test locally.  
    Pass? Go to the next step. Fail? Fix errors or tests and try again.  
    3. Push to your remote repository or remote branch.  
    4. Create a pull request. Discuss the changes, add more commits  
    as discussion continues. Make tests pass on the feature branch.  

    ะšะพะผะฐะฝะดั‹

# ะšะปะพะฝะธั€ัƒะนั‚ะต ั€ะตะฟะพะทะธั‚ะพั€ะธะน ะบัƒั€ัะฐ
git clone <repository URL>
cd <repository name>

# ะ’ั‹ะฟะพะปะฝะธั‚ะต npm install ะฒ ะบะฐั‚ะฐะปะพะณะต ั€ะตะฟะพะทะธั‚ะพั€ะธั ะบัƒั€ัะฐ; ะพะฝ ัƒัั‚ะฐะฝะพะฒะธั‚ Jest, ะบะพั‚ะพั€ั‹ะน ะผั‹ ะธัะฟะพะปัŒะทัƒะตะผ ะดะปั ะทะฐะฟัƒัะบะฐ ั‚ะตัั‚ะพะฒ.
npm install

# ะกะพะทะดะฐะนั‚ะต ะฒะตั‚ะบัƒ ะธ ะฝะฐะทะพะฒะธั‚ะต ะตะต feature. ะŸะตั€ะตะบะปัŽั‡ะธั‚ะตััŒ ะฝะฐ ัั‚ัƒ ะฒ ะฒะตั‚ะบัƒ.
git checkout -b feature

# ะžั‚ั€ะตะดะฐะบั‚ะธั€ัƒะนั‚ะต ci.test.js ะบะฐะบ ะพะฟะธัะฐะฝะพ ะฒั‹ัˆะต.
# ะžั‚ั€ะตะดะฐะบั‚ะธั€ัƒะนั‚ะต ci.md ะบะฐะบ ะพะฟะธัะฐะฝะพ ะฒั‹ัˆะต

เจจเจตเฉ€เจ‚ เจธเจผเจพเจ–เจพ 'เจคเฉ‡ เจ•เจฎเจฟเจŸ เจฌเจฃเจพเจ“, เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจฃเจพเจ“ เจ…เจคเฉ‡ เจŸเฉˆเจธเจŸ เจ•เจฐเฉ‹

เจ…เจธเฉ€เจ‚ เจ•เจฎเจฟเจŸ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจœเจพ เจฐเจนเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจซเจฟเจฐ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ•เจฎเจฟเจŸ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ†เจฎ เจฆเฉเจฐเจฟเจธเจผ เจœเจฆเฉ‹เจ‚ เจŸเฉˆเจธเจŸ เจ†เจชเจฃเฉ‡ เจ†เจช เจšเฉฑเจฒเจฆเฉ‡ เจนเจจ

  • เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡:
    • เจฒเจ—เจพเจคเจพเจฐ เจœเจพเจ‚ เจ‰เจšเจฟเจค เจ•เฉ‹เจก เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเฉ‡ เจœเจตเจพเจฌ เจตเจฟเฉฑเจš;
    • เจธเฉฐเจญเจพเจฒเจฃ 'เจคเฉ‡ (เจฆเฉเจญเจพเจธเจผเฉ€เจ เจœเจพเจ‚ JIT-เจ•เฉฐเจชเจพเจˆเจฒ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฒเจˆ);
    • เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ (เจœเจฆเฉ‹เจ‚ เจธเฉฐเจ•เจฒเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ);
    • เจตเจšเจจเจฌเฉฑเจงเจคเจพ 'เจคเฉ‡;
    • เจ‡เฉฑเจ• เจธเจผเฉ‡เจ…เจฐ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡.

  • เจฌเจฟเจฒเจก เจธเจฐเจตเจฐ เจœเจพเจ‚ เจฌเจฟเจฒเจก เจตเจพเจคเจพเจตเจฐเจจ 'เจคเฉ‡:
    • เจœเจฆเฉ‹เจ‚ เจ•เฉ‹เจก เจ•เจฟเจธเฉ‡ เจจเจฟเฉฑเจœเฉ€ เจธเจผเจพเจ–เจพ/เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
    • เจ‡เจธ เจฅเฉเจฐเฉˆเจก เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆเฅค
    • เจ…เจญเฉ‡เจฆ เจฆเฉ‡ เจธเฉฐเจญเจพเจตเฉ€ เจจเจคเฉ€เจœเฉ‡ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ (เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจพเจฒ master).
    • เจ‡เฉฑเจ• เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจชเฉœเจพเจ… / เจจเจฟเจฐเฉฐเจคเจฐ เจกเจฟเจฒเจฟเจตเจฐเฉ€ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจŸเฉˆเจธเจŸ เจธเฉ‚เจŸ เจœเจฟเฉฐเจจเฉ€ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ, เจ“เจจเฉ€ เจนเฉ€ เจœเจผเจฟเจ†เจฆเจพ เจตเจพเจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹เฅค เจ‡เฉฑเจ• เจ†เจฎ เจชเฉœเจพเจ… เจฆเฉ€ เจตเฉฐเจก เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

  • เจซเจพเจธเจŸ เจฏเฉ‚เจจเจฟเจŸ เจŸเฉˆเจธเจŸ - เจฌเจฟเจฒเจก เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, CI เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš
  • เจนเฉŒเจฒเฉ€ เจฏเฉ‚เจจเจฟเจŸ เจŸเฉˆเจธเจŸ, เจคเฉ‡เจœเจผ เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจ…เจคเฉ‡ เจเจ•เฉ€เจ•เจฐเจฃ เจŸเฉˆเจธเจŸ - CI เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš, เจชเฉเจฐเจคเฉ€เจฌเฉฑเจง เจนเฉ‹เจฃ 'เจคเฉ‡
  • เจนเฉŒเจฒเฉ€ เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจ…เจคเฉ‡ เจเจ•เฉ€เจ•เจฐเจฃ เจŸเฉˆเจธเจŸ - CI เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš
  • เจธเฉเจฐเฉฑเจ–เจฟเจ† เจŸเฉˆเจธเจŸเจฟเฉฐเจ—, เจฒเฉ‹เจก เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจธเจฎเจพเจ‚ เจฒเฉˆเจฃ เจตเจพเจฒเฉ‡ เจœเจพเจ‚ เจฎเจนเจฟเฉฐเจ—เฉ‡ เจŸเฉˆเจธเจŸ - CI/CD เจชเจพเจˆเจชเจฒเจพเจˆเจจเจพเจ‚ เจตเจฟเฉฑเจš, เจชเจฐ เจฌเจฟเจฒเจก เจฆเฉ‡ เจ•เฉเจ เจฎเฉ‹เจก/เจชเฉœเจพเจ…/เจชเจพเจˆเจชเจฒเจพเจˆเจจเจพเจ‚ เจตเจฟเฉฑเจš, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฐเฉ€เจฒเฉ€เจœเจผ เจ‰เจฎเฉ€เจฆเจตเจพเจฐ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจœเจพเจ‚ เจนเฉฑเจฅเฉ€เจ‚ เจšเจฒเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡เฅค

๏ธเจŸเจพเจธเจ•

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

เจ‡เจธ เจ–เจพเจธ เจ•เฉ‹เจฐเจธ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจฐเจ•เจซเจฒเฉ‹ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจœเฉ‹ เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ†เจ‰ เจธเจพเจกเจพ เจ•เฉ‹เจก เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเฉ€เจเฅค

๏ธเจŸเจพเจธเจ•

  • เจฐเจฟเจฎเฉ‹เจŸ เจฌเฉเจฐเจพเจ‚เจš เจตเจฟเฉฑเจš เจฌเจฆเจฒเจพเจต เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเฉ‹ เจœเจฟเจธ เจจเจพเจฎ เจจเจพเจฒ เจคเฉเจนเจพเจกเฉ€ เจ•เจพเจฐเจœเจ•เจพเจฐเฉ€ เจธเจผเจพเจ–เจพ เจนเฉˆ

ะšะพะผะฐะฝะดั‹

git push --set-upstream origin feature

เจ‡เฉฑเจ• เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€ เจฌเจฃเจพเจ“

เจธเจฟเจฐเจฒเฉ‡เจ– เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€ เจฌเจฃเจพเจ“ เจ•เจฆเจฎ เจธเจฎเฉ€เจ–เจฟเจ†. เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹ feature เจœเจฟเจตเฉ‡เจ‚ "เจธเจฟเจฐ เจฆเฉ€ เจธเจผเจพเจ–เจพ" เจ…เจคเฉ‡ master เจœเจฟเจตเฉ‡เจ‚ "เจฌเฉ‡เจธ เจฌเฉเจฐเจพเจ‚เจš"เฅค

เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆ master เจ‰เจธ เจฆเฉ‡ เจตเจฟเฉฑเจš เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจซเฉ‹เจฐเจ• เจ•เจฐเฉ‹ เจ‡เฉฑเจ• "เจฌเฉ‡เจธ เจฌเฉเจฐเจพเจ‚เจš" เจตเจœเฉ‹เจ‚, เจฎเฉˆเจ‚ เจ•เฉ‹เจฐเจธ เจธเจฎเฉฑเจ—เจฐเฉ€ เจญเฉฐเจกเจพเจฐ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจœเจตเจพเจฌ เจจเจนเฉ€เจ‚ เจฆเฉ‡เจตเจพเจ‚เจ—เจพเฅค

GitHub lingo เจตเจฟเฉฑเจš, "เจฌเฉ‡เจธ เจฌเฉเจฐเจพเจ‚เจš" เจ‰เจน เจฌเฉเจฐเจพเจ‚เจš เจนเฉˆ เจœเจฟเจธ 'เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจ†เจงเจพเจฐเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ "เจนเฉˆเฉฑเจก เจฌเฉเจฐเจพเจ‚เจš" เจ‰เจน เจฌเฉเจฐเจพเจ‚เจš เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจชเฉเจฐเจธเจคเจพเจตเจฟเจค เจฌเจฆเจฒเจพเจ… เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค

เจชเจฐเจฟเจตเจฐเจคเจจเจพเจ‚ 'เจคเฉ‡ เจšเจฐเจšเจพ เจ•เจฐเฉ‹, เจšเจฐเจšเจพ เจœเจพเจฐเฉ€ เจฐเจนเจฟเจฃ เจฆเฉ‡ เจจเจพเจฒ เจจเจตเฉ‡เจ‚ เจ•เจฎเจฟเจŸ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€ (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 เจ˜เฉฑเจŸ เจ‰เจชเจฏเฉ‹เจ—เฉ€ - เจ‡เจน เจธเจฟเจฐเจซ เจ…เจญเฉ‡เจฆ เจชเฉเจฐเจคเฉ€เจฌเฉฑเจง เจจเฉ‚เฉฐ เจฒเฉฑเจญเฉ‡เจ—เจพเฅค

เจฐเฉ€เจฌเฉ‡เจธ

  • เจฌเฉ‡เจธ เจฌเฉเจฐเจพเจ‚เจš เจฆเฉ‡ เจธเจฟเจ–เจฐ 'เจคเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจผเจพเจ–เจพ เจคเฉ‹เจ‚ เจ‡เจ• เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เจ• เจฐเฉ€เจชเจฒเฉ‡เจ… เจ•เจฐเจฆเจพ เจนเฉˆเฅค
    • เจจเจตเฉ‡เจ‚ SHAs เจฆเฉ‡ เจจเจพเจฒ เจจเจตเฉ€เจ†เจ‚ เจ•เจฎเจฟเจŸเจพเจ‚ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ, เจœเจฟเจธ เจจเจพเจฒ 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹