Lời mở đầu
Trong quá trình phát triển phần mềm, chắc chắn các bạn sẽ phải làm theo team. Gitflow là một mô hình nhánh (branching model) và công cụ giúp tổ chức công việc phát triển phần mềm hiệu quả hơn. Nó hỗ trợ quản lý các nhánh trong quy trình phát triển, đảm bảo sự rõ ràng trong cách triển khai, kiểm thử, và phát hành phần mềm.
Gitflow phù hợp với các dự án có vòng đời phát triển dài, nhiều thành viên, và yêu cầu kiểm soát chặt chẽ giữa các giai đoạn. Công cụ được triển khai qua lệnh git flow
giúp tự động hóa việc tạo, hợp nhất, và xóa các nhánh theo quy tắc.
Các nhánh chính trong Gitflow
Gitflow định nghĩa 5 loại nhánh với các vai trò khác nhau:
1. Nhánh chính (Permanent Branches)
master
- Mục đích: Chứa mã nguồn ổn định đã triển khai lên production.
- Quy tắc:
- Chỉ merge từ
release
hoặchotfix
. - Mọi commit trên nhánh này phải đi kèm kiểm thử kỹ lưỡng.
- Chỉ merge từ
- Thực tế:
- Khi khách hàng yêu cầu hotfix khẩn cấp (ví dụ, fix lỗi thanh toán không thành công), tạo nhánh
hotfix/bug-payment-fix
từmaster
.
- Khi khách hàng yêu cầu hotfix khẩn cấp (ví dụ, fix lỗi thanh toán không thành công), tạo nhánh
develop
- Mục đích: Chứa mã nguồn cập nhật mới nhất, chưa phát hành nhưng đã sẵn sàng kiểm thử.
- Quy tắc:
- Là nơi hợp nhất của tất cả các nhánh
feature
. - Sử dụng để chuẩn bị cho các bản phát hành (
release
).
- Là nơi hợp nhất của tất cả các nhánh
- Thực tế:
- Sau khi hoàn thành tính năng mới, DEV tạo Pull Request từ
feature/add-payment-method
vàodevelop
.
- Sau khi hoàn thành tính năng mới, DEV tạo Pull Request từ
2. Nhánh phụ (Temporary Branches)
feature/*
- Mục đích: Phát triển các chức năng mới.
- Cách tạo:
git flow feature start add-user-login
- Thực tế:
- Khi cần thêm tính năng đăng nhập cho ứng dụng, tạo nhánh feature/add-user-login từ develop. Sau khi hoàn tất, DEV merge lại vào develop và xóa nhánh feature/add-user-login.
Công cụ và command cơ bản của Gitflow
- Cài đặt Gitflow:
git flow init
. - Tạo nhánh mới:
- Feature:
git flow feature start feature-name
. - Release:
git flow release start release-name
. - Hotfix:
git flow hotfix start hotfix-name
.
- Feature:
- Kết thúc nhánh:
- Feature:
git flow feature finish feature-name
. - Release:
git flow release finish release-name
. - Hotfix:
git flow hotfix finish hotfix-name
.
- Feature:
Các lệnh Git thường dùng
Lệnh | Ý nghĩa |
---|---|
git add | Thêm thay đổi vào Staging Area. |
git commit | Lưu thay đổi vào Local Repository. |
git push | Đẩy thay đổi từ Local Repository lên Remote Repository. |
git pull | Cập nhật code mới từ Remote Repository vào Working Directory. |
git fetch | Lấy dữ liệu từ Remote Repository về Local Repository. |
git branch | Tạo và quản lý các nhánh. |
git checkout | Chuyển đổi giữa các nhánh làm việc. |
git merge | Gộp các nhánh lại với nhau. |
git rebase | Tái cấu trúc lịch sử commit để gọn gàng hơn. |
git reset | Hoàn tác thay đổi ở các cấp độ khác nhau. |
git status | Kiểm tra trạng thái hiện tại của Working Directory. |
git log | Xem lịch sử commit. |
git diff | So sánh sự khác biệt giữa các phiên bản. |
git tag | Tạo, liệt kê và quản lý tag. |
Convention khi làm việc với Gitflow
Quy ước về nhánh:
- Tính năng:
feature/*
- Sửa lỗi:
bugfix/*
- Phát hành:
release/*
- Hotfix:
hotfix/*
Quy ước về commit:
feat:
Thêm chức năng mới.fix:
Sửa lỗi.chore:
Thay đổi không ảnh hưởng đến logic (ví dụ: cấu hình, tài liệu).refactor:
Cải thiện code mà không thay đổi chức năng.
Quy trình làm việc với Gitflow
1. Đối với DEV
- Trách nhiệm chính:
- Phát triển tính năng (
feature
). - Sửa lỗi (
bugfix
,hotfix
).
- Phát triển tính năng (
- Quy trình:
- Khởi tạo nhánh mới từ
develop
hoặcmaster
(tùy trường hợp).git flow feature start add-new-payment
- Làm việc trên nhánh riêng, commit thay đổi.
git add . git commit -m "feat: add new payment method"
- Khi hoàn tất, tạo Pull Request để merge vào
develop
. - Xóa nhánh sau khi được merge:
git flow feature finish add-new-payment
- Khởi tạo nhánh mới từ
2. Đối với LEAD
- Trách nhiệm chính:
- Đánh giá code, đảm bảo chất lượng trước khi merge.
- Tổ chức nhánh
release
để chuẩn bị phát hành.
- Quy trình:
- Kiểm tra nhánh
develop
trước khi tạo nhánhrelease
:git flow release start v1.1.0
- Sửa lỗi và cập nhật tài liệu nếu cần thiết.
- Merge
release
vàomaster
vàdevelop
khi hoàn tất:git flow release finish v1.1.0
- Kiểm tra nhánh
3. Đối với EM
- Trách nhiệm chính:
- Quản lý việc phát hành và sửa lỗi khẩn cấp.
- Đảm bảo mọi thay đổi quan trọng đều được cập nhật vào cả
master
vàdevelop
.
- Quy trình:
- Khi có lỗi khẩn cấp, tạo nhánh
hotfix
từmaster
:git flow hotfix start fix-crash-error
- Sửa lỗi, kiểm tra kỹ lưỡng, và merge vào
master
:git flow hotfix finish fix-crash-error
- Khi có lỗi khẩn cấp, tạo nhánh
Case Study: Triển khai Gitflow trong một Sprint thực tế
Bối cảnh
Sprint RC13 kéo dài từ ngày 01/10/2023 đến 15/10/2023, yêu cầu 3 bản phát hành:
RC13-release1
: Ngày 05/10/2023RC13-release2
: Ngày 10/10/2023RC13-release3
: Ngày 15/10/2023
Quy trình thực hiện
Phân chia công việc:
- Tạo nhánh
feature
cho các PBI:git flow feature start add-user-authentication git flow feature start improve-performance
- Merge các tính năng đã hoàn thành vào
develop
.
- Tạo nhánh
Chuẩn bị phát hành:
- Trước ngày phát hành
RC13-release1
, tạo nhánhrelease
:git flow release start RC13-release1
- Fix lỗi trên nhánh
release
nếu cần và merge vàomaster
.
- Trước ngày phát hành
Sửa lỗi khẩn cấp:
- Nếu
RC13-release2
gặp lỗi nghiêm trọng sau khi phát hành, tạo nhánhhotfix
:git flow hotfix start fix-login-error
- Sửa lỗi, kiểm tra, và merge lại
master
vàdevelop
.
- Nếu
Quy tắc trong dự án sử dụng Gitflow
- Không pass CI/CD pipeline → Reject pull request.
- Code phải được review tối thiểu 2 người.
- Không được commit trực tiếp lên
master
hoặcdevelop
.
Kết luận
Gitflow mang lại sự rõ ràng và tổ chức tốt hơn cho quy trình phát triển phần mềm, đặc biệt với các dự án quy mô lớn. Việc hiểu và áp dụng Gitflow sẽ giúp team làm việc hiệu quả hơn, giảm thiểu xung đột code, và đảm bảo sản phẩm chất lượng cao khi đến tay khách hàng.