top of page
Tìm kiếm
Ảnh của tác giảthanh pham

Tìm hiểu về Git flow trong phát triển dự án

Đã cập nhật: 13 thg 8, 2021

Trong cuộc đời lập trình viên chắc hẳn ai trong chúng ta cũng đã từng làm việc với Git và có lẽ ai cũng biết lợi ích của nó đem lại. Nhưng dùng là một chuyện để hiểu và quản lý được nó thì lại là một chuyện khác. Vì thế bài viết này mình và mọi người sẽ đi tìm hiểu Git flow để hiểu hơn về quy trình làm việc cùng Git trong qúa trình phát triển dự án.


Git Flow là gì?


Git Flow được Vincent Driessen đưa ra nhằm cải thiện quá trình làm việc cùng Git. Thực chất, đấy là cách chia nhánh và merge nhánh vào khi hoàn thành một tập hợp tính năng hoặc fix.


Git Flow đưa ra các quy ước để triển khai công việc. Nó được tổng kết qua quá trình làm việc thực tiễn của nhiều team trên thế giới. Mục đích là các nhóm công việc triển khai song song nhưng không ảnh hưởng tới nhau. Các  môi trường development, staging và production tách biệt giúp quá trình kiểm thử (QA), feedback và xử lý các issue được gọn gàng và thống nhất hơn.




Các branch chính


  • master: là branch tồn tại xuyên suốt quá vòng đời của phần mềm được tạo mặc định trong Git khi ta tạo repository.

  • develop: là nơi các develop phát triển chính branch luôn tồn tại song song với master

  • feature: là nhánh được tách từ develop nhằm mục đích xây dựng các tính năng riêng mà không phụ thuộc vào nhau

  • release: là nhánh tách từ develop để kiểm tra và fix bug chuẩn bị cho việc ra mắt sản phẩm

  • hotfix: là nhánh tách từ master để fix gấp những bug còn tồn đọng mà trên release chưa xử lý hết


Bây giờ chúng ta sẽ tìm hiểu rõ các branch nhé


1. Master

Đây là branch chính của cả dự án chỉ có thể merge vào từ branch release chứ không được code trực tiếp trên branch này. Sản phẩm được đưa lên production sẽ được lấy ở đây nên code được merge vào master phải được quản lý và xử lý cẩn thận nhất có thể.


Note: Những người mới bắt đầu thường commit trực tiếp vào branch master đây là một thói quen không tốt chút nào

2. Develop

Branch develop là branch trung tâm cho việc phát triển.


Mỗi khi có tính năng mới cần xây dựng thì branch feature sẽ được tách từ branch develop để phát triển

Mỗi khi chuẩn bị release phiên bản mới thì branch release sẽ được tách từ branch develop để test



3. Feature

Các branch feature được sử dụng để phát triển các tính năng mới cho bản release sắp tới hoặc trong tương lai xa. Branch feature sẽ tồn tại miễn là tính năng này đang được phát triển, nhưng cuối cùng sẽ được hợp nhất trở lại develop(khi thêm tính năng mới vào bản release sắp tới) hoặc bị loại bỏ (trong trường hợp thử nghiệm đáng thất vọng).

Các nhánh tính năng thường tồn tại trong repo của dev, không phải trong origin.

Ngoài các tính năng chính thì còn có thể tách thành cách tính năng nhỏ hơn để thuận tiện cho việc phát triển tùy vào cấu trúc cũng như độ phức tạp của dự án




4. Release


Branch release là branch dùng để release sản phẩm như đúng tên gọi của nó. Khi khách hàng cần release một số tính năng thì một branch sẽ được tách từ branch develop ra với tên theo cấu trúc "release/v.1.0.1" . Sau đó sẽ test và fix bug trên branch release, khi xong sẽ merge vào branch master để đẩy sản phẩm lên và merge vào branch develop để tránh gặp lại các bug đã được test và fix.


5. Hotfix


