Gitflow là gì và bạn có cần biết đến nó?

Gitflow là gì và bạn có cần biết đến nó?

Tin ngắn hàng ngày dành cho bạn
  • Vậy là mình đã chính thức phát hành trang Cửa hàng trên blog 2coffee.dev rồi đó mọi người 🥳

    Đây đơn giản là các sản phẩm mình đã mua và trải nghiệm thấy tốt, phù hợp với giá tiền, với nhu cầu sử dụng của mình và mong muốn chia sẻ đến các bạn đọc. Mọi người ghé qua xem cho vui nha. Ban đầu chưa có nhiều thời gian để chỉnh sửa nội dung. Mình sẽ cập nhật dần dần nha. Cảm ơn mọi người.

    » Xem thêm
  • Cuối tuần đang ngồi làm cái Cửa hàng cho thư giãn mọi người ạ. Trước mình đã làm một lần rồi cơ mà làm cho có, bán được hẳn 1 cuốn sách 😆

    Giờ làm lại, sẽ đa dạng sản phẩm hơn. Dự là đăng mấy sản phẩm đã mua và dùng rồi kèm theo vài dòng nhận xét cho mọi người tham khảo 🤓

    » Xem thêm
  • Một bài viết thú vị về cách làm thế nào để viết blog cho lập trình viên đọc.

    How to Write Blog Posts that Developers Read

    Tóm tắt lại là đi thẳng vào vấn đề và hình dung ra đối tượng độc giả mà bạn đang nhắm đến. Một điều nữa là tác giả đã có hơn 9 năm kinh nghiệm viết, thời gian đầu không ai đọc nhưng sự kiên trì đã giúp anh đạt được mốc 300K - 500K độc giả mỗi năm. Quả là con số ấn tượng phải không ạ 🔥

    » Xem thêm

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, rebase 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.

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/feature-name. (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/fix-name để 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.

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".

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é!

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (1)

Nội dung bình luận...
Avatar
Nguyễn Văn Nhật2 năm trước
Gitflow trên khá rắc rối mà tôi làm ở các công ty thường sẽ có gitflow rút gọn hơn, vấn đề là việc áp dụng mô hình trên khá phức tạp và mọi người có xu hướng làm việc không nghiêm túc hay chỉ thời gian đầu
Trả lời
Avatar
Nguyễn Văn Nhật2 năm trước
Đúng thế như cty mình flow tuỳ dự án bởi không phải maintain nhiều version cùng lúc
Avatar
Tùng Nguyễn2 năm trước
Các cty thường sẽ rút ngắn luồng này xuống