Git workflow là gì
Chúng ta cùng nghiên cứu mục đích của từng branch DevelopNế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 BranchMỗ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 BranchKhi 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. HotfixRấ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 https://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.
Đá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ệuCó 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. 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, …
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).
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.
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)
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ậnVớ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 https://medium.com/@hengfeng/a-review-of-git-workflow-management-7f9fbebd9370 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. |