Git workflow là gì

  • Log in or register to post comments

Chúng ta cùng nghiên cứu mục đích của từng branch

Develop

Nếu master để lưu trữ lịch sử những bản release chính thức, develop mục đích như một branch cho việc tích hợp các feature branch. Trên master branch chúng ta sẽ thêm tag theo từng version release.

Feature Branch

Mỗi feature mới sẽ có branch riêng, tên branch sẽ được đặt theo feature đang phát triển, Feature branch xem develop branch như là branch cha của nó. Khi đã hoàn tất feature này, chúng ta merge nó lên trên develop, không bao giờ tương tác lên master, đồng thời xóa branch này.

Release Branch

Khi tất cả feature cần thiết đã hoàn thành để có thể release. Chúng ta tạo thêm branch release, tên branch là tên của của release version. Tạo branch này cũng đồng nghĩa với việc bắt đầu một vòng phát triển mới, không thêm các tính năng mới nữa, mà tập trung vào bug fix, tạo document này kia. Khi đã hoàn tất tiếp tục merge lên master

Bằng cách này, chúng ta có thể tách một team để đẩy việc đưa ra release và một team khác tiếp tục phát triển tính năng cho release tiếp theo.

Sau khi được merge vào master và develop, có thể xóa branch release.

Hotfix

Rất giống với release và feature trừ việc nó sẽ dựa trên master chứ không phải develop, để sửa các lỗi trên production. Đây là branch duy nhất fork trực triếp từ master. Một khi sửa xong, thì merge vào cả master* và develop** rồi xóa

Bên cạnh Gitflow, một số quy trình làm việc khác cũng khá phổ biến với Git là: Centralized Workflow, Feature branching, Forking Workflow

Để làm việc với GitFlow bằng SourceTree, có thể xem video tuts hướng dẫn trên youtube //www.youtube.com/watch?v=z53JJ7P78Vc

Là một lập trình viên, chúng ta luôn phải làm việc với rất nhiều các công cụ hỗ trợ. Đặc biệt là phần mềm quản lý mã nguồn — một công cụ cực kỳ quan trọng. Git chính là phần mềm hỗ trợ quản lí rất phổ biến hiện nay. Để trở nên chuyên nghiệp và làm việc nhóm có hiệu quả cần phải có một hệ thống quản lí dữ liệu phân tán như Git để quản lí source code của nhóm.

Chỉ cần hiểu được vài câu lệnh đơn giản như pull, remote, merge, commit, push là dùng được Git. Nhưng dùng nó như thế nào để hiệu quả và khai thác hết các tính năng nó mang lại?.

Đáp án là cần tìm hiểu đến một khái niệm song song với Git đó là Git Flow mà mình trình bày bên dưới.

II. Giới thiệu

Có thể hiểu Git Flow là một model để thiết kế các dòng công việc của Git. Nó định nghĩa một mô hình phân nhánh nghiệm ngặt, phù hợp lý tưởng với các dự án có chu kỳ phát hành theo lịch trình. Thế nên Git Flow luôn được áp dụng rộng rãi ở các doanh nghiệp, vì quy trình chặt chẽ của nó.

Vì vậy, ta nên dựa vào một model như Git Flow để đảm bảo được tính nhất quán và tăng hiệu suất công việc. Git Flow giúp ta có những quy trình cụ thể giống như những tập quy tắc trong công việc để mọi người thực hiện theo.

Nhờ Git Flow mà khi sử dụng Git ta sẽ tránh được nhiều hệ quả như: tên nhánh đặt tên lung tung không theo quy tắc cụ thể, mất thời gian trong việc tìm tên nhánh, cũng như việc giải quyết các conflict khi merge nhánh. Hơn thế nữa Git Flow cung cấp các thao tác mở rộng của Git nhằm quản lí các dòng công việc đó.

III. Các nhánh tính năng

Khi tạo ra một Git Repository sẽ có một nhánh mặc định là master. Nhưng đối với một dự án lớn trong môi trường doanh nghiệp, Git Flow cung cấp nhiều nhánh mặc định hơn để quản lí dự án như feature, release, hotfix, …

Tuy nhiên không nhất thiết phải theo mặc định của Git Flow cung cấp, ta có thể tuỳ chỉnh nó để phân loại công việc cũng như dễ dàng quản lí hơn. Ví dự như hình bên dưới bao gồm có 6 nhánh: master, develop, feature, hotfix, release candidate, release candidate bug/feature.

Ví dụ minh hoạ

1. Master Branch

Là nhánh mặc định được tạo khi tạo mới một repository bằng Git. Đa số những người mới dùng Git thường có xu hướng commit và push code lên master branch. Nhưng đối với model Git Flow, ta không làm như thế, nhánh master đảm nhiệm vai trò là một nhánh hoàn chỉnh, chỉ nên thực hiện merge từ các nhánh khác. Nói khác hơn master branch này là một tập hợp code hoàn chỉnh, không hề có lỗi được merge từ các nhánh con và có thể release được ngay.

2. Develop branch

Nếu như master branch là một nhánh hoàn chỉnh, develop branch này đóng vai trò như một nhánh tích hợp nhiều tính năng đã và đang được phát triển và đương nhiên sẽ có thể tồn động nhiều lỗi ở nhánh này. Dựa vào tính chất tập trung của develop branch ta có thể gom một nhóm tính năng đã được phát triển trong một khoảng thời gian nhất định để tạo ra một bản release candidate [RC].

