Git Workflow สำหรับทีม
บทนำ
Git Workflow สำหรับทีมคือแนวทางที่ช่วยให้ทีมสามารถทำงานร่วมกันในโปรเจกต์ที่ใช้ Git โดยการตั้งกฎและขั้นตอนที่ชัดเจนสำหรับการทำงานร่วมกัน ซึ่งช่วยให้การจัดการกับการเปลี่ยนแปลง, การตรวจสอบ, และการรวมโค้ดเป็นไปอย่างราบรื่นและมีประสิทธิภาพ
ในบทนี้เราจะเรียนรู้เกี่ยวกับ Git Workflow ที่ใช้ในทีม รวมถึงการตั้งค่าการทำงานในแบบต่าง ๆ เช่น Git Flow, GitHub Flow, และ GitLab Flow
1. Git Flow
Git Flow เป็นหนึ่งใน Git workflow ที่ได้รับความนิยมในการจัดการ branches และการทำงานร่วมกันในทีม โดยจะมี branch หลัก ๆ 2 ประเภท คือ master และ develop และมีอีกหลาย branch สำหรับการจัดการกับฟีเจอร์, การ release, และ hotfix
1.1 โครงสร้างของ Git Flow
- master: branch หลักที่ใช้เก็บโค้ดที่พร้อมสำหรับการใช้งาน
- develop: branch ที่รวมการเปลี่ยนแปลงทั้งหมดก่อนที่จะ merge เข้าสู่
master - feature branches: ใช้สำหรับพัฒนาฟีเจอร์ใหม่ ๆ โดยเฉพาะ (ชื่อ branch จะขึ้นต้นด้วย
feature/) - release branches: ใช้สำหรับเตรียมการ release โดยการรวมการเปลี่ยนแปลงทั้งหมดที่พร้อม
- hotfix branches: ใช้สำหรับแก้ไขข้อผิดพลาดที่ต้องการแก้ไขด่วน (ชื่อ branch จะขึ้นต้นด้วย
hotfix/)
1.2 ขั้นตอนใน Git Flow
- สร้าง branch
developจากmaster - สำหรับฟีเจอร์ใหม่ ๆ ให้สร้าง branch ใหม่จาก
developและตั้งชื่อเป็นfeature/feature-name - เมื่อฟีเจอร์เสร็จสมบูรณ์ ให้ merge กลับเข้าไปใน
develop - เมื่อถึงเวลาที่จะ release ให้สร้าง branch ใหม่จาก
developและตั้งชื่อเป็นrelease/release-name - เมื่อ release เสร็จสิ้น ให้ merge กลับเข้า
masterและdevelop - หากพบข้อผิดพลาดในการ release ให้สร้าง
hotfix/hotfix-nameและแก้ไขข้อผิดพลาดใน branch นั้น ๆ
1.3 ตัวอย่างคำสั่งใน Git Flow
# สร้าง feature branch
git checkout -b feature/my-feature develop
# ทำการแก้ไขและ commit
git commit -am "Add new feature"
# Merge กลับเข้ามาใน develop
git checkout develop
git merge feature/my-feature
# Push การเปลี่ยนแปลง
git push origin develop
2. GitHub Flow
GitHub Flow เป็น workflow ที่ใช้ในการทำงานกับ GitHub ซึ่งเน้นการทำงานบน master branch โดยตรง โดยใช้ Pull Requests (PRs) สำหรับการรวมการเปลี่ยนแปลงจาก branch อื่น ๆ
2.1 โครงสร้างของ GitHub Flow
- master: branch หลักที่ใช้เก็บโค้ดที่พร้อมสำหรับการใช้งาน
- feature branches: สร้าง branch ใหม่จาก
masterสำหรับทำงานฟีเจอร์ใหม่
2.2 ขั้นตอนใน GitHub Flow
- สร้าง branch ใหม่จาก
masterสำหรับฟีเจอร์ใหม่ - ทำการพัฒนาฟีเจอร์ใน branch นั้น
- เมื่อฟีเจอร์เสร็จสมบูรณ์ ให้ push ไปยัง GitHub และสร้าง Pull Request (PR)
- ทีมงานจะทำการตรวจสอบและ merge PR เข้าไปใน
master - ตรวจสอบการทำงานใน
masterหลังจาก merge และทำการ deploy
2.3 ตัวอย่างคำสั่งใน GitHub Flow
# สร้าง feature branch จาก master
git checkout -b feature/my-feature master
# ทำการแก้ไขและ commit
git commit -am "Add new feature"
# Push ไปยัง GitHub
git push origin feature/my-feature
# สร้าง Pull Request บน GitHub
3. GitLab Flow
GitLab Flow เป็น workflow ที่รวม Git Flow และ GitHub Flow เข้าด้วยกัน โดยรองรับการทำงานทั้งในโหมด CI/CD และการทำงานร่วมกันในทีมที่มีหลายคน
3.1 โครงสร้างของ GitLab Flow
- master: branch หลักที่ใช้เก็บโค้ดที่พร้อมสำหรับการใช้งาน
- feature branches: สร้าง branch สำหรับทำงานฟีเจอร์ใหม่
- release branches: ใช้สำหรับเตรียมการ release
- production branches: ใช้สำหรับโค้ดที่พร้อมสำหรับการ deploy ไปยัง production
3.2 ขั้นตอนใน GitLab Flow
- สร้าง branch ใหม่จาก
masterสำหรับฟีเจอร์ใหม่ - ทำการพัฒนาฟีเจอร์ใน branch นั้น
- เมื่อฟีเจอร์เสร็จสมบูรณ์ ให้ push ไปยัง GitLab และสร้าง Merge Request (MR)
- ทีมงานจะทำการตรวจสอบและ merge MR เข้าไปใน
master - เมื่อถึงเวลาที่จะ release ให้สร้าง release branch และ deploy ไปยัง production
3.3 ตัวอย่างคำสั่งใน GitLab Flow
# สร้าง feature branch จาก master
git checkout -b feature/my-feature master
# ทำการแก้ไขและ commit
git commit -am "Add new feature"
# Push ไปยัง GitLab
git push origin feature/my-feature
# สร้าง Merge Request บน GitLab
4. การทำงานร่วมกันในทีม
ในการทำงานร่วมกันในทีม, การเลือก Git workflow ที่เหมาะสมกับทีมเป็นสิ่งสำคัญ นอกจากนี้ การตั้งค่า Git hooks, การใช้ Pull Requests/ Merge Requests เพื่อรีวิวโค้ด, และการทำ Continuous Integration (CI) / Continuous Deployment (CD) ยังเป็นส่วนสำคัญที่ช่วยให้การทำงานร่วมกันในทีมมีประสิทธิภาพและไม่มีข้อผิดพลาด
สรุป
Git Workflow สำหรับทีมช่วยให้การทำงานร่วมกันในทีมมีระเบียบและชัดเจน โดยใช้การตั้ง branch ที่เหมาะสม เช่น feature, develop, master, และ release ซึ่งช่วยให้สามารถพัฒนา, ทดสอบ, และ deploy โค้ดได้อย่างราบรื่นและมีประสิทธิภาพ