Workflow cộng tác: GitHub Flow, Git Flow, trunk-based
Collaboration Workflows
Một workflow là quy ước về cách đội dùng branch, merge và release. Chọn đúng workflow giúp đội cộng tác trơn tru. Ba mô hình phổ biến nhất là GitHub Flow, Git Flow và trunk-based development.
Feature branch là nền tảng
Hầu hết workflow đều dựa trên feature branch: mỗi tính năng hay sửa lỗi được làm trên một nhánh riêng, tách khỏi nhánh chính.
# Tạo nhánh từ main cho một tính năng
git switch -c feature/cart
# Làm việc, commit, rồi mở Pull Request về main
git push -u origin feature/cart
Nhánh riêng giúp công việc đang dở không phá nhánh chính, và mỗi nhánh tương ứng một Pull Request để review.
GitHub Flow: đơn giản, liên tục
GitHub Flow chỉ có một nhánh chính (main) luôn deploy được, cùng các nhánh feature ngắn:
- Tạo nhánh từ
main. - Commit thay đổi.
- Mở Pull Request, review.
- Merge vào
mainrồi deploy.
Ưu điểm: dễ hiểu, hợp với continuous deployment (web app deploy thường xuyên). Nhược điểm: không có cấu trúc release tách biệt, ít hợp với phần mềm phát hành theo phiên bản.
Git Flow: nhiều nhánh, có release
Git Flow dùng nhiều nhánh dài hạn với vai trò rõ:
| Nhánh | Vai trò |
|---|---|
main | Code đã release, ổn định |
develop | Tích hợp tính năng đang phát triển |
feature/* | Từng tính năng, nhánh từ develop |
release/* | Chuẩn bị phát hành một phiên bản |
hotfix/* | Sửa khẩn cấp trên bản đã release |
Ưu điểm: cấu trúc chặt chẽ, hợp với phần mềm phát hành theo phiên bản (desktop app, thư viện có version). Nhược điểm: nhiều nhánh, nhiều bước, nặng nề với đội nhỏ deploy liên tục.
Trunk-based development: merge nhanh
Trunk-based development đề cao việc merge thường xuyên vào nhánh chính (trunk/main), nhánh feature sống rất ngắn (thường dưới một ngày).
- Mỗi lập trình viên merge vào trunk nhiều lần mỗi ngày.
- Tính năng chưa xong được ẩn bằng feature flag thay vì nhánh sống lâu.
- Dựa mạnh vào CI tự động để giữ trunk luôn xanh.
Ưu điểm: ít xung đột merge, tích hợp liên tục thực sự, hợp đội lớn deploy nhanh. Nhược điểm: đòi hỏi CI tốt và kỷ luật cao.
So sánh ba mô hình
| Tiêu chí | GitHub Flow | Git Flow | Trunk-based |
|---|---|---|---|
| Số nhánh dài hạn | 1 (main) | Nhiều | 1 (trunk) |
| Độ phức tạp | Thấp | Cao | Thấp–trung bình |
| Tuổi đời nhánh feature | Ngắn | Trung bình–dài | Rất ngắn |
| Hợp với | Web, deploy liên tục | Release theo phiên bản | Đội lớn, CI mạnh |
| Phụ thuộc CI | Trung bình | Trung bình | Cao |
Không có mô hình tốt nhất tuyệt đối
Chọn workflow tùy quy mô đội, nhịp release và mức độ trưởng thành của CI/CD. Đội nhỏ deploy web thường hợp GitHub Flow; phần mềm có version dùng Git Flow; tổ chức lớn hướng tới trunk-based để tích hợp liên tục.
Bắt đầu đơn giản
Nếu chưa chắc, hãy bắt đầu với GitHub Flow. Khi nhu cầu release phức tạp hơn hoặc CI đủ mạnh, chuyển dần sang Git Flow hoặc trunk-based. Đừng dùng mô hình nặng khi đội chưa cần.
Trọng tâm thi
GitHub Flow = 1 nhánh main + feature branch ngắn, hợp deploy liên tục. Git Flow = nhiều nhánh (main/develop/feature/release/hotfix), hợp release theo phiên bản. Trunk-based = merge thường xuyên vào trunk, nhánh rất ngắn, dùng feature flag, đòi hỏi CI mạnh.
Tóm tắt
- Feature branch là nền tảng chung: mỗi tính năng một nhánh riêng, mở PR để review.
- GitHub Flow: chỉ
mainluôn deploy được + nhánh feature ngắn; đơn giản, hợp continuous deployment. - Git Flow: nhiều nhánh (
main,develop,feature,release,hotfix); chặt chẽ, hợp release theo phiên bản. - Trunk-based: merge thường xuyên vào trunk, nhánh rất ngắn, dùng feature flag, dựa mạnh vào CI.
- Không có mô hình tốt nhất tuyệt đối — chọn theo quy mô đội, nhịp release và mức độ CI/CD.