วิธีทำ Git commit message แบบอัตโนมัติ
(insight.infograb.net)*เมื่อรู้สึกลำบากใจกับการเขียน git commit message
- commit message ที่ใส่อีโมจิและหมายเลข issue จะติดตามได้ง่ายและดูดี
- But ยิ่ง commit message ยาวและซับซ้อน ก็ยิ่งไม่สะดวกทุกครั้งและพลาดบ่อย
- การต้องหาอีโมจิที่เหมาะสมทุกครั้งเป็นเรื่องทรมาน
*บังคับใช้ git commit message ด้วย Git Hooks
- Git Hooks คือความสามารถในการรันสคริปต์ที่เรากำหนดไว้เมื่อเกิดอีเวนต์ที่เกี่ยวข้องกับ Git
- ฟีเจอร์นี้แบ่งเป็น server hooks และ client hooks
*server hooks: ใช้ฟีเจอร์ push rule ของ Git
- หากใส่สคริปต์ตรวจสอบ commit message ไว้ใน pre-receive hook ก็จะป้องกันไม่ให้ push ขึ้นเซิร์ฟเวอร์
- ใน GitLab สามารถใช้ฟีเจอร์ push rule เพื่อตรวจสอบ commit message ด้วย regular expression ได้
- หากตรวจพบ commit message ที่ไม่เป็นไปตาม regular expression ก็จะปฏิเสธ push นั้นและทำให้เกิดข้อผิดพลาด
*client hooks: ตรวจสอบล่วงหน้าก่อน push
- สามารถสร้างสคริปต์ใน commit-msg hook ซึ่งทำงานก่อนการทำ commit เสร็จสมบูรณ์ เพื่อตรวจสอบ commit message ได้
- หากต้องการแก้ไข commit message สามารถเขียนสคริปต์ที่เกี่ยวข้องใน prepare-commit-msg hook ได้
*วิธีทำ commit message อัตโนมัติของ Infograb
- สร้างระบบทำ commit message อัตโนมัติด้วย Husky และ Commitlint
- Husky คือ npm module ที่ช่วยจัดการ Git Hooks โดยจะสร้างไฟล์ hook ที่มีสคริปต์อยู่ภายใต้ไดเรกทอรี
.huskyจากนั้นเมื่อรันคำสั่งnpx husky installสคริปต์นั้นจะถูกลงทะเบียนกับ git - commitlint เป็นเครื่องมือสำหรับจัดการ commit convention ได้ง่ายและตรวจสอบ commit message โดยเขียน commit convention ที่ทีมกำหนดไว้ในรูปแบบ JSON แล้วใช้คำสั่ง commitlint เพื่อตรวจสอบข้อความ
1)กำหนด commit convention ในรูปแบบของ commitlint
- กำหนดคุณสมบัติที่เหมาะกับแต่ละทีมในไฟล์
commitlint.config.tsโดยอิงจากโครงสร้างพื้นฐานของ commit message
2)ลงทะเบียน commitlint กับ Husky
- ลงทะเบียนคำสั่ง commitlint ใน commit-msg hook โดยใส่สคริปต์ไว้ในไฟล์
.husky/commit-msg
3)เพิ่มระบบอัตโนมัติ
- ทำให้งานอย่างการติดอีโมจิหรือแทรกหมายเลข issue เป็นอัตโนมัติ
- ในทีม Product ของ Infograb ตั้งค่าให้เมื่อกรอกแค่ type (
feat,fix) ระบบจะเพิ่มอีโมจิโดยอัตโนมัติ, แก้ตัวอักษรแรกของ type ให้เป็นตัวพิมพ์ใหญ่โดยอัตโนมัติ, และถ้ามีหมายเลข issue อยู่ใน branch ก็จะเติมหมายเลข issue ที่ footer ให้อัตโนมัติ - สามารถใส่สคริปต์อัตโนมัติไว้ใน prepare-commit-msg hook ได้
2 ความคิดเห็น
ใช้คู่กับ commitizen ก็ดีเหมือนกัน
ขอบคุณสำหรับเครื่องมือดีๆ ครับ