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

  • Git

    Git Nâng Cao – Vì sao Git trở thành nền tảng của DevOps và CI/CD hiện đại?


    Ngày nay, gần như mọi hệ thống DevOps, CI/CD, Infrastructure as Code (IaC) hay Automation đều xoay quanh Git. Không chỉ là công cụ lưu trữ source code, Git còn là nền tảng cho:
    • GitHub Actions
    • GitLab CI/CD
    • Jenkins Pipeline
    • ArgoCD (GitOps)
    • Terraform Infrastructure Versioning
    • Kubernetes Configuration Management

    Sức mạnh của Git nằm ở việc nó là một Distributed Version Control System (DVCS), cho phép mỗi developer sở hữu toàn bộ bản sao của repository và làm việc độc lập ngay cả khi không kết nối tới remote repository.
    Git Distributed – Mỗi Developer đều có một Repository hoàn chỉnh


    Khác với các hệ thống cũ như:
    • CVS
    • Subversion (SVN)

    Git được thiết kế theo mô hình phân tán:
    Remote Repository
    ↑ ↓
    Developer A Local Repository
    Developer B Local Repository
    Developer C Local Repository

    Mỗi local repository:
    • Chứa toàn bộ lịch sử commit
    • Chứa toàn bộ branches
    • Có thể hoạt động offline
    • Có thể tạo branch riêng mà chưa cần đồng bộ với remote



    Điều này khiến Git đặc biệt phù hợp với:
    • Open Source Projects
    • CI/CD
    • Large-scale DevOps Teams
    • Infrastructure as Code

    Các thành phần cốt lõi của Git

    1. Working Directory


    Đây là nơi bạn thực hiện các thay đổi đối với source code.

    Ví dụ:
    app.py
    network.py
    terraform.tf

    2. Tracked và Untracked Files


    Git chỉ quản lý các file đã được theo dõi (Tracked).

    Ví dụ:
    git add app.py

    Sau lệnh này:
    Untracked → Tracked

    3. Staging Area


    Staging Area là nơi chứa các thay đổi dự kiến sẽ được commit.
    git add .

    Sau đó:
    git commit



    Có thể xem đây là:
    Working Directory

    Staging Area

    Local Repository

    Remote Repository
    Commit – Trái tim của Git


    Mỗi commit chứa:
    • Tác giả (Author)
    • Thời gian
    • Commit Message
    • Snapshot của source code
    • Thông tin parent commit



    Ví dụ:
    git commit -m "Fix VPN tunnel timeout issue"

    Git sẽ ghi nhận:
    Who
    What
    When
    Why
    Snapshot – Khái niệm quan trọng nhất của Git


    Git không lưu file theo kiểu Delta giống nhiều hệ thống cũ.

    Git lưu:
    Snapshot của toàn bộ repository tại một thời điểm.

    Điều này giúp:
    • Rollback nhanh
    • Branch cực nhẹ
    • Merge hiệu quả

    Git Object Model


    Git sử dụng ba loại object chính. Blob


    Lưu dữ liệu file.

    Có thể là:
    • Text
    • Binary
    • Multimedia

    Git không quan tâm loại dữ liệu.

    Tree


    Lưu cấu trúc thư mục.

    Tree chứa:
    • Blob
    • Subtree
    • Quan hệ parent-child

    Commit


    Commit chứa metadata:
    • Snapshot
    • Author
    • Message
    • Parent Commit
    • Tree ID

    Branch – Tính năng làm nên sự thành công của Git


    Branch có thể hiểu là:
    Một timeline riêng của source code.

    Ví dụ:
    main
    ├── feature-login
    ├── feature-api
    └── bugfix-vpn



    Git khuyến khích:
    • Mỗi feature một branch
    • Mỗi developer một branch
    • Merge Request/Pull Request trước khi đưa vào main

    Điều này giúp:
    • Giảm xung đột
    • Kiểm soát chất lượng code
    • Hỗ trợ Code Review

    HEAD là gì?


    HEAD là:
    Commit hiện tại mà bạn đang làm việc.

    Mỗi lần commit:
    HEAD

    C1 → C2 → C3

    HEAD sẽ di chuyển.

    Tag – Cực kỳ quan trọng trong Release Management


    Tag là:
    Một nhãn (Label) đại diện cho trạng thái repository tại một thời điểm.

    Ví dụ:
    git tag v1.0.0
    git tag v2.1.0



    Tag thường dùng cho:
    • Release Version
    • Production Snapshot
    • Bug Fix Reference
    • CI/CD Build Version

    Ví dụ:
    v1.0.0
    v1.1.0
    v2.0.0

    Nếu production gặp lỗi:
    Version: v1.1.0

    DevOps có thể nhanh chóng:
    git checkout v1.1.0

    để tái tạo đúng môi trường phát sinh lỗi.
    Git Stash – Cứu tinh khi chuyển context


    Giả sử bạn đang sửa:
    feature-A

    Nhưng production xảy ra sự cố.

    Bạn chưa commit xong.

    Git checkout sẽ không cho phép chuyển branch.

    Lúc này:
    git stash push
    git checkout main

    Sau khi xử lý xong:
    git stash pop



    Đây là kỹ năng cực kỳ hữu ích với:
    • DevOps Engineer
    • SRE
    • Automation Engineer

    Merge

    Fast Forward Merge


    Trường hợp đơn giản:
    main: C1
    feature: C1-C2-C3

    Merge:
    main: C1-C2-C3

    Chỉ cần di chuyển branch pointer.

    Three-way Merge


    Trường hợp thực tế:
    main: C1-C2-C5
    feature: C1-C3-C4

    Git sẽ:
    1. Tìm Common Ancestor
    2. So sánh thay đổi
    3. Tạo Merge Commit mới

    Rebase


    Rebase giúp:
    • Giữ lịch sử commit gọn
    • Loại bỏ branch ngắn hạn khỏi lịch sử
    git rebase main

    Kết quả:
    C1-C2-C3-C4-C5

    thay vì:
    C1
    ├─C2-C3
    └─C4-C5

    Cherry-pick


    Nếu chỉ muốn lấy một commit:
    git cherry-pick <commit-id>



    Rất hữu ích khi:
    • Hotfix Production
    • Backport Security Patch
    • Lấy một thay đổi cụ thể mà không merge toàn bộ branch

    Undo trong Git

    Revert

    git revert <commit-id>

    Khôi phục trạng thái trước commit.

    Đây là cách an toàn nhất.

    Reset

    git reset --soft
    git reset --mixed
    git reset --hard

    Dùng để quay lui nhiều commit.

    Cần thận trọng, đặc biệt:
    git reset --hard

    Remote Repository


    Khai báo remote:
    git remote add origin https://github.com/company/project.git

    Đồng bộ:
    git fetch
    git pull
    git push



    Thông thường:
    Không commit trực tiếp lên remote branch.

    Quy trình chuẩn:
    Remote

    Checkout Local Branch

    Commit

    Push

    Pull Request / Merge Request

    Review

    Merge
    Góc nhìn DevSecOps


    Git không chỉ là công cụ quản lý source code mà còn là nền tảng của:
    • CI/CD Pipeline
    • GitOps
    • Infrastructure as Code
    • Change Management
    • Audit & Compliance
    • Release Management

    Trong DevOps hiện đại:
    Mọi thứ đều có thể được version hóa bằng Git:
    • Source Code
    • Terraform
    • Ansible Playbook
    • Kubernetes Manifest
    • Helm Chart
    • Firewall Policy
    • Network Configuration
    • Documentation

    Và đó là lý do vì sao Git trở thành một trong những kỹ năng bắt buộc đối với mọi DevOps Engineer, Cloud Engineer, Network Automation Engineer và DevSecOps Engineer.
    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