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 1/2: Git WorkFlow

    Git Workflow - Chiến Lược Làm Việc Nhóm Trong Phát Triển Phần Mềm


    Trong các bài trước, chúng ta đã tìm hiểu Git là hệ thống quản lý phiên bản phân tán (Distributed Version Control System - DVCS), cách Git lưu trữ dữ liệu bằng commit, branch, tag và cơ chế hoạt động của HEAD. Tuy nhiên, Git không chỉ là công cụ quản lý mã nguồn mà còn là nền tảng giúp các nhóm phát triển phần mềm phối hợp hiệu quả. Vì sao cần Git Workflow?


    Phát triển phần mềm hiện đại không còn là công việc của một cá nhân. Các dự án ngày càng lớn và phức tạp, đòi hỏi nhiều lập trình viên cùng tham gia.

    Trong thực tế:
    • Yêu cầu của khách hàng thường xuyên thay đổi.
    • Không thể thiết kế mọi thứ hoàn chỉnh ngay từ đầu.
    • Phần mềm cần được kiểm thử liên tục.
    • Các lỗi cần được sửa và phát hành bản vá nhanh chóng.
    • Tính năng mới phải được triển khai song song với việc vận hành hệ thống hiện tại.

    Git kết hợp với hệ thống quản lý công việc (Issue Tracking System) tạo thành môi trường cộng tác giúp nhóm phát triển đáp ứng các yêu cầu này. Branching - Nền Tảng Của Git Workflow


    Một trong những điểm mạnh nhất của Git là khả năng:
    • Tạo branch rất nhanh.
    • Chuyển đổi giữa các branch gần như tức thời.
    • Hợp nhất (merge) các branch hiệu quả.

    Nhờ đó, nhiều chiến lược phát triển phần mềm đã được xây dựng dựa trên mô hình branch của Git.

    Dù sử dụng chiến lược nào, điều quan trọng nhất là toàn bộ nhóm phải thống nhất cách làm việc.

    Thông thường, workflow cần được mô tả rõ ràng trong:
    • Wiki nội bộ
    • Tài liệu dự án
    • Email hướng dẫn
    • Quy trình phát triển chính thức

    Một chiến lược branch rõ ràng giúp:
    • Nâng cao chất lượng phần mềm
    • Giảm xung đột giữa các thành viên
    • Cải thiện khả năng phối hợp
    • Giúp mọi người hiểu rõ mục tiêu chung
    Git Workflow Không Phải Là Thứ Cố Định


    Không có workflow nào phù hợp cho mọi dự án.

    Trong quá trình phát triển, nhóm có thể nhận thấy:
    • Quy trình hiện tại quá phức tạp.
    • Có quá nhiều thao tác thủ công.
    • Việc phát hành phần mềm bị chậm.
    • Khó xử lý các thay đổi khẩn cấp.

    Khi đó, nhóm hoàn toàn có thể điều chỉnh workflow cho phù hợp hơn.

    Một Git Workflow tốt nên:
    • Phù hợp với quy mô hiện tại và tương lai của nhóm.
    • Không tạo ra quá nhiều thủ tục làm giảm năng suất.
    • Cho phép sửa lỗi nhanh chóng.
    • Hỗ trợ thích ứng với các thay đổi liên tục của dự án.
    Git Không Phân Biệt Branch Chính Hay Branch Phụ


    Về mặt kỹ thuật, Git không coi branch master, main hay bất kỳ branch nào là đặc biệt.

    Ý nghĩa của từng branch hoàn toàn do nhóm phát triển quy định.

    Từ đó hình thành hai hướng tiếp cận chính: 1. Centralized Workflow

    2. Feature Branch Workflow


    Trong phần này chúng ta tập trung vào mô hình đầu tiên.
    Centralized Workflow


    Centralized Workflow là mô hình đơn giản nhất.

    Toàn bộ nhóm làm việc trên một branch duy nhất, thường là:
    main

    hoặc
    master

    Mọi thay đổi đều được commit và đưa trực tiếp vào branch này.

    Ví dụ:
    Developer A
    \
    --> main
    /
    Developer B

    Tất cả thành viên cùng làm việc trên một nhánh duy nhất. Ưu Điểm

    Dễ triển khai


    Không cần thiết kế chiến lược branch phức tạp. Dễ học


    Phù hợp với:
    • Người mới học Git
    • Nhóm nhỏ
    • Dự án đơn giản
    Quản lý đơn giản


    Không cần:
    • Merge request
    • Pull request phức tạp
    • Nhiều nhánh release
    Trường Hợp Phù Hợp


    Centralized Workflow thường phù hợp với:
    • Dự án nhỏ
    • Nhóm ít thành viên
    • Các dự án quản lý tài liệu
    • Một số dự án Infrastructure as Code (IaC)

    Ví dụ:
    • Terraform
    • Ansible
    • CloudFormation
    • Tài liệu Markdown
    • Cấu hình hệ thống

    Trong những trường hợp này, khối lượng thay đổi thường không quá lớn và việc sử dụng một branch duy nhất vẫn có thể đáp ứng được nhu cầu.
    Hạn Chế Của Centralized Workflow


    Khi dự án trở nên lớn hơn, mô hình này bắt đầu bộc lộ nhiều vấn đề. Khó Tách Biệt Release Và Development


    Giả sử phiên bản 1.0 vừa được phát hành.

    Lúc này nhóm phát triển phải đối mặt với câu hỏi:
    • Tiếp tục phát triển tính năng cho phiên bản 2.0?
    • Hay chờ để xử lý lỗi phát sinh từ phiên bản 1.0?

    Nếu tiếp tục phát triển trên cùng branch:
    main
    ├── Release 1.0
    ├── Feature A
    ├── Feature B
    └── Feature C

    thì branch chính không còn ở trạng thái ổn định để phát hành nữa. Mọi Thay Đổi Đều Ảnh Hưởng Đến Nhau


    Một thay đổi nhỏ có thể gây tác động ngoài ý muốn tới toàn bộ hệ thống.

    Không có khu vực riêng để:
    • Thử nghiệm
    • Phát triển tính năng mới
    • Kiểm thử độc lập
    Không Phù Hợp Với CI/CD Hiện Đại


    Hãy tưởng tượng:
    • Developer A đang phát triển một tính năng đơn giản mất 1 ngày.
    • Developer B đang phát triển một tính năng lớn mất 3 tuần.

    Nếu cả hai cùng làm việc trên một branch duy nhất:
    • Tính năng của A không thể phát hành riêng.
    • Nhóm phải chờ B hoàn thành.
    • Hoặc phải chấp nhận đưa mã nguồn chưa hoàn thiện lên branch chính.

    Trong môi trường CI/CD hiện đại, việc phải chờ toàn bộ nhóm hoàn thành công việc trước khi phát hành là điều khó chấp nhận.
    Kết Luận


    Centralized Workflow là bước khởi đầu tốt để làm quen với Git và phù hợp với các dự án nhỏ hoặc thiên về quản lý cấu hình như Terraform, Ansible và Infrastructure as Code.

    Tuy nhiên, khi dự án phát triển lớn hơn, yêu cầu phát hành nhanh hơn và nhiều lập trình viên cùng làm việc song song, mô hình này nhanh chóng trở thành điểm nghẽn. Đây chính là lý do các tổ chức hiện đại chuyển sang các mô hình như Feature Branch Workflow, GitFlow hoặc Trunk-Based Development để tận dụng tối đa khả năng branching mạnh mẽ của Git và đáp ứng yêu cầu của DevOps/CI-CD.
    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