Gitflow là gì? Tại sao các developer cần biết đến điều đó?

6423

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Hàng này công việc của chúng ta thường xuyên tiếp xúc với git, thế nên chắc hẳn mọi người đều biết trong git có các khái niệm về nhánh (branch) cùng các lệnh xử lý nhánh như checkout, merge,  hay là revert…

Khi phát triển thêm một tính năng mới, chúng ta thường checkout từ nhánh hiện tại sang một nhánh khác để làm việc. Môi trường làm việc nhóm sẽ có nhiều người phát triển nhiều tính năng, mỗi tính năng nằm trên mỗi nhánh, chúng có thể phát triển độc lập và song song với nhau. Mọi thứ sẽ thật hoàn hảo nếu như một ngày đẹp trời khi tiến hành merge các nhánh lại với nhau mà không hề xuất hiện bất cứ xung đột (conflic) nào.

Gitflow được sinh ra để quy định những nguyên tắc trong phân nhánh và phát triển tính năng cũng như phát hành sản phẩm. Đó là một quy trình làm việc với git sao cho thuận tiện nhất cho những người phát triển.

Gitflow là gì?

Gitflow là khái niệm chỉ cách phân nhánh và phối hợp phát triển (development), phát hành (release) tính năng bằng cách sử dụng git.

Gitflow được biến tấu theo từng nhóm phát triển, tuỳ vào môi trường và điều kiện thì người quản lý có thể đặt ra những quy tắc về luồng phát triển ứng dụng. Có thể là tự nghĩ ra hoặc là dựa trên một flow đã có từ trước.

Thực tế có rất nhiều mô hình gitflow được giới thiệu, tuy nhiên nổi tiếng nhất là flow dựa trên mô hình phân nhánh của Vincent Driessen.

  Git Submodules và ứng dụng trong việc chia sẻ tài nguyên dùng chung

  Lại bàn về cách commit code trong dự án

Gitflow theo mô hình phân nhánh Vincent Driessen

gitflow Vincent Driessen

Về cơ bản gitflow theo Vincent Driessen sẽ là như sau:

  • Branch khởi đầu sẽ là master. Khi bắt đầu phát triển tính năng sẽ checkout từ master ra develop.
  • Mỗi tính năng sẽ checkout tiếp từ develop ra các nhánh có prefix là feature/. (ví dụ tính năng login là feature/login, tính năng logout là feature/logout…) và phát triển độc lập với nhau. Sau khi hoàn thành thì merge feature vào develop.
  • Đến kì release sẽ merge develop vào release, nhánh release đóng vai trò như là môi trường stagging của dự án. Đó là môi trường gần giống với production nhất. Nhánh release lúc này chỉ gồm các commit fixbug mà không bao gồm commit thêm tính năng nào nữa. Nếu có fixbug phát sinh trên release thì merge lại vào develop.
  • Khi bug đã hết cũng là lúc tiến hành merge release vào master. Tại đây ta có thể đánh dấu tag cho commit đó để làm dấu hiệu phiên bản phát hành tiện lợi cho việc theo dõi và truy vết.
  • Khi chạy production không thể tránh khỏi lỗi phát sinh, khi đó chúng ta checkout từ master ra nhánh có tiền tố hotfix/ để fixbug. Sau khi sửa lỗi xong thì merge nhánh vừa tạo vào develop, từ develop kiểm tra thấy bản fix đã hoạt động thì tiếp tục merge hotfix vào master và kết thúc phiên sửa lỗi.

Tham khảo Job FrontEnd HOT trên TopDev!

Như bạn có thể thấy với mô hình gitflow trên chúng ta cần có ít nhất 3 môi trường để chạy mã là production, stagging và develop tương ứng với 3 nhánh master, release và develop. Tuy nhiên trong thực tế không nhất thiết phải có đầy đủ cả 3 mà tuỳ vào dự án chúng ta sẽ chỉnh sửa lại gitflow cho phù hợp và tối ưu nhất.

Gitflow theo Vincent Driessen khá là phức tạp và có thể làm chậm quy trình phát triển hay số lượng xung đột mã (conflic) cao do số lượng nhánh của nó. Bù lại mọi công việc đều rõ ràng, cách nhánh có nhiệm vụ riêng của nó và dễ dàng thiết lập nhiều môi trường (develop, stagging, production).

Ví dụ chỉ cần môi trường develop và production, nhưng vẫn đảm bảo tính năng được phát triển ở nhánh feature được checkout từ develop, sau khi hoàn thành tính năng merge develop vào master rồi “go production” :D.

Vậy thì ngoài các flow đã nêu trên thì còn flow nào nữa không? Tất nhiên là có rồi :D, Github và cả Gitlab đều đề xuất một gitflow khi làm việc trên nền tảng của họ. Nếu có thời gian tôi sẽ thêm bài viết nói về gitflow của hai ông lớn trong nghề git này.

Tổng kết

Bài viết trên tôi vừa trình bày về khái niệm của gitflow cùng với mô hình gitflow theo biểu đồ phân nhánh của Vincent Driessen. Gitflow được sinh ra để giải quyết vấn đề làm việc nhóm một cách thuận tiện và ít bị conflic nhất, đồng thời gitflow cũng là đặc trưng của một đội phát triển phần mềm. Còn bạn hiện đang áp dụng gitflow nào hãy chia sẻ cho mọi người biết nhé!

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

Xem thêm các việc làm công nghệ hấp dẫn trên TopDev