Develop Branch คือสาขาการรวมหลักใน Git Flow ที่ใช้รวมสาขา feature ที่เสร็จสมบูรณ์ทั้งหมดก่อนเตรียมการเผยแพร่ แตกต่างจาก main ตรงที่ develop มีการเปลี่ยนแปลงล่าสุดแต่ยังไม่ได้เผยแพร่ — ที่นี่เป็นการรวมโค้ดประจำวันจากนักพัฒนาทุกคนในทีม ตามข้อมูลจาก Atlassian, 2024 develop เป็นสาขาที่จำเป็นใน Git Flow และให้สภาพแวดล้อมการรวมที่เสถียรสำหรับทีม
ประเด็นสำคัญ
Develop Branch (สาขาการพัฒนา) คือสาขาที่มีอายุยาวใน Git Flow ที่ทำหน้าที่เป็นศูนย์กลางสำหรับการรวมโค้ดจากนักพัฒนาทั้งหมด สาขา feature จะถูกรวมเข้าไปหลังจากพัฒนาเสร็จและผ่านการตรวจสอบโค้ด
โค้ดใน develop อยู่ในสถานะที่พร้อมสำหรับการสร้างการเผยแพร่เสมอ แม้ว่าจะยังไม่ได้ปรับใช้ในการผลิต ซึ่งหมายความว่าฟีเจอร์ทั้งหมดใน develop ผ่านการตรวจสอบ การทดสอบ และการตรวจสอบการรวมแล้ว แต่ยังคงรอบรอบการเผยแพร่ของตน
แตกต่างจาก main ที่โค้ดแต่ละเวอร์ชันคือการเผยแพร่ develop มีการเปลี่ยนแปลงอย่างต่อเนื่อง คอมมิตใน develop จะปรากฏขึ้นเมื่อสาขา feature ถูกรวม ซึ่งสามารถเกิดขึ้นได้หลายครั้งต่อวัน
ตามข้อมูลจาก Vincent Driessen, 2010 develop เป็นองค์ประกอบสำคัญของโมเดลการสร้างสาขาที่ประสบความสำเร็จ เนื่องจากแยกงานร่างออกจากเวอร์ชันที่พร้อมเผยแพร่
การเข้าใจความแตกต่างระหว่าง develop และ main เป็นสิ่งสำคัญสำหรับการทำงาน Git Flow ที่ถูกต้อง สาขาเหล่านี้มีหน้าที่ต่างกันและมีข้อกำหนดความเสถียรที่แตกต่างกัน
| คุณลักษณะ | Develop | Main / Master |
|---|---|---|
| วัตถุประสงค์ | การรวมฟีเจอร์ใหม่ | โค้ดเผยแพร่ที่เสถียร |
| ความเสถียร | สูง (หลังทดสอบ) | สูงสุด (การผลิต) |
| ความถี่ของคอมมิต | ทุกวัน (รวม feature) | ต่อการเผยแพร่ (ทุก 1-4 สัปดาห์) |
| แหล่งที่มาของสาขา | จากนั้นสร้าง feature | จากนั้นสร้าง hotfix |
| การรวม | จาก feature ผ่าน PR | จาก release ผ่าน merge |
การแบ่งเป็น develop และ main ช่วยให้ทีมสามารถรวมโค้ดใหม่ได้อย่างต่อเนื่องโดยไม่เสี่ยงต่อความเสถียรของเวอร์ชันการผลิต นักพัฒนาสามารถเห็นโค้ดของตนใน develop ทันทีหลังจาก PR ได้รับการอนุมัติ แม้กระทั่งก่อนการเผยแพร่อย่างเป็นทางการ
ในโมเดล Git Flow develop อยู่ในตำแหน่งศูนย์กลางระหว่างสาขา feature (แหล่งที่มาของการเปลี่ยนแปลง) และสาขา release (การเตรียมการเผยแพร่) การเข้าใจลำดับชั้นนี้เป็นพื้นฐานของการสร้างสาขาที่มีประสิทธิภาพ
โครงสร้างนี้รับประกันว่า develop จะมีโค้ดล่าสุดพร้อมฟีเจอร์ใหม่ทั้งหมดเสมอ ในขณะที่ main มีเฉพาะโค้ดการผลิตที่ผ่านการตรวจสอบแล้ว ซึ่งสำคัญโดยเฉพาะสำหรับโปรเจกต์มือถือที่มีรอบการตรวจสอบยาวใน App Store และ Google Play
Develop ทำหน้าที่เป็นตัวเชื่อมกลางระหว่างสาขา feature, release และ hotfix การเข้าใจทิศทางการรวมเป็นสิ่งจำเป็นในการป้องกันความขัดแย้งและการสูญเสียคอมมิต
คุณภาพโค้ด ใน develop ต้องสูง แต่ไม่สมบูรณ์แบบ แตกต่างจาก main ที่ข้อผิดพลาดทุกครั้งหมายถึง hotfix เร่งด่วน develop อนุญาตให้มีข้อบกพร่องเล็กน้อยที่จะแก้ไขก่อนการเผยแพร่
ข้อกำหนดขั้นต่ำสำหรับโค้ดก่อนรวมใน develop:
การตรวจสอบอัตโนมัติในไปป์ไลน์ CI/CD ควรทำงานทุกครั้งที่มีการ push ไปยัง develop หากบิลด์พัง นักพัฒนาที่รับผิดชอบต้องแก้ไขปัญหาภายในหนึ่งชั่วโมงหรือย้อนกลับคอมมิตของตน
การตั้งค่า GitHub Actions สำหรับ develop รับประกันว่า PR ทุกรายการผ่านการตรวจสอบอัตโนมัติก่อนรวม ไปป์ไลน์ทั่วไปประกอบด้วยการสร้าง การทดสอบ และ linting
# GitHub Actions — ตรวจสอบ develop หลังการรวม
name: Develop CI
on:
pull_request:
branches: [develop]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Unit tests
run: ./gradlew testDebug
- name: Lint
run: ./gradlew lint
- name: Build
run: ./gradlew assembleDebug
การรวมใน develop ต้องปฏิบัติตามกฎที่เข้มงวดเพื่อรักษาความเสถียรของสาขาการรวม การละเมิดกฎเหล่านี้นำไปสู่ความขัดแย้ง บิลด์ที่พัง และการเสียเวลาของทีม
กฎ PR ต้องเป็นปัจจุบัน มีความสำคัญเป็นพิเศษ หากสาขา feature ถูกสร้างขึ้นเมื่อสัปดาห์ที่แล้วและ develop ขยับไป 50 คอมมิต การรวมโดยตรงอาจนำไปสู่ความขัดแย้งที่ควรแก้ไขในบริบทของ PR มากกว่าใน develop
กฎการป้องกันสาขา คือการตั้งค่าในระดับ GitHub, GitLab หรือ Bitbucket ที่ป้องกันการเปลี่ยนแปลงที่ไม่ถูกต้องใน develop พวกมันรับประกันว่าแม้การ push โดยไม่ตั้งใจจะไม่ทำลายสาขาการรวม
กฎการป้องกันที่แนะนำสำหรับ develop:
การตั้งค่าการป้องกัน develop ใช้เวลา 10 นาทีแต่ป้องกันการหยุดทำงานเป็นสัปดาห์ที่เกี่ยวข้องกับสาขาการรวมที่เสียหาย สำหรับโปรเจกต์มือถือที่มีทีมหลายแพลตฟอร์ม นี่มีความเกี่ยวข้องเป็นพิเศษ
ลองพิจารณาวันทั่วไปของนักพัฒนา: ตอนเช้าพวกเขาอัปเดต develop สร้างสาขา feature ใหม่ และหลังจากทำงานเสร็จก็รวมการเปลี่ยนแปลงกลับไปยัง develop
# การซิงค์ develop ตอนเช้า
git checkout develop
git pull origin develop
# การสร้างสาขา feature ใหม่จาก develop
git checkout -b feature/add-push-notifications
# กำลังทำงานบนฟีเจอร์...
git add . && git commit -m "Add FCM integration"
# การอัปเดต develop ระหว่างการพัฒนา
git fetch origin develop
git rebase origin/develop
# หลัง PR อนุมัติ — อัปเดต develop ในเครื่อง
git checkout develop
git pull origin develop
git branch -d feature/add-push-notifications
คำสั่ง git pull ใน develop ดำเนินการสองอย่างพร้อมกัน: git fetch (ดึงคอมมิตใหม่จากเซิร์ฟเวอร์) และ git merge (รวมกับสาขาท้องถิ่น) สำหรับ develop นี่คือวิธีการซิงโครไนซ์มาตรฐาน
หากโค้ดที่ทำให้บิลด์พังเข้าสู่ develop ต้องดำเนินการอย่างรวดเร็ว ทุกชั่วโมงที่พัฒนาหยุดทำงานคืองานที่ถูกขัดขวางของทีมพัฒนาทั้งหมด
หากโค้ดที่ทำให้บิลด์พังเข้าสู่ develop ให้ใช้ git revert เพื่อสร้างคอมมิตใหม่ที่ยกเลิกการเปลี่ยนแปลงที่มีปัญหา อย่าใช้ git reset ใน develop — มันจะเขียนประวัติที่สมาชิกทีมคนอื่นมีอยู่แล้วใหม่
# ค้นหาคอมมิตที่มีปัญหา
git log --oneline develop
# ยกเลิกคอมมิตผ่าน revert (ปลอดภัย)
git revert a1b2c3d
# ส่งการแก้ไขไปยัง develop ระยะไกล
git push origin develop
# ดูการเปลี่ยนแปลงในคอมมิตที่ระบุ
git show a1b2c3d --stat
คำถามที่พบบ่อย
สำหรับโปรเจกต์ที่มีนักพัฒนาหนึ่งหรือสองคน develop มักจะเกินความจำเป็น — main และสาขา feature ก็เพียงพอแล้ว เมื่อทีมเติบโตถึง 3+ คน develop กลายเป็นสิ่งจำเป็นในการแยกฟีเจอร์ที่ยังไม่เสร็จออกจากโค้ดการผลิตที่เสถียร
ไม่ การคอมมิตโดยตรงไปยัง develop เป็นสิ่งต้องห้ามในโปรเจกต์มืออาชีพใด ๆ การเปลี่ยนแปลงทั้งหมดผ่าน Pull Request พร้อมการตรวจสอบโค้ดและการตรวจสอบอัตโนมัติ ข้อยกเว้นคือการแก้ไขด้านการดูแลระบบของ README หรือการกำหนดค่า CI แต่แม้แต่สิ่งเหล่านี้ก็ควรทำผ่าน PR
ใน trunk-based development ไม่มีสาขา develop แยกต่างหาก — นักพัฒนาทั้งหมดทำงานใน main ด้วยสาขา feature ที่สั้นมาก (1-2 วัน) นี่เป็นทางเลือกแทน Git Flow ที่ได้รับความนิยมในวัฒนธรรม DevOps ที่มีระบบอัตโนมัติการทดสอบในระดับสูง
หลังจากการเผยแพร่แต่ละครั้ง สาขา release จะถูกรวมกลับไปยัง develop เพื่อรวมการแก้ไขทั้งหมดที่ทำระหว่างการเตรียมการเผยแพร่ หากไม่ทำเช่นนี้ develop จะแตกต่างจากโค้ดที่เผยแพร่ ทำให้เกิดความขัดแย้งในการเผยแพร่ครั้งถัดไป
หาก develop พัง นักพัฒนาอาวุโสจะสร้างสาขา hotfix จากคอมมิตที่เสถียรล่าสุด แก้ไขปัญหา และรวมการแก้ไขโดยตรงไปยัง develop ผ่าน PR ที่มีสถานะพิเศษ หลังจากกู้คืน จะมีการวิเคราะห์สาเหตุที่แท้จริง
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม