ในระบบ Git stores repository จะมี directory ที่ชื่อว่า .git ภายในนั้นจะมีสิ่งที่เรียกว่า git hooks ที่อนุญาติให้คุณสามารถเขียน script เพื่อคุมการทำงานของ workflow ได้ แต่โดยปกติแล้ว Git จะไม่สามารถที่จะ push .git ขึ้นไปยัง repository ได้ นั้นหมายความว่า git hooks ที่ผมจะพูดนั้นทำงานได้เฉพาะบน local เท่านั้น ( แต่โชคไม่ทีเท่าไหร่มีคนสามารถหาช่องเจอ โดยอาศัย case-insensitive filesystems ซึ่งสามารถ push .Git หรือ .GIT ขึ้นไปยัง repository ได้ อ่านเพิ่มเติมได้ที่ CVE-2014-9390 )

มาดูสิ่งที่ git เตรียมไว้ให้ใน git hooks กัน

git hooks

เราสามารถอ่านคำอธิบายการทำงานต่างๆ ของแต่ละไฟล์ได้เลย หากต้องการจะใช้งานให้ลบนามสกุล .sample ออก แล้วทำการ change mode ให้สามารถ execute ได้

สิ่งที่ผมอย่างได้ในที่นี้คือ เมื่อมีการสั่ง git commit ให้ทำการ สั่งเทสทุกครั้งก่อนจะ commit จะทำการ commit จะต้องได้ผลของการเทสเป็น PASS เท่านั้น

เรามาดู flow ปกติกันก่อนครับ

Normal Flow

เนื่องจากสิ่งที่เราต้องการคือจะต้องมีกระบวนการเทสก่อนที่จะ commit ดังนั้นเราจะเลือกใช้ pre-commit ใน git hooks

script
change mode to executable

ทดลองแก้ test ให้ FAIL ดู ผลที่ได้จะเป็นแบบข้างล่างนี้

ลองทดสอบ git commit ดูเพื่อดูผลของ git hooks ว่าทำงานได้ไหม

เท่านี้ก็ตรงตามที่เราอยากได้ทุกประการ

Comments are closed.