Git Branching Strategies

กลยุทธในการจัดการ branch นั้นเป็นหนึ่งในกุญแจสำคัญที่ช่วยให้การใช้งาน Git มีประสิทธิภาพยิ่งขึ้น ช่วยลดความยุ่งเหยิงในการทำงานร่วมกันให้น้อยลง บทความก่อนหน้านั้นเราได้กล่าวถึง

บทนี้จะพูดถึงกลยุทธในการบริหารจัดการ Branch บน Git อย่างไรให้มีประสิทธิภาพ

Branching คืออะไร?

Branching คือการแยก Source Code ออกจาก Source Code หลักเพื่อให้นักพัฒนาสามารถทำงานได้อย่างอิสระ โดยการเเปลี่ยนแปลงของ Source Code ในแต่ละ Branch ที่แยกออกมานั้นจะไม่ส่งผลกระทบต่อ Source Code หลักและ Source Code ของนักพัฒนาคนอื่น ๆ จนกว่าสิ่งที่เปลี่ยนแปลงนั้นจะถูก Merge กลับมาที่ Source Code หลัก

ทำไมต้องมีกลยุทธในการจัดการ?

ในการพัฒนาซอฟต์แวร์นั้นส่วนใหญ่แล้วล้วนแต่ต้องทำงานเป็นทีม สิ่งที่สะท้อนให้เห็นถึงประสิทธิภาพของทีมได้ชัดเจนที่สุดนั้นคือ ประสิทธิภาพของ Source Code โดยเฉพาะอย่างยิ่งในปัจจุบันที่ทุกอย่างต้องมีความคล่องตัว Source Code ต้องมีความเสถียร พร้อมที่จะ Release ออกไปเป็น Product/Service ได้ตลอดเวลา การบริหาร Branching นั้นจึงถือเป็นส่วนหนึ่งของการบริหารทีม

หลักการในการบริหารจัดการ Branch นั้นมีอยู่ 4 หลักใหญ่

GitFlow

กลยุทธของ GitFlow นั้นจะแบ่ง Branch ออกทั้งหมด 5 ประเภท คือ

  1. Master คือ Branch หลักโดยในหนึ่ง Repository จะมีเพียง Branch เดียวส่วนใหญ่มักจะใช้ชื่อว่า Master หรือ Main สิ่งที่สำคัญที่สุดคือต้องเป็น Protected branch (ไม่อนุญาติให้ใครก็ตาม push source code เข้ามาโดยตรง)
  2. Develop คือ Branch ตั้งต้นสำหรับให้นักพัฒนานำโค้ดไปพัฒนาต่อ ซึ่ง Branch นี้จำเป็นต้องเป็น protected branch เช่นกันเพื่อให้ Source Code มีความเสถียร พร้อมที่จะถูกนำไปพัฒนาต่อได้ทันที
  3. Feature เป็น Branch ที่นักพัฒนาแต่ละคนแตกออกมาจาก Develop เพื่อพัฒนา Feature ต่าง ๆ
  4. Release คือ Branch สำหรับเตรียมความพร้อมของ Source Code ก่อนที่จะปล่อยออกไปให้ผู้คนใช้งาน โดย Source Code ของ Branch นี้จะต้องถูก Merge กลับไปทั้ง Master และ Develop
  5. Hotfix นั้นเหมือนกับ Release แต่แตกต่างกันที่วัตถุประสงค์ในการใช้งาน โดยวัตถุประสงค์หลักคือ ใช้สำหรับแก้บัคสำคัญที่เกิดขึ้นบน Production

GitHub Flow

กลยุทธ GitHub Flow นั้นมีพื้นฐานมาจาก GitFlow เพียงแต่ตัด Branch Release ออกไปเพื่อความคล่องตัวเท่านั้น กลยุทธนี้เหมาะสำหรับทีมขนาดเล็กที่เน้นความคล่องตัว นอกจากนี้ยังสามารถใช้ได้กับงานด้านเอกสารต่าง ๆ ด้วยไม่เฉพาะเจาะจงเพียง Source Code

GitLab Flow

ตรงข้ามกับ GitHub Flow, GitLab Flow นั้นยืนพื้นจาก GitFlow เช่นกันแต่เพิ่มหลักการ Feature-Driven Development (FDD) เข้ามา สิ่งที่แตกต่างคือกลยุทรนี้จะไม่มี Develop ซึ่งเป็น Branch กั้นไม่ให้นักพัฒนาเข้าถึง Master โดยตรง กลยุทธนี้เหมาะสำหรับงานที่ต้องการแยก Environment ออกจากกันเช่น Staging, Pre-Production, Production เพื่อที่จะสามารถแก้ปัญหาในแต่ละ Environment ได้อย่างอิสระ

นอกจากกลยุทธหลักสามกลยุทธนี้แล้ว ยังมีกลยุทธอื่น ๆ เช่น Trunk-based ที่ไม่ได้กล่าวถึง ซึ่งผู้อ่านสามารถไปค้นคว้าเพิ่มเติมหากสนใจ


แหล่งข้อมูลอ้างอิง

  1. A review of Git branching strategies
  2. GitLab Flow
Photo by Pankaj Patel / Unsplash