Khác với vòng đời phát triển phần mềm, bản realease candidate này chỉ để tập trung phát hiện và sửa lỗi để chuẩn bị cho việc chuyển sang giai đoạn phát hành. Đây cũng chính là điểm mạnh của Git Flow giúp các dự án có thể phát triển cũng như cập nhật theo lịch trình.

3. Feature branch

Ý tưởng chính của Git Flow dành cho nhánh này là việc khi công ty muốn phát triển một tính năng mới cho dự án, lập trình viên sẽ phải code trên nhánh riêng của mình dựa trên một base branch [develop branch]. Việc tạo một nhánh riêng cho mỗi lập trình viên sẽ tách từ develop branch, tạo nên sự độc lập cho feature branch. Việc tách nhánh này sẽ không làm ảnh hưởng đến code chính, giúp cho việc code cũng như test được dễ dàng hơn.

Thêm vào đó, điểm mạnh của Git Flow là tính linh hoạt nhất là trong teamwork. Trong trường hợp, phát triển một tính năng lớn, đòi hỏi phải có nhiều lập trình viên cùng làm một lúc. Đúng theo quy chuẩn của Git Flow, ta cũng sẽ phải tạo feature branch [big-feature] tách từ develop branch, sau đó ta sẽ chia tiếp nhiều nhánh nhỏ [sub-feature] và tách từ nhánh big-feature. Từ đó ta sẽ luôn đảm bảo được tính độc lập của từng nhánh.

Ngoài ra thử tưởng tượng nếu ta chỉ sử dụng duy nhất develop branch và nhiều người cùng code trên nhánh đó. Tất nhiên khi commit và push code lên, khả năng cao code sẽ dễ bị conflict với các lập trình viên khác. Chẳng lẽ chúng ta phải giải quyết conflict mỗi khi chúng ta push code lên? Hơn thế nữa, nếu như không tách nhánh, sẽ gây khó khăn trong việc review code cũng như quản lí, cụ thể ta sẽ không biết để tính năng đó ta đã có những commit gì.

Thêm vào đó một khái niệm mới trong model Git Flow là Pull Request [PR]. Sau khi code xong ở feature branch, lập trình viên sẽ phải tạo một Pull Request để merge feature branch vào develop branch. Mục đích chính của việc tạo Pull Request này là dễ dàng giúp cho cả team review lại code, kiểm tra code của lập trình viên có những sai sót, đạt hiệu quả cao hay chưa, hoặc còn những vấn đề cần bổ sung thêm. Qua đó việc tạo Pull Request giúp cho code của lập trình viên được kiểm duyệt thêm một bước trước khi thực hiện test.

4. Release branch

Đúng như tên gọi của nó, release branch dùng để chuẩn bị cho release bản production mới trong thời gian định kì. Thời điểm thực hiện release, ta phải xét xem develop branch phải phản ánh được trạng thái mong muốn cho việc release mới.

Theo hình minh hoạ, trong một thời gian định kì, ta đã phát triển xong 3 tính năng mới feature A, B và C. Để tạo nhánh release ta chỉ cần checkout từ develop branch, vì theo nguyên tắc các nhánh feature đã được merge vào develop trước. Thêm vào đó ta cũng sẽ phải tạo hai Pull Request như đã đề cập ở phần feature branch [một PR để merge vào master branch và một PR để merge vào develop branch]

Mục đích chính của nhánh release này là test lại các tính năng đã code ở feature branch một lần nữa để đảm bảo tính năng đó chạy ổn định và có lỗi hay không, vì khi trên release branch này gồm có nhiều tính năng với nhau.

Ngoài ra trong trường hợp có lỗi, hoặc có các vấn đề mới cần phát sinh cần bổ sung thêm, ta lại tiếp tục checkout thêm một nhánh mới [release candidate bug/feature] từ release branch này để giải. Sau khi thực hiện xong sẽ merge vào release branch đó để tiếp tục công việc release.

5. Hotfix branch

Giống như release branch, hotfix branch được sử dụng để chuẩn bị cho việc release production mới. Trên thực tế nhánh này được sử dụng khi có bug nghiêm trọng tồn tại trên production, cần phải sửa ngay. Khi đó một hotfix branch sẽ được checkout từ nhánh master để tiến hành sửa.

Sau khi sửa xong sẽ merge vào master branch và phải merge vào develop branch, vì theo nguyên tắc develop branch không nên có những lỗi đã có từ trước, để đảm bảo các công việc về sau sẽ không có lỗi đó nữa trên dự án.

IV. Kết luận

Với những tính năng trên, ta có thể thấy được vai trò và hiệu quả tuyệt vời mà công cụ này mang lại. Thông qua từng nhánh của model Git Flow có thể thấy rõ được sự phân tán nhưng tập trung của model này. Các nhánh của Git Flow thể hiện được sự chuyên biệt về chức năng của nó, giúp cho việc quản lí nhánh trên repository được dễ dàng hơn. Và hơn hết là đảm bảo luồng của git được chặt chẽ, tránh thiếu sót và tăng hiệu suất của công việc.

Tài liệu kham khảo

//medium.com/@hengfeng/a-review-of-git-workflow-management-7f9fbebd9370
//techblog.vn/git-flow

Like what you’re reading? Follow us on LinkedIn and Medium. We are developing the digital layer for 7-Eleven Vietnam including the core retail system as well as customer-facing components like 7REWARDS and 7NOW.VN.

Chủ Đề