Git là một công cụ rất mạnh mẽ và tiện lợi nhưng mình thấy một số team vẫn tạo branch một cách bừa bãi và quản lý không hiệu quả trong khi làm việc trong dự án hoặc làm nhóm dẫn đến xung đột có thể xảy ra và rất đau đầu khi merge các branch riêng lẻ.
Vì vậy chúng ta cần có một bộ nguyên tắc chung để xử dụng trong khi làm việc nhóm với Git. Git-flow là quy tắc chung của Git được tạo ra với mục đích quản lý các branch trong lúc làm việc nhóm hiệu quả hơn
Trước khi tìm hiểu về Git-flow thì chúng ta hãy cùng nhau tìm hiểu về Git là gì trước:
Để sử dụng git, bạn cần hiểu một số khái niệm cơ bản như:
Mọi người có thể tìm hiểu thêm về Git tại đây
Có 5 loại branch trong Git-flow
Mục đích của mỗi nhánh được giải thích như sau:
master
Branch:Mục đích chính cua nhánh master
trong Git-flow là để chứa source code có thể triển khai ngay lập tức.
Trong Git-flow, nhánh chính được tạo khi bắt đầu môt dự án và được duy trì trong suốt quá trình phát triển dự án. Nhánh master
có thể được gắn các tag để đánh dấu các version hoặc những dấu mốc release của source. Tất cả những nhánh khác sẽ được merge vào nhánh master
sau khi phát triển xong, kiểm tra và thử nghiệm đầy đủ.
develop
Branch:Nhánh 'develop' cũng được tạo từ lúc bắt đầu dự án đến hết quá trình phát triển dự án. Nhánh develop
chứa source code trước khi triển khai với những tính năng mới đã được phát triển và những tính năng này đang trong quá trình kiểm tra và thử nghiệm.
Khi xây dựng một số tính năn mới, source code sẽ được tách ra từ nhánh develop
để phát triển và được merge lại nhánh develop
sau khi phát triển xong và sẵn sàng cho việc kiểm thử.
Khi phát triển dự án với Git-flow, Chúng ta cần thêm 3 nhánh phụ trợ khác nữa là: feature
, release
, hotfix
. Những nhánh này được sử dụng với mục đích như sau:
feature
Branch:Nhánh feature
là nhánh phổ biến nhất trong Git-flow. Khi cần xây dựng một tính năng mới, chúng ta tạo một nhóm với tên feature-<TÊN-FEATURE>
từ nhánh develop
và sau khi phát triển hoàn tất, kiểm thử và đánh giá kỹ càng, nhánh này sẽ được merge trở lại nhánh develop
.
release
Branch:Nhánh 'release' được khởi tạo khi chuẩn bị xuất bản một version mới, thường được đặt tên như feature-<TÊN-PHIÊN-BẢN>
. Thông thường, trên nhánh release
những lỗi lớn và vấn đề khó đã được giải quyết và chúng ta chỉ xử lý những lỗi nhỏ hoặc những cài đặt đặc biệt không thể thực hiện trên nhánh develop
.
Sau khi triển khai phiên bản mới trên nhánh release
này, chúng ta merge nhánh release
và vào cả nhánh master
và develop
sau đó gán nhãn (tag) phiên bản release vào nhánh master
.
hotfix
Branch:Nhánh hotfix
được tạo để giải quyết một số lỗi nghiêm trọng trực tiếp từ nhánh master
. Những lỗi này thường nghiêm trọng và đòi hỏi xử lý ngay lập tức.
Nhánh hotfix
được tách ra từ nhánh master
và được merge vào cả nhánh master
và develop
sau khi giải quyết xong. Việc merge nhánh hotfix
và nhánh develop
để chắc chắn răng lỗi đã được sửa trong những lần phát hành tới từ nhánh master
.
master
develop
từ master
và các lập trình viên phát triển trong nhánh develop
.develop
branch để phát triển tính năng đăng ký theo dõi, developer B cũng tạo nhánh từ nhánh develop branch để phát triển tính năng thanh toán.feature-*
sẽ được merge lại vào nhánh develop
relese
từ nhánh 'develop'relese-*
được merge lại vào nhánh develop
và nhánh master
hotfix
để sửa lỗi 1 cách khẩn cấp và phân phối phiên bản sửa lỗi ngay lập tức. Nhán hotfix-
được merge vào nhánh master và nhánh develop ngay sau khi sửa lỗi Ngoài Git-flow, chúng tà còn có những bộ nguyên tắc khác đơn gản hơn như Github flow, Gitlab flow.
Git-flow là một bộ nguyên tắc giúp chúng ta làm việc cùng nhau tốt hơn, đỡ những xung đột không đáng có. Nhưng ngay cả khi có những nguyên tắc nhưng không sử dụng nó thì những nguyên tắc này cũng trở nên vô nghĩa.
Như mọi người đều biết, nguyên tắc không tôn tại trong mọi trường hợp và sẽ luôn có những ngoại lệ. Mục tiêu cuối cùng là làm việc hiệu quả và một bộ quy tắc quản lý các nhánh phù hợp với nhóm sẽ được tìm ra sau những lần thử nghiệm và sửa sai.
Tài liệu tham khảo: https://www.gitkraken.com/learn/git/git-flow https://nvie.com/posts/a-successful-git-branching-model/