Sử Dụng Gitflow Trong Dự Án
Hướng Dẫn Sử Dụng Gitflow Trong Dự Án
Gitflow là một chiến lược quản lý branch trong Git, được thiết kế để tổ chức quy trình phát triển phần mềm một cách hiệu quả, đặc biệt phù hợp với các dự án có chu kỳ phát hành phiên bản rõ ràng. Gitflow định nghĩa các loại branch cụ thể với mục đích riêng, giúp đội nhóm phát triển dễ dàng quản lý code, tính năng, sửa lỗi, và các bản phát hành.
1. Gitflow Là Gì?
Gitflow là một mô hình quản lý branch được Vincent Driessen giới thiệu vào năm 2010. Nó sử dụng các branch chính và phụ để quản lý vòng đời phát triển phần mềm, từ phát triển tính năng, sửa lỗi, đến phát hành và bảo trì. Gitflow đặc biệt hữu ích trong các dự án có nhiều nhà phát triển và yêu cầu phát hành phiên bản định kỳ.
2. Các Loại Branch Trong Gitflow
Gitflow sử dụng các loại branch sau, mỗi loại có vai trò và quy tắc riêng:
2.1. Branch Chính (Main Branches)
main
: Lưu trữ lịch sử chính thức của dự án, chỉ chứa code đã sẵn sàng cho production. Mỗi commit trênmain
thường đại diện cho một phiên bản phát hành.develop
: Chứa code mới nhất đã được tích hợp từ các tính năng hoặc sửa lỗi, nhưng chưa sẵn sàng cho production. Đây là branch tích hợp chính cho các nhà phát triển.
2.2. Branch Hỗ Trợ (Supporting Branches)
feature
: Dùng để phát triển các tính năng mới. Branch này được tạo từdevelop
và sau khi hoàn thành sẽ được hợp nhất (merge) trở lạidevelop
. Tên thường bắt đầu bằngfeature/
(ví dụ:feature/login-system
).release
: Chuẩn bị cho một bản phát hành mới. Branch này được tạo từdevelop
để sửa lỗi nhỏ, cập nhật tài liệu, hoặc điều chỉnh phiên bản. Sau khi hoàn tất, nó được merge vào cảmain
vàdevelop
. Tên thường bắt đầu bằngrelease/
(ví dụ:release/v1.0.0
).hotfix
: Xử lý các lỗi khẩn cấp trên production. Branch này được tạo từmain
, sửa lỗi xong sẽ merge vào cảmain
vàdevelop
. Tên thường bắt đầu bằnghotfix/
(ví dụ:hotfix/fix-login-bug
).bugfix
: Dùng để sửa lỗi không khẩn cấp, thường được tạo từdevelop
và merge lạidevelop
. Tên thường bắt đầu bằngbugfix/
(ví dụ:bugfix/ui-alignment`).
3. Quy Trình Làm Việc Với Gitflow
Dưới đây là quy trình chi tiết khi sử dụng Gitflow, kèm theo các câu lệnh Git tương ứng cùng comment giải thích:
3.1. Khởi Tạo Repository Với Gitflow
- Khởi tạo repository và tạo các branch chính:
git init # Khởi tạo một repository Git mới trong thư mục hiện tại git branch develop # Tạo branch develop để lưu trữ code đang phát triển git push origin main # Đẩy branch main lên remote repository git push origin develop # Đẩy branch develop lên remote repository
3.2. Phát triển Tính Năng Mới (Feature)
- Tạo branch
feature
từdevelop
:git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote branch develop git checkout -b feature/<tên-tính-năng> # Tạo và chuyển sang branch feature mới
- Làm việc, commit thay đổi:
git add . # Thêm tất cả các file thay đổi vào staging area git commit -m "Thêm tính năng <mô tả>" # Tạo commit với thông điệp mô tả rõ ràng
- Hoàn thành, merge lại
develop
:git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote để tránh xung đột git merge --no-ff feature/<tên-tính năng> # Merge branch feature vào develop, giữ lịch sử commit riêng git push origin develop # Đẩy code đã merge lên remote branch develop
- Xóa branch
feature
:git branch -d feature/<tên-tính năng> # Xóa branch feature cục bộ sau khi merge
3.3. Chuẩn bị phát hành Bán Hành (Release)
- Tạo branch
release
từdevelop
:git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote git checkout -b release/<phiên bản> # Tạo và chuyển sang branch release mới
- Sửa lỗi nhỏ, cập nhật version, commit:
git add . # Thêm các thay đổi (ví dụ: sửa lỗi, cập nhật changelog) vào staging area git commit -m "Cập nhật phiên bản <phiên bản>" # Tạo commit với mô tả rõ ràng
- Merge vào
main
vàdevelop
:git checkout main # Chuyển sang branch main git pull origin main # Cập nhật code mới nhất từ remote main git merge --no-ff release/<phiên-bản> # Merge branch release vào main, giữ lịch sử commit riêng git tag v<phiên-bản> # Tạo tag để đánh dấu phiên bản phát hành git push origin main # Đẩy branch main lên remote repository git push origin v<phiên-bản> # Đẩy tag phiên bản lên remote repository git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote develop git merge --no-ff release/<phiên bản> # Merge branch release vào develop để đồng bộ git push origin develop # Đẩy code đã merge lên remote branch develop
- Xóa branch
release
:git branch -d release/<tag-name> # Xóa branch release cục bộ sau khi merge
3.4. Sửa Lỗi Khẩn Cấp (Hotfix)
- Tạo branch
hotfix
từmain
:git checkout main # Chuyển sang branch main git pull origin main # Cập nhật code mới nhất từ remote main git checkout -b hotfix/<mô-tả-lỗi> # Tạo và chuyển sang branch hotfix mới
- Sửa lỗi, commit:
git add . # Thêm các thay đổi sửa lỗi vào staging area git commit -m "Sửa lỗi <mô-tả>" # Tạo commit với mô tả rõ ràng
- Merge vào
main
vàdevelop
:git checkout main # Chuyển sang branch main git pull origin main # Cập nhật code mới nhất từ remote main git merge --no-ff hotfix/<mô-tả-lỗi> # Merge branch hotfix vào main, giữ lịch sử commit riêng git tag v<phiên-bản-hotfix> # Tạo tag để đánh dấu phiên bản hotfix git push origin main # Đẩy branch main lên remote repository git push origin v<phiên-bản-hotfix> # Đẩy tag hotfix lên remote repository git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote develop git merge --no-ff hotfix/<mô-tả-lỗi> # Merge branch hotfix vào develop để đồng bộ git push origin develop # Đẩy code đã merge lên remote branch develop
- Xóa branch
hotfix
:git branch -d hotfix/<mô-tả-lỗi> # Xóa branch hotfix cục bộ sau khi merge
3.5. Sửa Lỗi Không Khẩn Cấp (Bugfix)
- Tạo branch
bugfix
từdevelop
:git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote develop git checkout -b bugfix/<mô-tả-lỗi> # Tạo và chuyển sang branch bugfix mới
- Sửa lỗi, commit:
git add . # Thêm các thay đổi sửa lỗi vào staging area git commit -m "Sửa lỗi <mô-tả>" # Tạo commit với mô tả rõ ràng
- Merge lại
develop
:git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote develop git merge --no-ff bugfix/<mô-tả-lỗi> # Merge branch bugfix vào develop, giữ lịch sử commit riêng git push origin develop # Đẩy code đã merge lên remote branch develop
- Xóa branch
bugfix
:git branch -d bugfix/<mô-tả-lỗi> # Xóa branch bugfix cục bộ sau khi merge
4. Sử Dụng Các Lệnh Git Nâng Cao Trong Gitflow
git rebase
:git checkout feature/<tên-tính-năng> # Chuyển sang branch feature cần rebase git rebase -i <commit-id> # Mở rebase tương tác để chỉnh sửa, gộp, hoặc xóa commit
git stash
:git stash # Lưu tạm các thay đổi chưa commit vào stash git checkout develop # Chuyển sang branch develop git pull origin develop # Cập nhật code mới nhất từ remote develop git checkout feature/<tên-tính-năng> # Quay lại branch feature git stash pop # Khôi phục các thay đổi từ stash
git restore
:git restore <file> # Khôi phục file về trạng thái của commit gần nhất
git cherry-pick
:git cherry-pick <commit-id> # Áp dụng một commit cụ thể từ branch khác vào branch hiện tại
5. Ưu Điểm và Nhược Điểm Của Gitflow
Ưu Điểm
- Tổ chức rõ ràng: Phân chia branch theo mục đích giúp quản lý dự án dễ dàng hơn.
- Hỗ trợ phát hành phiên bản: Phù hợp với các dự án có chu kỳ phát hành định kỳ.
- Hỗ trợ làm việc nhóm: Nhiều nhà phát triển có thể làm việc song song trên các tính năng khác nhau.
Nhược Điểm
- Phức tạp: Nhiều branch và quy trình có thể gây khó khăn cho các dự án nhỏ hoặc đội nhóm mới.
- Xung đột merge: Branch
develop
có thể gặp xung đột nếu tích hợp quá nhiều thay đổi. - Không phù hợp với CI/CD: Gitflow có thể chậm trong môi trường tích hợp và triển khai liên tục.
6. Lưu Ý Khi Sử Dụng Gitflow
- Đặt tên branch nhất quán: Sử dụng tiền tố (
feature/
,release/
,hotfix/
,bugfix/
) để dễ nhận diện. - Kéo code thường xuyên: Sử dụng
git pull
trênmain
vàdevelop
để tránh xung đột. - Kiểm tra kỹ trước khi merge: Đảm bảo test đầy đủ trên branch
release
hoặchotfix
trước khi merge vàomain
. - Sử dụng công cụ hỗ trợ: Các công cụ như GitLab, GitHub, hoặc SourceTree có thể hỗ trợ trực quan hóa quy trình Gitflow.
- Backup thường xuyên: Đẩy code lên remote trước khi thực hiện các thao tác phức tạp như merge hoặc rebase.
7. Kết Luận
Gitflow là một chiến lược mạnh mẽ để quản lý các dự án phần mềm phức tạp, đặc biệt trong môi trường doanh nghiệp. Tuy nhiên, đội nhóm cần thống nhất cách sử dụng và hiểu rõ quy trình để đảm bảo hiệu quả. Nếu dự án nhỏ hoặc áp dụng CI/CD, bạn có thể xem xét các mô hình đơn giản hơn như GitHub Flow.
File này có thể được sử dụng như tài liệu tham khảo để triển khai Gitflow trong dự án của bạn.
All rights reserved