Git flow คืออะไร มาลองใช้ Git flow กันเถอะ
สวัสดีครับ ผมทินกร มณีวงษ์ครับ!
ครั้งนี้ผมจะมาพูดถึงเรื่อง Git flow
Git flow คืออะไร
Git flow คือ หนึ่งในกลยุทธ์การพัฒนาที่ใช้การทำงานหรือความสามารถของ Branch git ในรูปแบบการแตก Branch ออกมาเพื่อพัฒนา feature ที่ต้องการ ซึ่งเราสามารถเลือกใช้ Git flow ในการจัดการซอร์สโค้ดเพื่อพัฒนาให้มีสิทธิภาพมากขึ้น เนื่องจากว่ามีกฎเกณฑ์การใช้งานและมีการทำงานร่วมกันกับผู้พัฒนาคนอื่น แต่เราสามารถลดปัญหาที่จะเกิดขึ้นระหว่างการทำงานร่วมกันได้ ปัจจุบันนี้การใช้งาน Git flow ถูกนำมาใช้ในโปรเจ็กต์อย่างแพร่หลาย (แต่ก็ไม่ได้ถูกนำมาใช้ในโปรเจ็กต์ทั้งหมด)
หัวข้อต่อไป จะอธิบายเกี่ยวกับการใช้งาน Branch ที่ใช้ใน Git flow
Branch ของ Git flow
จากแผนภาพ Git flow จะแบ่งการทำงานของ Branch ออกเป็น 5 ส่วน
- Main Branches คือ Branch หลักที่เป็นศูนย์กลาง จะมี 2 Branch
- Branch
master
- Branch
develop
- Branch
- Supporting Branches คือ Branch ที่คอยสนับสนุน Branch หลัก จะมี 3 Branch
- Branch
hotfix
- Branch
release
- Branch
feature
- Branch
ลักษณะการทำงานของแต่ละ Branch มีดังนี้
- master
- เป็น Branch สำหรับจัดการซอร์สโค้ดเพื่อ release ขึ้นไปที่ production ให้กับผู้ใช้งาน
- ทำการติดเวอร์ชันแท็ก
- ในส่วนนี้จะไม่ทำการพัฒนางาน
- develop
- เป็น Branch ที่ดำเนินการพัฒนางานเป็นหลัก
- แก้ไขบั๊ก
- พัฒนาโดยสร้าง Branch feature ใหม่ขึ้นมา
- feature
- เป็น Branch ที่ถูกสร้างขึ้นจาก Branch develop
- ทำการพัฒนา feature ใหม่
- ถ้างานที่พัฒนาเสร็จแล้ว จะทำการ Merge ไปที่ Branch develop
- release
- เป็น Branch ที่ถูกสร้างขึ้นจาก Branch develop
- เป็น Branch ที่ใช้สำหรับดำเนินการ QA เพื่อที่จะทำการ Test หรือปรับแต่งรายละเอียดให้สมบูรณ์ เช่น ทำการแก้บั๊กก่อนที่จะ release
- เมื่อทำการ QA เสร็จแล้ว จะทำการ Merge ไปที่ Branch master และ Branch develop
- hotfix
- ถ้าเจอบั๊กอยู่ในเวอร์ชันที่ release ไปแล้ว จะทำการแตก Branch ออกมาจาก master และทำการแก้ไขโดยด่วน
- หลังจากที่ทำการแก้ไขแล้ว จะทำการ Merge ไปที่ Branch master และ Branch develop ทันที
ด้วยวิธีนี้ Git flow จะช่วยจัดการซอร์สโค้ดในระหว่างที่มีการระบุวัตถุประสงค์ของแต่ละ Branch ด้วยกระบวนการสร้าง แก้ไข และ merge Branch
วิธีการใช้ Git flow
เราจะมาทำการจำลองการติดตั้ง Git และ Git flow ในหัวข้อนี้
การเริ่มต้น Git flow
ขั้นตอนแรก เราจะมาเริ่มต้นที่ Git flow
git flow init -d
Command line option-d
สามารถกำหนดชื่อ Branch ให้เป็นค่าเริ่มต้นได้โดยอัตโนมัติ
ทำการตรวจสอบ Branch โดยใช้คำสั่งgit branch
git branch * develop master
หลังจากที่สร้าง Branch develop กับ Branch master ขึ้นมาแล้ว จะถูก checkout ไปที่ Branch develop ตามตัวอย่างด้านบน
การพัฒนา feature ด้วย Branch feature
ให้ใช้คำสั่งstart
และสร้าง Branch feature เพื่อพัฒนา feature ใหม่
git flow feature start <feature name>
เมื่อ run คำสั่งgit branch
และทำการตรวจสอบ
git branch develop * feature/<feature name> master
จะเห็นว่า Branchfeature/<feature name>
จะถูกสร้างขึ้นมาและ checkout ไปโดยอัตโนมัติ จากนั้นทำการพัฒนา<feature name>
ให้ทำการพัฒนา feature ใหม่ด้วย Branch นี้ ต่อมาให้ทำการสร้างไฟล์ text ขึ้นมา 1 ไฟล์
touch gf-handson.txt
ซึ่งการพัฒนา feature เสร็จสมบูรณ์แล้ว ต่อมาให้ทำการ merge Branch develop ด้วยคำสั่งfinish
git flow feature finish <feature name>
เมื่อ run คำสั่งนี้ไปแล้ว ขั้นตอนต่อไปจะถูกดำเนินการโดยอัตโนมัติ
- merge Branch feature
- ลบ Branch feature
- checkout ไปที่ Branch develop
ถ้าในกรณีที่กำลังทำงานร่วมกันกับผู้พัฒนาคนอื่นโดยใช้แพลตฟอร์มอย่าง GitHub อยู่นั้น ก็สามารถที่จะ push Branch feature ไปยัง repository โดยใช้คำสั่งpublish
ได้เช่นกัน
git flow feature publish <feature name>
ในทางกลับกัน หากต้องการดึงข้อมูล Branch feature จาก repository กลับมา ก็ให้ใช้คำสั่งpull
git flow feature pull origin <feature name>
การเตรียม Release
ถ้า merge feature ทั้งหมดเพื่อที่จะ release ไปที่ Branch develop แล้ว จะทำการสร้างและทำการ QA ที่ Branch release
การสร้าง Branch release
git flow release start <version>
เมื่อตรวจสอบgit branch
อีกครั้ง
git branch develop master * release/<version>
จะเห็นว่า Branchrelease/<version>
ถูกสร้างขึ้นและ checkout โดยอัตโนมัติเหมือนตัวอย่างด้านบน จากนั้นทำการ QA ที่ Branch release นี้
ถ้าเสร็จจากการทำ QA แล้ว ก็พร้อมที่จะ release แล้วก็จะเสร็จสมบูรณ์ จากนั้นทำการ merge Branch master และ Branch develop ด้วคำสั่งfinish
git flow release finish <version>
เมื่อ run คำสั่งนี้แล้ว ขั้นตอนต่อไปจะถูกดำเนินการโดยอัตโนมัติ
- merge Branch release ไปที่ Branch master
- merge Branch release ไปที่ Branch develop
- ลบ Branch release
ถ้าในกรณีที่กำลังทำงานร่วมกับผู้พัฒนาคนอื่นที่เหมือนกับ Branch feature ก็ให้ push ไปยัง repository ด้วยคำสั่ง publish
git flow release publish <version>
ในกรณีที่จะดึงข้อมูล Branch release จาก repository มานั้น ให้ใช้คำสั่งtrack
แล้วก็ต้องระวังการใช้คำสั่ง เนื่องจากว่าไม่ใช่วิธีการpull
git flow release track <version>
Release
ขั้นตอนนี้ Branch master จะมีซอร์สโค้ดของเวอร์ชัน release ใหม่ออกมา
สุดท้ายนี้ จะทำการpush
Branch master พร้อมกับ Tag ไปยัง ripository และทำการ release
git push --tags
Hotfix
hotfix คือเมื่อเกิดบั๊กในเวอร์ชันที่ release ไปแล้ว จะสามารถแก้ไขด่วนได้ที่ Branch hotfix
ขั้นตอนแรก สร้าง Branch hotfix
git flow hotfix start <version>
หลังจากที่แก้ไขบั๊กโดยด่วนใน Branch hotfix ที่สร้างขึ้นมาแล้ว ก็ให้ merge ไปยัง Branch master โดยใช้คำสั่งfinish
git flow hotfix finish <version>
เมื่อ run คำสั่งนี้แล้ว ขั้นตอนต่อไปจะถูกดำเนินการโดยอัตโนมัติ
- merge Branch hotfix ไปยัง Branch master
- merge Branch hotfix ไปยัง Branch develop
- ลบ Branch hotfix
ด้วยวิธีนี้ สามารถใช้ model Git flow ในการพัฒนาโปรเจ็กต์เพื่อให้มีประสิทธิภาพมากขึ้นได้อีกด้วย
สรุป
จนถึงตอนนี้ก็ได้อธิบายเกี่ยวกับแนวคิดและการพัฒนาของ Git flow ไปแล้ว
สิ่งหนึ่งที่ควรระวังขณะที่พัฒนางานด้วย Git-flow คือการหลีกเลี่ยงที่จะทำให้เกิด conflict ของซอร์สโค้ดในแต่ละ Branch ตัวอย่างเช่น Branch feature ที่สร้างจาก Branch develop ต้องมีข้อมูลของ develop อยู่เสมอ
!ในกรณีที่ทำงานร่วมกับผู้พัฒนาคนอื่นหรือในทีมโดยใช้แพลตฟอร์มอย่าง GitHub ให้ทำการ push กับ pull บ่อยๆ เพื่อป้องกันการเกิด conflict
(ลิงก์ด้านล่างนี้คือ บล็อกของ Vincent Driessen ผู้สร้าง Git flow)
หวังว่าเนื้อหาบล็อกนี้จะมีประโยชน์กับเพื่อนๆ ไม่มากก็น้อย
ขอขอบคุณที่มา: Git flowをざっと整理してみた