มาใช้ GitFlow กันดีกว่า หมดปัญหากับการแตก Branch ใน Git ที่สับสนจนเกิด Conflict
สำหรับ Developer ทั้งหลาย ทุกคนคงจะคุ้นเคยและใช้งาน Git กันมาบ้างหรือใช้กันอยู่เป็นประจำ ซึ่งถ้าหากใครที่ใช้ Git อยู่น่าจะเคยเจอปัญหาเหมือนๆ กันแน่นอน ก็คือ ไม่รู้ว่าจะแตก Branch ยังไงดี? หรือ Branch ที่แตกออกมาแล้วควรจะ Merge กลับไปที่ไหนก่อน? ถ้า Merge ผิดอาจจะเกิด Conflict ได้ และอีกปัญหาสารพัดที่น่าจะเจอกันมากมาย ซึ่งบทความนี้ผมเลยอยากแนะนำ Git Workflow ที่มีชื่อว่า GitFlow ที่สามารถนำมาเป็นรูปแบบในระหว่างที่เราใช้ Git มาช่วยเก็บ Source code ระหว่างพัฒนากันได้อย่างลงตัวมากขึ้น
GitFlow คืออะไร?
GitFlow เป็นรูปแบบการแตก Branch อย่างหนึ่งเมื่อใช้ Git คิดค้นโดย Vincent Driessen โดยได้รับความสนใจอย่างมากจากนักพัฒนาทั้งหลาย เพราะว่ามันเหมาะกับการนำมาใช้ในการทำงานร่วมกันกับทีมและลดความสับสนได้เป็นอย่างดี
สำหรับ GitFlow จะใช้ความสามารถของ Branch ให้เป็นประโยชน์ โดยจะแบ่งส่วนที่เข้าใจได้ง่ายๆ ออกมาเป็น 5 ส่วนหลักๆ เพื่อแยกสายการทำงานออกมาอย่างชัดเจนในแต่ละขั้นตอน จะช่วยลดปัญหาว่าเราจะแตก Branch ชื่อว่าอะไรดี? เราควรจะ Merge Branch นี้เข้าไปที่ไหนต่อ? เราจะทำยังไงเพื่อลดการ Conflict ให้มากที่สุด? และเมื่อมีคนมาทำงานร่วมกับเราจะเป็นมาตรเดียวกันที่อธิบายหรือสอนได้ง่ายๆ เพื่อให้ระหว่างการที่ทีมพัฒนา สามารถบริการจัดการ Branch ตอนทำงานด้วย Git เป็นไปอย่างสมบูรณ์ที่สุด
Main Branches สายหลักที่ต้องมี
สำหรับ Branch หลัก สิ่งที่จะต้องมีตลอดการทำงาน จะมีสองสายหลักนี้ก็คือ
- master
- develop
เราจะนำ origin/master มาใช้เป็น Branch หลักและใช้สำหรับ Production อยู่เสมอ
เราจะนำ origin/develop มาใช้เป็น Branch สำหรับการพัฒนาฟีเจอร์ใหม่ๆ อยู่เสมอ
Supporting Branches สายสนับสนุนที่ต้องรู้ว่าคืออะไร
ถัดจาก Main Branches develop และ master แล้วนั้น ยังมีอีกส่วนที่จะเป็น Supporting Branches เพื่อช่วยสนับสนุนการพัฒนาแบบขนานระหว่างการทำงานได้เป็นอย่างดี โดยมีดังนี้
- Feature branches
- Release branches
- Hotfix branches
ส่วนสนับสนุนนี้ จะต้องมีการแตก Branch ออกมาจากสายหลักและ Merge เข้ากับสายหลักที่ถูกต้องเพื่อจะช่วยให้การทำงานเกิดการ conflict น้อยที่สุด
GitFlow ทำงานอย่างไร?
Feature Branches จงระลึกอยู่เสมอว่าจะต้องแตก Branch มาจาก develop และ Merge กลับไปที่ develop อยู่เสมอ เมื่อไหร่ที่เราเริ่มต้นการพัฒนา หรือมี Feature ใหม่ๆ ที่ต้องการทำที่อาจต้องใช้ระยะเวลาโดยประมาณ เราจะมาทำงานกันในส่วนนี้มากที่สุด
ต่อมาเมื่อ Dev คนไหนที่ทำงานใน Feature ที่ตัวเองรับไปเสร็จ ก็จะทำการ Merge Branch กลับมายัง develop branch
Release branches สำหรับส่วนนี้จะเป็นการรวม features ทั้งหมดใน develop branch ก่อนจะนำไป Online Production จริง เมื่อไหร่ที่ release branch เกิดบัค เราก็จะแก้ไขบัคนั้นใน release branch ทันที จนกว่าสามารถทำงานได้สมบูรณ์ที่สุด และหลังจากนั้นจะทำการ Merge Release Branch ไปยัง develop และ master พร้อมกับติด Tag version
Hotfix branches ในส่วนนี้ เมื่อไหร่ที่มี Critical Bug หรือปัญหาต่างๆ ที่มีเจอจาก Production เราจะทำการแตก Branch มาจาก Master เพื่อแก้ไขโดยด่วน เมื่อไหร่ที่แก้ไขเสร็จแล้วจะถูก Merge ไปยัง develop และ master ทันทีพร้อมกับติด Tag version
เห็นไหมครับว่าจริงๆ แล้วเมื่อไหร่ที่เรามีรูปแบบการทำงานที่เข้าใจกันได้ง่าย ก็จะสามารถช่วยให้เราทำงานได้ดีขึ้น ใครจะนำไปลองใช้ดูก็ได้นะครับ แต่ถ้าหากใครคิดว่ายังงงๆ อยู่ บทความต่อไป เดี๋ยวผมจะมาแนะนำ Tools สำหรับใช้งาน GitFlow ใน SourceTree กัน แล้วจะรู้ว่าสวรรค์ของการใช้ Git มันมีอยู่จริง ขอบคุณที่สละเวลาอ่านกันนะครับ หวังว่าจะเป็นประโยชน์กับ Developer ทุกคนนะครับ

Sources