เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ Git เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ (CI) เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบšเป? เบซเบผเบทเบšเบฒเบ‡เบ—เบตเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบดเบ”เบˆเบฐเบเปเบฒเบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบšเป? เบซเบผเบฑเบเบชเบนเบ”เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เป‚เบ”เบเปƒเบŠเป‰ GitHub repository. เบซเบผเบฑเบเบชเบนเบ”เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเป€เบ›เบฑเบ™เบ•เบปเบงเบŠเปˆเบงเบเบชเป‰เบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบเบปเบ”เป‚เบ”เบเบœเปˆเบฒเบ™; เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบ—เปˆเบฒเบ™เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเบฐเบ—เปเบฒเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เบปเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ•เบปเบงเบˆเบดเบ‡, เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ. เบ‚เป‰เบญเบเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบ—เบดเบ”เบชเบฐเบ”เบตเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบœเปˆเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”?

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเป‰เบฒเบงเบซเบ™เป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ„เปˆเบญเบเป†เบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™ CI เบ›เบปเบเบเบฐเบ•เบด, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบˆเบทเปˆเบˆเปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ™เบตเป‰. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบฎเบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบˆเบฐเปƒเบŠเป‰เบŠเบธเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ CI เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบเป‰เบŠเบดเบ”เบเบฑเบšเบ•เบปเบงเบˆเบดเบ‡.

GIF เบ™เบตเป‰ schematically เบชเบฐ โ€‹โ€‹เปเบ”เบ‡ เปƒเบซเป‰ เป€เบซเบฑเบ™ เบ„เปเบฒ เบซเบกเบฑเป‰เบ™ เบชเบฑเบ™ เบเบฒ เปƒเบ™ repository เบ‚เบญเบ‡ เบ—เปˆเบฒเบ™ เปƒเบ™ เบ‚เบฐ เบ™เบฐ เบ—เบตเปˆ เบ—เปˆเบฒเบ™ เบเป‰เบฒเบง เป„เบ› เป‚เบ”เบ เบœเปˆเบฒเบ™ เบงเบด เบŠเบฒ เบเบฒเบ™. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฑเบšเบชเบปเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบชเบธเบ”.

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบ—เปˆเบฒเบ™เบˆเบฐเบœเปˆเบฒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™ CI เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”;
  • เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบธเบ™เบ™เบฐเบžเบฒเบš;
  • เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”;
  • เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบ„เบงเบฒเบกโ€‹เบ‚เบฑเบ”โ€‹เปเบเปˆเบ‡โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เบฅเบงเบกโ€‹เบเบดเปˆเบ‡โ€‹เบ‡เปˆเบฒ (merge เบ‚เปเป‰โ€‹เบ‚เบฑเบ”โ€‹เปเบเปˆเบ‡โ€‹)โ€‹;
  • เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบœเบฐเบฅเบดเบ”.

เป€เบˆเบปเป‰เบฒเบˆเบฐเบฎเบฝเบ™เบซเบเบฑเบ‡?

เบ—เปˆเบฒเบ™เบˆเบฐเบชเบฒเบกเบฒเบ”เบ•เบญเบšเบ„เปเบฒเบ–เบฒเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ (CI) เปเบกเปˆเบ™เบซเบเบฑเบ‡?
  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ›เบฐเป€เบžเบ”เปƒเบ”เปเบ”เปˆเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ CI, เปเบฅเบฐเป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฑเบšเบเบฒเบ™เบเบฐเบ—เปเบฒเปƒเบ”เบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบเบฐเบ•เบธเป‰เบ™?
  • เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปเบกเปˆเบ™เบซเบเบฑเบ‡เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบฅเบฒเปƒเบ”?
  • Test Driven Development (TDD) เปเบกเปˆเบ™เบซเบเบฑเบ‡ เปเบฅเบฐเบกเบฑเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš CI เปเบ™เบงเปƒเบ”?
  • เบ‚เป‰เบญเบเบ„เบงเบ™เบฅเบงเบกเบซเบผเบทเบŸเบทเป‰เบ™เบŸเบนเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบšเป?
  • เบเบฑเบšเบ„เบทเบ™เบซเบผเบทเปเบเป‰เป„เบ‚เปƒเบ™เบชเบฐเบšเบฑเบšเบ•เปเปˆเป„เบ›?

เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปเบ›เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™ "เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡" เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡, เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเบฑเบšเบ„เบทเบ™เบ›เบฐเป‚เบซเบเบเปƒเบ™เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เปƒเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเบšเป‰เบฒเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก. เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ‚เป‰เบญเบเบˆเบฐเปƒเบŠเป‰ "เบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก surzhik" เบ„เบทเบเบฑเบšเบ„เปเบฒเบ—เบตเปˆเบ›เบฐเป€เบชเบตเบ” "commit" เบšเปˆเบญเบ™เบ—เบตเปˆเบ›เบฐเบŠเบฒเบŠเบปเบ™เปƒเบŠเป‰เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบ.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, เบซเบผเบท CI, เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ—เบตเปˆเบชเบฐเบกเบฒเบŠเบดเบเบ—เบตเบกเบ‡เบฒเบ™เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบปเปˆเบงเป„เบ›เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบกเบทเป‰, เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบ•เป‰เบญเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”.

เบกเบตเบ„เบงเบฒเบกเบ‚เบฑเบ”เปเบเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบ„เปเบฒเบชเบฑเบšเบ™เบตเป‰

เบˆเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡. เบšเบฒเบ‡เบ„เบปเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบงเปˆเบฒเบเบฒเบ™เบฅเบงเบกเบฅเบฐเบซเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบกเบทเป‰เบšเปเปˆเบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ•เบปเบงเบˆเบดเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เปƒเบซเป‰เบ—เบตเบกเบ‡เบฒเบ™เบ—เบตเปˆเบ—เบธเบเบ„เบปเบ™เป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เบชเบปเบ”เปƒเบ™เบ•เบญเบ™เป€เบŠเบปเป‰เบฒเปเบฅเบฐเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบกเบฑเบ™เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เปƒเบ™เบ•เบญเบ™เปเบฅเบ‡. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ„เบฑเบ”เบ„เป‰เบฒเบ™เบ—เบตเปˆเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบกเบฑเบ™เป€เบŠเบทเปˆเบญเบงเปˆเบฒเบ„เปเบฒเบ™เบดเบเบฒเบกเบกเบทเป‰เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™, เบชเบฐเป€เบžเบฒเบฐ, เปเบฅเบฐเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบ—เบตเบกเบ‡เบฒเบ™เบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบเบฒเบ™เบ„เบฑเบ”เบ„เป‰เบฒเบ™เบญเบตเบเบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ C ++ เบšเปเปˆเปเบกเปˆเบ™เบžเบฒเบชเบฒเบ”เบฝเบงเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ›เบฐเบเบญเบšเบ—เบตเปˆเบšเปเปˆเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบกเปˆเบ™เบญเปˆเบญเบ™เปเบญ. เบšเบฒเบ‡เบŠเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™) เบเปเปˆเบ•เป‰เบญเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบŠเบธเบกเบŠเบปเบ™เบเปเบฒเบฅเบฑเบ‡เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เบตเป‰, เปเบฅเบฐเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ” "เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ + เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบ" เบญเบฒเบ”เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบปเปˆเบงเป„เบ›, เบ–เป‰เบฒเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰.

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ (เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, CD) เปƒเบ™เบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบœเบนเป‰เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบซเบผเบฑเบ‡เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบงเบปเบ‡เบˆเบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡.

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ•เบฐเบซเบผเบญเบ”เบซเบผเบฑเบเบชเบนเบ”

  1. เบ”เบถเบ‡เบฅเบฐเบซเบฑเบ”เบซเบผเป‰เบฒเบชเบธเบ”. เบชเป‰เบฒเบ‡เบชเบฒเบ‚เบฒเบˆเบฒเบ master. เป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบ.
  2. เบชเป‰เบฒเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปƒเบ™เบชเบฒเบ‚เบฒเปƒเบซเบกเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบชเป‰เบฒเบ‡โ€‹เปเบฅเบฐโ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เปƒเบ™โ€‹เบ—เป‰เบญเบ‡โ€‹เบ–เบดเปˆเบ™โ€‹. เบœเปˆเบฒเบ™? เป„เบ›เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›. เบฅเบปเป‰เบกเป€เบซเบฅเบง? เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ” เบซเบผเบทเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš เปเบฅเบฐเบฅเบญเบ‡เปƒเปเปˆเบญเบตเบ.
  3. เบเบนเป‰เป„เบ›เบ—เบตเปˆ repository เบซเบผเบทเบชเบฒเบ‚เบฒเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.
  4. เบชเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡. เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เป€เบžเบตเปˆเบกเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆ. เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบœเปˆเบฒเบ™เบชเบฒเบ‚เบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”.
  5. Merge / rebase เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบˆเบฒเบเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš. เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบœเปˆเบฒเบ™โ€‹เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฅเบงเบกโ€‹.
  6. เบ™เบณเปƒเบŠเป‰เบˆเบฒเบเบชเบฒเบ‚เบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เป„เบ›เบชเบนเปˆเบเบฒเบ™เบœเบฐเบฅเบดเบ”.
  7. เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบตเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบชเปเบฒเบฅเบฑเบšเป„เบฅเบเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เบšเบฒเบ‡เป€เบงเบฅเบฒ, merge เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš.

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

๏ธ เบเบฒเบ™เบเบฐเบเบฝเบก

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบŠเบญเบšเปเบงเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก

เป€เบžเบทเปˆเบญเบฎเบฝเบ™เบงเบดเบŠเบฒเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™ Nodejs ะธ Git เบฅเบนเบเบ„เป‰เบฒ.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบฅเบนเบเบ„เป‰เบฒ Git เปƒเบ”เบเปเปˆเบ•เบฒเบก, เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเปƒเบซเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบฅเบนเบเบ„เป‰เบฒ Git เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบกเบตเบฅเบนเบเบ„เป‰เบฒ Git เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ เบ—เบตเปˆเบ™เบตเป‰.

เบเบฐเบเบฝเบกเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™

เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบชเปเบฒเป€เบ™เบปเบฒเบชเปˆเบงเบ™เบ•เบปเบง (เบชเป‰เบญเบก) template repository เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบซเบผเบฑเบเบชเบนเบ” เปƒเบ™ GitHub. เปƒเบซเป‰เบ•เบปเบเบฅเบปเบ‡เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบชเปเบฒเป€เบ™เบปเบฒเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบ™เบตเป‰ เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบซเบผเบฑเบเบชเบนเบ”.

เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง? เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹, repository เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เป€เบญเบตเป‰เบ™โ€‹เบซเบผเบฒเบโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹ continuous-integration-team-scenarios-students, เบกเบฑเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบต GitHub เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐ URL เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰

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

เบ‚เป‰เบญเบเบˆเบฐเป‚เบ—เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ™เบตเป‰เบ‡เปˆเบฒเบเป† <URL ั€ะตะฟะพะทะธั‚ะพั€ะธั>.

เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเบ„เป‰เบฒเบเบ„เบท <ั‚ัƒั‚> เบˆเบฐเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ—เบปเบ”เปเบ—เบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ”เป‰เบงเบเบ„เปˆเบฒเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก.

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒ เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” GitHub เบฅเบงเบกเป„เบ›เป€เบ–เบดเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบซเบผเบฑเบเบชเบนเบ”เบ™เบตเป‰. เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰, เบเบฐเบฅเบธเบ™เบฒเป€เบ›เบตเบ”เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบกเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบขเบนเปˆเป€เบ„เบดเปˆเบ‡เบเบฒเบ‡เบ‚เบญเบ‡เบซเบ™เป‰เบฒ, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ›เบซเบฒเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš GitHub.

เบ—เปˆเบฒเบ™เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบซเบผเบฑเบเบชเบนเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเบ–เป‰เบฒ GitHub Actions เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰.

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡ GitHub เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡ Markdown เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ‚เบฝเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰

https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md

เบเปˆเบฝเบงเบเบฑเบšเบ„เปเบฒเบ•เบญเบš

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบซเบผเบฑเบเบชเบนเบ”เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบšเบฒเบ‡เบขเปˆเบฒเบ‡.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบทเบšเบ•เปเปˆเป„เบ”เป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เปƒเบ™เบซเบปเบงเบ‚เปเป‰ solution, เป€เบŠเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™ repository เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.
เบเบฐเบฅเบธเบ™เบฒเบขเปˆเบฒเบฎเบงเบก solution ะฒ master เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบซเบผเบฑเบเบชเบนเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบชเบฒเบ‚เบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเบ„เบดเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”, เบซเบผเบทเป€เบžเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเบฑเบšเบœเบนเป‰เบ‚เบฝเบ™, เป‚เบ”เบเปƒเบŠเป‰เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆ Git เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบนเบ™เป€เบชเบเป„เบ›เบซเบกเบปเบ”เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบชเบฒเบ‚เบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™ master เบขเบนเปˆเปƒเบ™เบชเบฒเบ‚เบฒ solution เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ reset directory เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบซเบผเบฑเบเบชเบนเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™.

เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเบ™เบตเป‰เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบ—เป‰เป†

เบกเบญเบšเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™

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 เป€เบžเบทเปˆเบญเบ„เบดเบ”เบญเบญเบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™.
เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฃเบตเป€เบŠเบฑเบ”เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™ commit เบ™เบตเป‰:

git reset --hard <the SHA you need>

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเปเปƒเบˆเบเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบœเบตเบเปเบœเปˆเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ repository เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเบฑเบš repository เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ. เบขเปˆเบฒเบฅเบทเบกเบฅเบฐเบšเบธเบชเบฒเบ‚เบฒเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰.

git push --force origin master

เบเบฐเบฅเบธเบ™เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ git push --force. เบกเบฑเบ™เบ„เบปเบ‡เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบขเบฒเบเบˆเบฐเป€เบฎเบฑเบ”เปเบšเบšเบ™เบตเป‰เป€เบฅเบทเป‰เบญเบเป†, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบขเบนเปˆเบšเปˆเบญเบ™เบ™เบตเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบœเบนเป‰เปœเบถเปˆเบ‡เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเปƒเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบฅเบฒเบงเป€เบฎเบฑเบ”.

เบเบณเบฅเบฑเบ‡เป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบ

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบฅเบงเบšเบฅเบงเบกเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™ CI เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เบเบงเบ”เบชเบญเบšเป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบˆเบฒเบเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบฒเบ‡เป„เบ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเบกเบตเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เป€เบ—เบทเปˆเบญ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เป‚เบ„เบ™เบกเบฑเบ™เบˆเบฒเบเบ—เบฒเบ‡เป„เบเปเบ—เบ™.

๏ธ เบงเบฝเบเบ‡เบฒเบ™: เบ›เบฑเบšเบ›เบธเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบชเป‰เบฒเบ‡เบชเบฒเบ‚เบฒเบˆเบฒเบ master, เป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบ

  1. Clone the course repository from <URL ั€ะตะฟะพะทะธั‚ะพั€ะธั>.
  2. เปเบฅเปˆเบ™ npm install เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™ repositoryโ€‹; เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Jest, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.
  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-เบฅเบงเบšเบฅเบงเบก);
    • เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบš (เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™);
    • เบชเบธเบ”เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ;
    • เป€เบกเบทเปˆเบญเป€เบœเบตเบเปเบœเปˆเป„เบ›เบเบฑเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™.

  • เปƒเบ™ build server เบซเบผเบท build environment:
    • เป€เบกเบทเปˆเบญเบฅเบฐเบซเบฑเบ”เบ–เบทเบเป€เบœเบตเบเปเบœเปˆเป„เบ›เบซเบฒเบชเบฒเบ‚เบฒ/เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบชเปˆเบงเบ™เบ•เบปเบง.
    • เบฅเบฐเบซเบฑเบ”เปƒเบ™เบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰เบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบ—เบปเบ”เบชเบญเบš.
    • เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบฅเบงเบกโ€‹เบ•เบปเบงโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบš (เป‚เบ”เบโ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เบเบฑเบšโ€‹ master).
    • เป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ / เบ—เปเปˆเบชเบปเปˆเบ‡เบ•เปเปˆเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบŠเบธเบ”เบ—เบปเบ”เบชเบญเบšเปเบฅเปˆเบ™เป„เบงเบ‚เบถเป‰เบ™, เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เปเบฅเปˆเบ™เบกเบฑเบ™เป„เบ”เป‰เป€เบฅเบทเป‰เบญเบเป†. เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ›เบปเบเบเบฐเบ•เบดเบญเบฒเบ”เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰.

  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เป„เบง - เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เปƒเบ™เบ—เปเปˆ CI
  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบŠเป‰เบฒ, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเป„เบงเปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ - on commit, in the CI pipeline
  • เบญเบปเบ‡เบ›เบฐเบเบญเบšเบŠเป‰เบฒเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ - เปƒเบ™เบ—เปเปˆ CI
  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป‚เบซเบผเบ”เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบญเบทเปˆเบ™เป†เบซเบผเบทเบฅเบฒเบ„เบฒเปเบžเบ‡ - เปƒเบ™เบ—เปเปˆ CI / CD, เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบšเบฒเบ‡เป‚เบซเบกเบ” / เบ‚เบฑเป‰เบ™เบ•เบญเบ™ / เบ—เปเปˆเบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฐเบเบฝเบกเบœเบนเป‰เบชเบฐเบซเบกเบฑเบเบ›เปˆเบญเบเบซเบผเบทเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡.

๏ธเปœเป‰เบฒเบงเบฝเบ

เบ‚เป‰เบญเบเบ‚เปเปเบ™เบฐ เบ™เบณ เปƒเบซเป‰เปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป‚เบ”เบเปƒเบŠเป‰ เบ„เบณ เบชเบฑเปˆเบ‡ npm test. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบซเป‰เป€เบžเบตเปˆเบก git hook เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบšเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ. เบกเบตเบเบฒเบ™เบˆเบฑเบšเบซเบ™เบถเปˆเบ‡: Git hooks เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ repository เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ” cloned เบˆเบฒเบ GitHub เบ„เบฝเบ‡เบ„เบนเปˆเบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบซเบผเบฑเบเบชเบนเบ”. เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡ hook, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ install_hook.sh เบซเบผเบทเบชเบณเป€เบ™เบปเบฒเป„เบŸเบฅเปŒ repo/hooks/pre-commit เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ .git/hooks/.
เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบ„เปเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ.

  1. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ npm test เปƒเบ™เป‚เบŸเป€เบ”เบต repository เบ‚เบญเบ‡เบซเบผเบฑเบเบชเบนเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เป„เบ”เป‰โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹.
  2. เบ•เบฑเป‰เบ‡ hook commit (pre-commit hook) เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™ 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, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบงเบฝเบเบ‡เบฒเบ™เปƒเบซเป‰เบเบฑเบšเบชเปเบฒเป€เบ™เบปเบฒเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบ‚เบญเบ‡ repository (เบชเป‰เบญเบกเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™) เบซเบผเบทเบชเบฒเบ‚เบฒเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™.

  • เบ”เป‰เบงเบเบชเป‰เบญเบก, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป‰เป‚เบ„เบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™เบˆเบฒเบเป„เบฅเบเบฐเป„เบ, เบชเป‰เบฒเบ‡เบชเบณเป€เบ™เบปเบฒเบ—เบฒเบ‡เป„เบเบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™, เป€เบŠเบดเปˆเบ‡เป€เบญเบตเป‰เบ™เบเบฑเบ™เบงเปˆเบฒเบชเป‰เบญเบก. เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™ clones repository เบชเปˆเบงเบ™เบ•เบปเบงเบ™เบตเป‰เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเบฐเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ, เป€เบ‚เบปเบฒ pushes เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเป‰เบญเบกเบ‚เบญเบ‡เบ•เบปเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบกเบตเปƒเบซเป‰เบ„เบปเบ™เบญเบทเปˆเบ™เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ repository เบ—เบปเปˆเบงเป„เบ›. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เปƒเบ™ GitHub. เบกเบฑเบ™เบเบฑเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบซเบผเบฑเบเบชเบนเบ”เบ‚เบฑเป‰เบ™เบชเบนเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบ [Team Work เปเบฅเบฐ CI เบเบฑเบš Git] (http://devops.redpill.solutions/).
  • เบงเบดเบ—เบตเบเบฒเบ™เบญเบทเปˆเบ™เปเบกเปˆเบ™เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡ repository เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบ™เบฑเบšเบชเบฒเบ‚เบฒ master เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™ "เบ–เบทเบเบ›เบปเบเบ›เป‰เบญเบ‡". เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เป€เบœเบตเบเปเบœเปˆเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป„เบ›เบซเบฒเบชเบฒเบ‚เบฒเบ‚เบญเบ‡ repository เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เบœเบนเป‰เบญเบทเปˆเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰, เบ–เป‰เบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบšเบกเบฑเบ™. master เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™.

เปƒเบ™เบซเบผเบฑเบเบชเบนเบ”เบชเบฐเป€เบžเบฒเบฐเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเปƒเบŠเป‰เบชเบฒเบ‚เบฒ.

เปƒเบซเป‰เป€เบœเบตเบเปเบœเปˆเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

๏ธเปœเป‰เบฒเบงเบฝเบ

  • เป€เบœเบตเบเปเบœเปˆเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฒเบ‚เบฒเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบฒเบ‚เบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™

เบ„เปเบฒเบชเบฑเปˆเบ‡

git push --set-upstream origin feature

เบชเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡

เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ”เป‰เบงเบเบซเบปเบงเบ‚เปเป‰ เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™... เบ•เบดเบ”เบ•เบฑเป‰เบ‡ feature เป€เบŠเบฑเปˆเบ™ "เบชเบฒเบ‚เบฒเบซเบปเบง" เปเบฅเบฐ master เป€เบŠเบฑเปˆเบ™ "เบชเบฒเบ‚เบฒเบžเบทเป‰เบ™เบ–เบฒเบ™".

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ master เปƒเบ™เบฅเบฒเบง fork the repository เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™ "เบชเบฒเบ‚เบฒเบžเบทเป‰เบ™เบ–เบฒเบ™", เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™ repository.

เปƒเบ™ GitHub lingo, "เบชเบฒเบ‚เบฒเบžเบทเป‰เบ™เบ–เบฒเบ™" เปเบกเปˆเบ™เบชเบฒเบ‚เบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ, เปเบฅเบฐ "เบชเบฒเบ‚เบฒเบซเบปเบง" เปเบกเปˆเบ™เบชเบฒเบ‚เบฒเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบต.

เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เป€เบžเบตเปˆเบกเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปƒเบซเบกเปˆเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆ

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡ (PR)

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡ (PR) เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเปเบฅเบฐเบฅเบฐเบซเบฑเบ”เป€เบญเบเบฐเบชเบฒเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบฅเบฐเบซเบฑเบ”. เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบกเบตเบŠเบทเปˆเบ•เบฒเบกเบงเบดเบ—เบตเบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบšเบธเบเบ„เบปเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เบฅเบงเบก. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบšเบธเบเบ„เบปเบ™เบ—เบตเปˆ clones เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป€เบเบฑเบšเบกเป‰เบฝเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบ—เบฒเบ‡เป„เบเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบฅเบฒเบงเบงเบฒเบ‡เบฅเบฐเบซเบฑเบ”เป„เบงเป‰เปƒเบ™เบ„เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เบฅเบฒเบงเปเบฅเบฐเบ‚เปเปƒเบซเป‰เบœเบนเป‰เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ‚เบญเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบกเบฒเป€เบญเบปเบฒ (เบ”เบถเบ‡) เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™ repositories เบ—เป‰เบญเบ‡โ€‹เบ–เบดเปˆเบ™โ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹, เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ—เบปเบšโ€‹เบ—เบงเบ™โ€‹เบ„เบทเบ™โ€‹เปเบฅเบฐโ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เป‚เบเบ‡ (เบฅเบงเบก) เบฅเบฒเบง. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰เบเบฑเบ‡เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเป‚เบ”เบเบŠเบทเปˆเบญเบทเปˆเบ™เป†, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบฅเบงเบกโ€‹.

เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ‚เบญเบ‡ GitHub เบซเบผเบทเป€เบงเบ—เบตเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบญเบทเปˆเบ™เป†, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เปเบšเบšเปƒเบšเบซเบ™เป‰เบฒเบ•เปเปˆเบซเบ™เป‰เบฒ, เบเบฒเบ™เป‚เบ—เบชเบฝเบ‡, เบซเบผเบทเบญเบตเป€เบกเบฅเปŒ, เปเบ•เปˆเบเบฑเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบฎเบนเบšเปเบšเบšเป€เบงเบ—เบตเบชเบปเบ™เบ—เบฐเบ™เบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ:

  • เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบฅเบฐเบซเบฑเบ”เบชเบฐเป€เบžเบฒเบฐ;
  • เป€เบ›เบฑเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบ„เปเบฒเบ„เบถเบ”เบ„เปเบฒเป€เบซเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ„เบงเบฒเบกเบ„เบทเบšเบซเบ™เป‰เบฒเบˆเบฒเบเบ—เบฑเบ‡ autotesters เปเบฅเบฐเป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™;
  • เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”;
  • เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ•เปเปˆเบกเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป€เบซเบ”เบœเบปเบ™เปเบฅเบฐเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบตเปˆเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบซเบฅเบฑเบ‡เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบซเบผเบทเบŠเบดเป‰เบ™เบ™เบฑเป‰เบ™.

เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบปเบ™เบ—เบฐเบ™เบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบซเบผเบทเป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบ„เบถเบ”เบ„เปเบฒเป€เบซเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบงเบดเบ—เบต, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบ—เปเบฒเบญเบดเบ”เป€เบžเบทเปˆเบญเปเบšเปˆเบ‡เบ›เบฑเบ™เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเปเบœเบ™เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเบฑเบšเบœเบนเป‰เบฎเปˆเบงเบกเบกเบทเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ–เป‰เบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปเบกเปˆเบ™เป€เบ›เบตเบ”เป€เบกเบทเปˆเบญเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป„เบ”เป‰เป€เบฎเบฑเบ”เปเบฅเป‰เบง, เบกเบธเปˆเบ‡เบซเบกเบฑเป‰เบ™, เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบชเบปเบ™เบ—เบฐเบ™เบฒเป„เบ”เป‰. เปƒเบ™เบšเบฒเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ›เบตเบ” PR เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบ™เบฐเบžเบฒเบš: เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบซเบผเบทเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”. เบšเปเปˆเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบซเบเบฑเบ‡, เบขเปˆเบฒเบฅเบทเบก @mention เบ„เบปเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบญเบฐเบ™เบธเบกเบฑเบ”เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ.

เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡ PR, เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰.

  • เบŠเบตเป‰เบšเบญเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฐเป€เปœเบตเปƒเบซเป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡ เปเบฅเบฐเบขเบนเปˆเปƒเบช.
  • เบ‚เบฝเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบญเบฐเบ—เบดเบšเบฒเบเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™:
    • เป€เบžเบตเปˆเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบˆเบฒเบเบฅเบฐเบซเบฑเบ”, เบซเบผเบทเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบฐเบžเบฒเบšเบเบฒเบ™, เป€เบŠเบฑเปˆเบ™: #bugs เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เปเบฅเบฐเบ•เบปเบงเป€เบฅเบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ;
    • @mention เปƒเบœโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบเบฑเบš, เบซเบผเบทโ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ” @mention เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบ„เบดเบ”โ€‹เป€เบซเบฑเบ™โ€‹เบžเบฒเบโ€‹เบซเบผเบฑเบ‡;
    • เบ‚เปเปƒเบซเป‰เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบŠเปˆเบงเบเปƒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบซเบผเบทเบเบงเบ”เป€เบšเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบชเบฐเป€เบžเบฒเบฐ.

เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบ›เบตเบ” PR, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบŠเบธเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปเบ•เปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบญเบฒเบ”เบˆเบฐเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบเบฒเบ™เบเบงเบ”เบชเบญเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เบเบฐเบฅเบธเบ™เบฒเบฅเปเบ–เป‰เบฒเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปเบฒเป€เบฅเบฑเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบขเบนเปˆเบ”เป‰เบฒเบ™เบฅเบธเปˆเบกเบ‚เบญเบ‡เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ PR เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš GitHub. เบชเบทเบšเบ•เปเปˆเป€เบกเบทเปˆเบญเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปเบฒเป€เบฅเบฑเบ”.

๏ธ เป€เบžเบตเปˆเบกเบšเบฑเบ™เบ—เบถเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบธเปˆเบกเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™ CI

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบซเบผเบฑเบเบชเบนเบ”เบ™เบตเป‰เปเบกเปˆเบ™ arbitrary เปเบฅเบฐ subjective, เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เบˆเบฐเป€เบžเบตเปˆเบกเบšเบฑเบ™เบ—เบถเบเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰.

๏ธ เบงเบฝเบเบ‡เบฒเบ™: เบชเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเป€เบซเบฑเบ™เบ™เบตเป‰

  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 เบเบฑเบš repository เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ.
  6. เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ—เบตเปˆเบกเบตเบŠเบทเปˆ เป€เบžเบตเปˆเบกเบ‚เปเป‰เบชเบฑเบ‡เป€เบเบ” เบกเบตเบชเบฒเบ‚เบฒเบซเบปเบง bugfix เปเบฅเบฐเบชเบฒเบ‚เบฒเบžเบทเป‰เบ™เบ–เบฒเบ™master.

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ master เปƒเบ™เบฅเบฒเบง fork the repository เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™ "เบชเบฒเบ‚เบฒเบžเบทเป‰เบ™เบ–เบฒเบ™", เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™ repository.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ repository เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบšเบดเปˆเบ‡เบ„เบท.
เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบ„เปเบฒเบชเบฑเปˆเบ‡

# ะŸะตั€ะตะบะปัŽั‡ะธั‚ะตััŒ ะฝะฐ ะฒะตั‚ะบัƒ 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 hook เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเป€เบžเบตเปˆเบกเปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™, เบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง, เปเบฅเบฐเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบˆเบฐเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบเปˆเบญเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบเบฒเบ™เบชเบญเบšเป€เบชเบฑเบ‡เบœเปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบ•เบฒเบกเบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰, เบซเบผเบทเบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเปเปˆเป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเบซเบเบฑเบ‡เป€เบฅเบตเบ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบ‚เบฝเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเบฅเบทเบกเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบˆเบฐเป€เบ•เบทเบญเบ™เบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™.

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบšเบšเบ‚เบฑเบšเป€เบ„เบทเปˆเบญเบ™ (TDD)

TDD เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ‚เบฝเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเปˆเบญเบ™เบฅเบฐเบซเบฑเบ”. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบ›เบปเบเบเบฐเบ•เบดเป‚เบ”เบเปƒเบŠเป‰ TDD เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰.

  1. เป€เบžเบตเปˆเบกเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.
  2. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปƒเบซเบกเปˆเบฅเบปเป‰เบกเป€เบซเบฅเบง.
  3. เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”.
  4. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบœเปˆเบฒเบ™.
  5. เบ›เบฑเบšเบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ.
  6. เป€เบฎเบฑเบ”เบŠเป‰เบณ.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบฅเบปเป‰เบกเป€เบซเบฅเบงเบกเบฑเบเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ›เบฑเบ™เบชเบตเปเบ”เบ‡, เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฑเบเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ›เบฑเบ™เบชเบตเบ‚เบฝเบง, เบงเบปเบ‡เบˆเบญเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเป€เบ›เบฑเบ™เบชเบตเปเบ”เบ‡ - เบชเบตเบ‚เบฝเบง - refactor.

๏ธเปœเป‰เบฒเบงเบฝเบ

เบ—เปเบฒเบญเบดเบ”, เบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบ›เปˆเบญเบเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบฅเบปเป‰เบกเป€เบซเบฅเบง, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบทเปˆเบกเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™ CI เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบกเปˆเบ™เบœเปˆเบฒเบ™ ("เบชเบตเบ‚เบฝเบง").
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบœเบตเบเปเบœเปˆเบฅเบฐเบซเบฑเบ”เปƒเบซเบกเปˆเบเบฑเบš repository เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเปเบฅเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš GitHub เบขเบนเปˆเบ”เป‰เบฒเบ™เบฅเบธเปˆเบกเบ‚เบญเบ‡เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปเบฅเบฐเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš PR.

  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 hook เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡, เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ‚เบญเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง.
  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. เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆ rewind HEAD master เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฐเบ—เบนเป‰ feature. เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฅเบงเบกเบซเบผเบทเบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ feature เบŸเบทเป‰เบ™เบŸเบน master. GitHub เบ•เบปเบงเบˆเบดเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบœเบฐเบชเบปเบกเบœเบฐเบชเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ–เป‰เบฒเบšเปเปˆเบกเบตเบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡. เบญเบฐเบ™เบดเบˆเบฒ, เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ—เบฑเบ‡เบชเบญเบ‡เบชเบฒเบ‚เบฒเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเปเบ‚เปˆเบ‡เบ‚เบฑเบ™เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™ ci.md. เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบ‚เบฑเบ”เบเบฑเบ™, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบเป‰เป„เบ‚เบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡.

เบฅเบงเบกเบซเบผเบท rebase

เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™

  • เบชเป‰เบฒเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบฅเบงเบกเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบ›เบฐเบซเบงเบฑเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ.
    • เบฎเบฑเบเบชเบฒเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบชเบฒเบ‚เบฒเบ—เบตเปˆเบกเบตเป€เบงเบฅเบฒเป€เบ”เบตเบกเปเบฅเบฐเบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.
    • เบšเบฑเบ™เบ—เบถเบ SHA เบ‚เบญเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡.
  • เบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบง.
  • เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบฅเบทเปˆเบญเบ‡เบšเปเปˆเป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™.
    • เป€เบฅเบทเปˆเบญเบ‡เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบเบฒเบเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบชเบฒเบ‚เบฒเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ (reminiscent เบ‚เบญเบ‡เบชเบฒเบ IDE).
    • เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ”เบตเบšเบฑเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบเบฒเบเบ‚เบถเป‰เบ™, e.g. git bisect เบซเบ™เป‰เบญเบเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ” - เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบŠเบญเบเบซเบฒเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ merge.

เบ„เปˆเบฒเบ•เบญเบšเปเบ—เบ™

  • Replays commits เบˆเบฒเบเบชเบฒเบ‚เบฒเบ›เบฐเบˆเบธเบšเบฑเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบชเบฒเบ‚เบฒเบžเบทเป‰เบ™เบ–เบฒเบ™เบซเบ™เบถเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบญเบทเปˆเบ™.
    • เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปƒเบซเบกเปˆเบเบฑเบš SHAs เปƒเบซเบกเปˆเปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปƒเบ™ GitHub เบเบปเบ‡เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบ„เบดเบ”เบ„เปเบฒเป€เบซเบฑเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™.
    • เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เปƒเบซเบกเปˆเปเบฅเบฐเบ”เบฑเบ”เปเบ›เบ‡เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบเบฒเบ™เบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป€เบ›เบฑเบ™เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™.
  • เบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡เบซเบผเบฒเบเบญเบฑเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚.
  • เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเป€เบฅเบทเปˆเบญเบ‡เป€เบชเบฑเป‰เบ™.
    • เป€เบฅเบทเปˆเบญเบ‡เบญเบฒเบ”เบˆเบฐเบญเปˆเบฒเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเบกเบฑเบ™เบšเปเปˆเบเบฒเบงเป€เบเบตเบ™เป„เบ›เป‚เบ”เบเบšเปเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เบญเบฑเบ™เบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™.
    • เบเบฒเบ™เบ”เบตเบšเบฑเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ: เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ git bisect, เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰ rollbacks เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปเบฅเบฐเบ„เบฒเบ”เบ„เบฐเป€เบ™เบซเบผเบฒเบเบ‚เบถเป‰เบ™.
  • เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบชเบฒเบ‚เบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ—เบตเปˆเบกเบตเบ—เบธเบ‡ --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. เบเบปเบ” "เบฅเบถเบšเบชเบฒเบ‚เบฒ" เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เบญเบตเบเบ•เปเปˆเป„เบ›.

เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปƒเบ™เบ‚เบฐเบ™เบฐเบ™เบตเป‰
เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบœเบดเบ”เบžเบฒเบ”

เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบเปˆเบฒเบงเบงเปˆเบฒ "เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เปเบ•เปˆเบšเปเปˆเป€เบ„เบตเบเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เบ‚เบฒเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ." เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เปเบกเบ‡เป„เบกเป‰ insidious เป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”.

เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ”เบนเปเบฅ:

  • เบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”;
  • เบฅเบฐเบซเบฑเบ”เปƒเบ™เบเบฐเบ—เบนเป‰ master เบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบˆเบฒเบเบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบซเบกเปˆ.

เบ‚เป‰เบญเบเบ„เบงเบ™เบกเป‰เบงเบ™เบ„เบทเบ™เบซเบผเบทเปเบเป‰เป„เบ‚เบกเบฑเบ™เปƒเบ™เบชเบฐเบšเบฑเบšเบ•เปเปˆเป„เบ›เบšเป?

เบเบฒเบ™เบกเป‰เบงเบ™เบ„เบทเบ™เปเบกเปˆเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบฐเบšเบฑเบšเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เปเบฅเบฐเบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. "เบเบฒเบ™เปเบเป‰เป„เบ‚เป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ" เปเบกเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚ master เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹เปƒเบ™โ€‹เบ—เบฑเบ™โ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ APIs เปเบฅเบฐ schemas เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเป‰เบญเบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบ”เป‰เบงเบเบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ”เบต, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบเบฒเบ™เบกเป‰เบงเบ™เบ„เบทเบ™เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบซเบผเบฒเบเบเปˆเบงเบฒเบเบฒเบ™เปเบเป‰เป„เบ‚เปƒเบ™เบชเบฐเบšเบฑเบšเบ•เปเปˆเป„เบ›.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ rolling back เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เปƒเบ”เป†เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ›เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ™เบตเป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ

  • เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบเปˆเบฝเบงเบเบฑเบšเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เป„เบงเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰;
  • เป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เปƒเบ™ master เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบงเบฝเบเป€เบฎเบฑเบ”เบ‡เบฒเบ™เบ—เปเบฒเปƒเบซเบกเปˆ.

๏ธเปœเป‰เบฒเบงเบฝเบ

  1. เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบชเบฒเบ‚เบฒ master เปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.
  2. เบ›เบฑเบšเบ›เบธเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบˆเบฒเบเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบฒเบ‡เป„เบ.
  3. เบเบฑเบšเบ„เบทเบ™เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบเบฒเบ™เบฅเบงเบก PR เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™ ะฒ master.
  4. เป€เบœเบตเบเปเบœเปˆเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ›เบเบฑเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบฒเบ‡เป„เบ.

เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ›เบฐโ€‹เบซเบงเบฑเบ”โ€‹เบชเบฒเบ”โ€‹เบ‚เบญเบ‡ repository เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบเบฒเบ™โ€‹เบฅเบงเบกโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เป„เบ›โ€‹เบšเปˆเบญเบ™โ€‹
เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบ„เปเบฒเบชเบฑเปˆเบ‡

# ะŸะตั€ะตะบะปัŽั‡ะธั‚ะตััŒ ะฝะฐ ะฒะตั‚ะบัƒ master.
git checkout master

# ะžะฑะฝะพะฒะธั‚ะต ะปะพะบะฐะปัŒะฝั‹ะน ั€ะตะฟะพะทะธั‚ะพั€ะธะน ะธะท ัƒะดะฐะปั‘ะฝะฝะพะณะพ ั€ะตะฟะพะทะธั‚ะพั€ะธั.
git pull

# ะžั‚ะผะตะฝะธั‚ะต ะบะพะผะผะธั‚ ัะปะธัะฝะธั PR Steps review ะฒ master.
# ะœั‹ ะพั‚ะผะตะฝัะตะผ ะบะพะผะผะธั‚ ัะปะธัะฝะธั, ะฟะพัั‚ะพะผัƒ ะฝะฐะผ ะฝัƒะถะฝะพ ะฒั‹ะฑั€ะฐั‚ัŒ ะฒะตั‚ะบัƒ ะธัั‚ะพั€ะธะธ, ะบะพั‚ะพั€ัƒัŽ ะผั‹ ะทะฐั…ะพั‚ะธะผ ะพัั‚ะฐะฒะธั‚ัŒ
git show HEAD

# ะฟั€ะตะดะฟะพะปะพะถะธะผ, ั‡ั‚ะพ ะบะพะผะผะธั‚, ะบะพั‚ะพั€ั‹ะน ะฑั‹ะป ะฟะพัะปะตะดะฝะธะผ ะฒ ะฒะตั‚ะบะต master ะดะพ ัะปะธัะฝะธั, ะฑั‹ะป ะพั‚ะพะฑั€ะฐะถั‘ะฝ ะฟั€ะตะดั‹ะดัƒั‰ะตะน ะบะพะผะฐะฝะดะพะน ะฟะตั€ะฒั‹ะผ
git revert HEAD -m 1
# ะผะพะถะตั‚ะต ะฝะต ะผะตะฝัั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ะบะพะผะผะธั‚ะพะฒ

# ะžะฟัƒะฑะปะธะบัƒะนั‚ะต ะธะทะผะตะฝะตะฝะธั ะฒ ัƒะดะฐะปั‘ะฝะฝั‹ะน ั€ะตะฟะพะทะธั‚ะพั€ะธะน
git push

๏ธเบ—เบปเบ”เบชเบญเบšเบ•เบปเบ™เป€เบญเบ‡

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบงเปˆเบฒ ci.md เบšเปเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบก "sneaky bug" เบ•เปเปˆเป„เบ›เบญเบตเบเปเบฅเป‰เบงเบซเบผเบฑเบ‡เบˆเบฒเบ reverting commit.

เปเบเป‰เป„เบ‚เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 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. เป€เบญเบปเบฒเบ‚เปเป‰เบ„เบงเบฒเบก "เบเบฑเบšเปเบกเบ‡เป„เบกเป‰ sneaky" เปƒเบ™ 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 เปƒเบ™เบฅเบฒเบง fork the repository เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™ "เบชเบฒเบ‚เบฒเบžเบทเป‰เบ™เบ–เบฒเบ™", เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™ repository.

เบญเบฐเบ™เบธเบกเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡ "เบเบฒเบ™เปเบเป‰เป„เบ‚เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”"

เบ‚เบญเบšเปƒเบˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚! เบเบฐเบฅเบธเบ™เบฒเบญเบฐเบ™เบธเบกเบฑเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ master เบˆเบฒเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡.

๏ธเปœเป‰เบฒเบงเบฝเบ

  1. เบเบปเบ” "เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบเบฒเบ™โ€‹เบ”เบถเบ‡โ€‹เบฅเบงเบกโ€‹"โ€‹.
  2. เบเบปเบ” "เบขเบทเบ™เบขเบฑเบ™เบเบฒเบ™เบฅเบงเบก".
  3. เบเบปเบ” "เบฅเบถเบšเบชเบฒเบ‚เบฒ" เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เบญเบตเบเบ•เปเปˆเป„เบ›.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™เบกเบตเปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰.
เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบŠเบปเบกเป€เบŠเบตเบ!

เบ—เปˆเบฒเบ™เป„เบ”เป‰เบชเบณเป€เบฅเบฑเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบ„เบปเบ™เบ—เบปเปˆเบงเป„เบ›เป€เบฎเบฑเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบšเบฑเบ™เบซเบฒเปƒเบ”เป†เบเบฑเบšเบซเบผเบฑเบเบชเบนเบ”เบซเบผเบทเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบกเบฑเบ™, เบเบฐเบฅเบธเบ™เบฒเบชเป‰เบฒเบ‡เบšเบฑเบ™เบซเบฒเปƒเบ™ repositories เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบซเบผเบฑเบเบชเบนเบ”. เบซเบผเบฑเบเบชเบนเบ”เบ™เบตเป‰เบเบฑเบ‡เบกเบต เบชเบฐเบšเบฑเบšเป‚เบ•เป‰เบ•เบญเบš เปƒเบŠเป‰ GitHub Learning Lab เป€เบ›เบฑเบ™เป€เบงเบ—เบต.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™