Domain 4 · 9 phút đọc

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:

  1. Tạo nhánh từ main.
  2. Commit thay đổi.
  3. Mở Pull Request, review.
  4. Merge vào main rồ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ánhVai trò
mainCode đã release, ổn định
developTí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 FlowGit FlowTrunk-based
Số nhánh dài hạn1 (main)Nhiều1 (trunk)
Độ phức tạpThấpCaoThấp–trung bình
Tuổi đời nhánh featureNgắnTrung bình–dàiRất ngắn
Hợp vớiWeb, deploy liên tụcRelease theo phiên bảnĐội lớn, CI mạnh
Phụ thuộc CITrung bìnhTrung bìnhCao

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ỉ main luô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.