Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bài 2/2: Feature Branch Workflow - Chiến Lược Phát Triển Tính Năng Riêng Trong Git

    Feature Branch Workflow - Chiến Lược Phát Triển Tính Năng Riêng Trong Git


    Ở bài trước, chúng ta đã tìm hiểu Centralized Workflow, nơi toàn bộ nhóm cùng làm việc trên một branch duy nhất (main hoặc master). Mô hình này đơn giản nhưng nhanh chóng bộc lộ hạn chế khi dự án có nhiều lập trình viên hoặc cần phát hành phần mềm liên tục.

    Để giải quyết vấn đề đó, Git cung cấp một chiến lược phổ biến hơn: Feature Branch Workflow. Feature Branch Workflow là gì?


    Thay vì mọi người cùng làm việc trực tiếp trên branch main, mỗi tính năng (feature) sẽ được phát triển trên một branch riêng.

    Ví dụ:
    main
    ├── feature/login
    ├── feature/payment
    ├── feature/report
    └── feature/api

    Mỗi lập trình viên hoặc nhóm phát triển sẽ làm việc độc lập trên branch của mình mà không ảnh hưởng đến branch chính.

    Chỉ khi tính năng hoàn thành, được kiểm thử và sẵn sàng đưa vào sản phẩm thì branch đó mới được merge trở lại main. Lợi ích của Feature Branch Workflow

    Giữ branch main luôn ổn định


    Trong suốt quá trình phát triển, mã nguồn trên main gần như không bị thay đổi.

    Điều này giúp:
    • Dễ triển khai CI/CD.
    • Dễ tạo bản phát hành (Release).
    • Giảm nguy cơ đưa mã chưa hoàn thiện vào môi trường production.

    Có thể xem main là nhánh luôn ở trạng thái "có thể phát hành". Các lập trình viên làm việc song song


    Ví dụ:
    • Developer A phát triển chức năng Đăng nhập.
    • Developer B phát triển Thanh toán.
    • Developer C phát triển Báo cáo.

    Mỗi người đều có branch riêng nên không cần chờ nhau hoàn thành.

    Điều này giúp tăng năng suất đáng kể so với Centralized Workflow. Mỗi lần Merge tương ứng với một tính năng hoàn chỉnh


    Khi một feature hoàn thành:
    1. Hoàn tất lập trình.
    2. Kiểm thử.
    3. Review mã nguồn.
    4. Merge vào main.

    Sau khi merge, branch main tiếp tục ở trạng thái ổn định và sẵn sàng cho các quy trình CI/CD như:
    • Build
    • Unit Test
    • Integration Test
    • Triển khai Staging
    • Release Production

    Đưa Feature Branch lên Remote Repository


    Feature Branch không chỉ tồn tại trên máy của lập trình viên.

    Thông thường, branch sẽ được push lên GitHub, GitLab hoặc Bitbucket.

    Ví dụ:
    git push origin feature/login

    Việc này mang lại nhiều lợi ích. 1. Tạo bản sao lưu (Distributed Backup)


    Nếu máy tính của lập trình viên gặp sự cố, mã nguồn vẫn được lưu trên remote repository. 2. Chia sẻ công việc


    Các thành viên khác có thể checkout branch đó để cùng phát triển hoặc hỗ trợ xử lý.

    Ví dụ:
    • Một người phụ trách Backend.
    • Một người phụ trách Frontend.
    • Cùng làm việc trên một Feature Branch.
    3. Code Review


    Khi branch đã được đẩy lên remote, nhóm có thể tạo:
    • Pull Request (GitHub)
    • Merge Request (GitLab)

    Các thành viên khác sẽ xem xét:
    • Coding style
    • Logic xử lý
    • Hiệu năng
    • Bảo mật
    • Khả năng bảo trì

    Code Review giúp phát hiện lỗi trước khi mã nguồn được hợp nhất vào main. 4. Kiểm thử tự động


    Sau khi push branch lên remote, hệ thống CI/CD có thể tự động thực hiện:
    • Build project
    • Chạy Unit Test
    • Static Code Analysis
    • Security Scan
    • Kiểm tra chất lượng mã nguồn

    Nhờ đó, nhiều lỗi được phát hiện sớm thay vì sau khi phát hành.
    Dễ Thay Đổi Ưu Tiên


    Trong thực tế, yêu cầu dự án luôn thay đổi.

    Ví dụ:

    Bạn đang phát triển:
    feature/report

    Đột nhiên khách hàng yêu cầu ưu tiên sửa lỗi nghiêm trọng.

    Bạn chỉ cần:
    • Commit phần công việc đang làm.
    • Chuyển về branch main.
    • Tạo một Feature Branch mới.

    Ví dụ:
    git checkout main
    git checkout -b feature/hotfix-login

    Sau khi hoàn thành hotfix, bạn có thể quay lại branch cũ và tiếp tục công việc mà không bị mất dữ liệu.

    Đây là một ưu điểm rất lớn của Feature Branch Workflow so với việc tất cả cùng chỉnh sửa trên một branch duy nhất.
    Thường Xuyên Đồng Bộ Với Branch main


    Trong thời gian bạn phát triển feature, các thành viên khác vẫn có thể liên tục merge những thay đổi mới vào main.

    Nếu chờ đến cuối mới merge, khả năng xảy ra xung đột (merge conflict) sẽ cao hơn.

    Vì vậy, một thực hành tốt là định kỳ đồng bộ các thay đổi từ main vào Feature Branch.

    Ví dụ:
    git checkout feature/payment
    git merge main

    Hoặc sử dụng:
    git rebase main

    (tùy theo quy trình của nhóm).

    Việc đồng bộ thường xuyên giúp:
    • Phát hiện xung đột sớm.
    • Giải quyết từng phần thay vì xử lý tất cả cùng lúc.
    • Đảm bảo feature hoạt động tốt với những thay đổi mới nhất của dự án.

    Chấp Nhận Lỗi Trên Feature Branch, Không Chấp Nhận Lỗi Trên main


    Trong quá trình phát triển, Feature Branch có thể:
    • Chưa hoàn thiện.
    • Chưa biên dịch được.
    • Chưa vượt qua toàn bộ kiểm thử.

    Điều này là bình thường vì đây là không gian làm việc riêng của lập trình viên.

    Ngược lại, branch main nên luôn ở trạng thái ổn định. Nếu mã lỗi được đưa vào main, toàn bộ nhóm có thể bị ảnh hưởng: quy trình CI/CD thất bại, các thành viên khác không thể đồng bộ hoặc tiếp tục phát triển, và việc phát hành phần mềm có thể bị trì hoãn.
    Kết luận


    Feature Branch Workflow là một trong những mô hình làm việc phổ biến nhất trong các dự án sử dụng Git. Bằng cách phát triển mỗi tính năng trên một branch riêng, nhóm có thể làm việc song song, giữ cho branch main luôn ổn định, dễ dàng thực hiện code review, kiểm thử tự động và tích hợp CI/CD. Đây cũng là nền tảng cho nhiều quy trình hiện đại như GitHub Flow, GitLab Flow và nhiều biến thể khác đang được sử dụng rộng rãi trong các dự án DevOps và phát triển phần mềm hiện nay.​
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X