Branching model và ứng dụng đối với việc quản lý dự án

Eastplayers
6 min readDec 6, 2020

Trong giai đoạn đầu mới mở công ty, mỗi cá nhân của Eastplayers là những thành viên đến từ các công ty khác nhau. Ở mỗi công ty, bọn mình lại có 1 kiểu quản lý git tree khác nhau. Nên ngay trước khi bắt đầu làm việc, bọn mình đã thống nhất sẽ tìm hiểu và xây dựng 1 bộ quy tắc về git flow phù hợp để sử dụng cho tất cả project đang chạy. Bọn mình sẽ không áp dụng cứng nhắc 1 git management cho tất cả project. Thay vào đó, cứ mỗi project, bọn mình sẽ xem xét các đặc điểm của project này và lựa chọn áp dụng loại git flow cho phù hợp.

Article này nhằm chia sẻ với các bạn một số kiến thức sơ lược về các branching model thế giới đang dùng (ưu nhược điểm của từng loại).

1. Branching Model là gì?

Theo tìm hiểu của mình, một branching model có thể xem như một cách để cá nhân hoặc team quản lý git tree cho dự án của mình. Sau một khoảng thời gian dài sử dụng các “cách” khác nhau, các engineer trên thế giới đúc kết lại và cho ra đời những “model” làm khuôn mẫu cho việc quản lý git tree đối với từng dự án. Bạn có thể hình dung Branching Model trong quản lý git tree tương tự như Design Pattern cho OOP.

Thế giới hiện nay đang có khá nhiều loại branching model. Có thể liệt kê ra như sau:

  • Git flow
  • Gitlab flow
  • Github flow
  • Oneflow
  • Git trunk-based

Vậy tại sao quản lý git flow lại có nhiều loại model như vậy? Mỗi loại model nên được sử dụng cho các dự án nào? Trong phần 2, bọn mình sẽ trả lời các câu hỏi này.

2. Sơ lược về một số loại branching model chính

2.1 Git Flow

Đây có thể coi là loại cổ điển nhất mà cũng là loại phức tạp nhất trong số các branching model hiện có. Có 2 branch chính luôn tồn tại trong git (long-lived branches) là master và develop. Nhánh master là nhánh tương ứng với production còn nhánh develop là nhánh tương ứng với phần development hiện tại của project. Ngoài 2 branch chính còn có 1 số branch khác ứng với những mục đích khác nhau: feature branches, release branches, hotfix branches. Các branches này sau khi merge vào develop hay master sẽ remove ra khỏi cây git.

Minh hoạ về Git Flow — Branching Model

Pros & cons:

  • Thích hợp đối với những project có thể support nhiều version khác nhau
  • Hay dùng nhất cho open source project vì những project dạng này có sự tham gia của nhiều người nên cần có strict rule rõ ràng để không phải ai cũng có quyền merge lung tung. Hơn nữa, những project này cũng không quá quan trọng về mặt thời gian release nên git flow là kiểu quản lý phù hợp.
  • Vì tính chất “strict rule” của nó: mỗi 1 feature code xong thì phải có PR và có người vào review, test rồi mới cho merge vào master nên phù hợp cho những project có nhiều junior dev để tránh gặp nhiều sai sót.
  • Dùng khi product đó đã ổn định, trong giai đoạn maintenance… vì loại này sẽ giúp đảm bảo quality of code hơn.
  • Không phù hợp với những project cần release nhanh, sửa đổi liên tục như của startup.

2.2 Gitlab Flow

Là 1 loại branching model ít phức tạp hơn so với Git Flow vì đã lược bỏ bớt 1 số flow bị thừa của Git Flow và cải tiến cho phù hợp với CI/CD. Không giống như Git Flow có master và develop là 2 nhánh long-lived, Gitlab Flow có nhiều nhánh long-lived tương ứng với từng môi trường deploy: master, pre-production, production. Server staging tương ứng với nhánh master. Dev muốn merge code lên production thì trước tiên phải tạo PR từ master vào pre-production. Rồi sau đó, để live feature thì phải tạo tiếp PR từ pre-production vào production branch.

Minh hoạ Gitlab Flow

Pros & cons:

  • Chia thành nhiều branch ứng với mỗi environment nên team sẽ luôn có được snapshot của từng environment trên cây git
  • Tốt cho flow của CI/CD
  • Không có validation stage cho những phần code chuẩn bị deploy lên production

2.3 Github Flow

Đây là flow đơn giản nhất trong tất cả. Flow này chỉ có branch chính là master. Nếu dev muốn thêm feature thì tách nhánh ra để làm việc. Sau khi đã code xong thì merge lại vào master.

2.4 Git Trunk-based

Git Tree sử dụng model git trunk-based luôn có 1 branch làm trunk (thông thường là branch master) để developer commit trực tiếp vào đó. Trong các commit của developer merge vào sẽ có thêm unit test (nếu có) kèm theo. Đối với model Git Trunk-based, team development sẽ có 1 người (hoặc 1 nhóm người) làm release manager. Release Manager có thể tạo được các branch release và không developer nào được phép commit trực tiếp vào đây. Release manager tạo branch release rồi xem trên branch trunk có những feature nào cần cho release này, từ đó cherry-pick chúng lên. Release manager đóng vai trò đặc biệt trong flow này: đây là người duy nhất có quyền tạo release branch và fix bug ở trên production.

Minh hoạ Trunk Based development

Pros & cons:

  • Cần phải có rule code rõ ràng và thống nhất cho tất cả các dev bởi vì ai cũng có quyền push code lên master mà không có ràng buộc gì. Hơn nữa, toàn bộ code nằm trên master nên khi review cũng review toàn bộ source code.
  • Các developer cần phải phối hợp ăn ý và tin tưởng nhau mỗi khi push code chung lên master, tự động check và test trên đó. Điều này có thể làm cho flow trở nên thoải mái, loại bỏ việc micromanagement như bên Gitflow nhưng bù lại khó kiểm soát quality code hơn.
  • Git trunk based phù hợp với những project của startup hơn (ví dụ như MVP) vì giảm tải nhiều flow của Gitflow. Không có PR nữa nên thêm feature mới cũng nhanh hơn Gitflow
  • Với những project phải sửa đổi nhiều lần hoặc cần đẩy nhanh về tốc độ, flow này cũng phù hợp về tốc độ release.
  • Tuy nhiên, developer trong flow này cần phải có nhiều kinh nghiệm hơn.

3. Tổng kết

Như vậy, không có một branching model phù hợp cho tất cả project. Khi lựa chọn branching model để apply cho 1 dự án, team leader cần quan tâm đến 2 yếu tố:

  • Đội ngũ developer tham gia phát triển dự án này
  • Tính chất của dự án

Tài liệu tham khảo:

  1. https://nvie.com/posts/a-successful-git-branching-model/
  2. https://codeburst.io/trunk-based-development-vs-git-flow-a0212a6cae64
  3. https://medium.com/factualopinions/branching-models-in-a-nutshell-bf24ea1d888a
  4. https://blog.bitsrc.io/git-for-beginners-learn-the-trunk-workflow-7f2821e34307
  5. https://paulhammant.com/2013/04/05/what-is-trunk-based-development/

We are the players from the East of the globe. We are not only expertise at technical, but we play with technical, delivering break-through and growth-hacking products for your businesses.

Read the original story here: https://eastplayers.io/website-development/branching-model-how-we-used-it-at-eastplayers/

Visit our blog for more articles: https://eastplayers.io/blog

--

--

Eastplayers

We are the players from the East of the globe. We are not only expertise at technical, but we play with technical.