Có thể các bạn thắc mắc vì sao trên release đã fix bug rồi mà khi merge vào master vẫn có bug phải cần fix.

Có 2 trường hợp thường xảy ra:

- Có những bug mà trong quá trình sử dụng thực tế người dùng phát hiện ra mà QA không test được

- Đôi lúc vì một số lý do khách hàng muốn ra mắt ngay tính năng mới đang phát triển trên develop. Và tất nhiên khi đẩy trực tiếp như thế sẽ xuất hiện một lỗi nghiêm trọng trong phiên bản release.

-> Vì code trên master phải là code release được nên nếu có bug nó phải được ưu tiên sửa chữa ngay. Từ master branch hotfix sẽ được tạo và xử lý khi xong sẽ lại được merge vào master và develop.


Demo Project Nhắn tin


Bên A tính phát triển một app nhắn tin và đã thuê bên B phát triển sau khi hai bên phân tích yêu cầu, thiết kế giao diện bla bla thì đến bước code.

PM bên B tạo một repository rỗng để anh em developer phát triển trên đó.

Leader sẽ xây dựng trên repo đã có 2 branch:

- master chứa project trống

- develop đã được thêm base cũng như các setting cần thiết để ae dev phát triển.

Sau 1 tuần tạo repo và base PM bảo anh em phát triển các tính năng:

- Đăng nhập

- Nhắn tin

- Live Stream

Anh em dev tạo ra 3 feature tương ứng để phát triển là

- feature/login

- feature/message

- feature/live-stream

→ Sau 1 tháng miệt mài code và fix bug 2 tính năng đầu tiên chuẩn bị ra mắt

Thế là Leader merge 2 feature/login và feature/message vào develop còn tính năng Live Stream vẫn tiếp tục phát triển.

Và từ đó checkout ra branch release/v.1.0.0 để test và fix bug trên branch release. Leader merge code vào 2 branch chính là master và develop và xóa branch release/v.1.0.0 đi. Thế là khách hàng đẩy ứng dụng lên store từ code lấy ở branch master. Nhưng đen đủi thay khi tải về sử dụng một số lỗi đã được người dùng phản hồi lại với khách hàng. Vì sản phẩm đã được public nên bug này cần phải fix ngay. Branch hotfix/v.1.0.1 được tạo ra để anh em dev vào fix ngay. Sau khi fix xong hotfix/v.1.0.1 merge vào master và develop. Bản fix đó được đẩy lên store với phiên bản mới là 1.0.1

Sau đó 1 tháng đội dev đã phát triển xong tính năng cuối và đã được merge vào branch develop. Nhưng bỗng dưng khách hàng báo sẽ đẩy lên phiên bản mới với tính năng Live Stream vào ngày mai, tức là sớm hơn 2 tuần so với dự kiến vì vào tối mai khách hàng sẽ có một chiến dịch quảng bá gấp. Leader liền phải đẩy thẳng code từ develop sang master để kịp ra phiên bản mới 1.1.0 mà không đẩy qua branch release.


Và tính năng đã kịp ra mắt vào tối hôm sau nhưng vì sự vội vàng ấy nên khách hàng nhận được một số bug phản hồi từ người dùng. Những bug đó lại được báo lại đội phát triển và Leader tiếp tục tạo branch hotfix/v.1.1.1 và đẩy anh em dev vào fix. Sau khi fix xong Leader lại đẩy code vào 2 branch là master và develop rồi xóa branch hotfix/v.1.1.1 đi.


Các giai đoạn sau cũng làm theo quy trình như vậy.


Tổng kết


Điểm lợi lớn nhất của Git Flow là giúp việc theo dõi và xử lý các vấn đề nảy sinh do một tính năng, một bản fix rất dễ dàng. Quá trình review sẽ thuận tiện và quan sát được các lỗi nảy sinh trong quá trình deploy.

3.954 lượt xem0 bình luận

Bài đăng gần đây

Xem tất cả

Comments


bottom of page