
Git flow คืออะไร มาลองใช้ Git flow กันเถอะ
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
สวัสดีครับ ผมทินกร มณีวงษ์ครับ!
ครั้งนี้ผมจะมาพูดถึงเรื่อง 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 ใหม่ออกมา
สุดท้ายนี้ จะทำการpushBranch 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をざっと整理してみた







