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

  • Hiểu Kiến Trúc và Cơ Chế Hoạt Động Bên Trong Git Dành Cho DevOps, Automation Engineer và DevSecOps

    Hiểu Kiến Trúc và Cơ Chế Hoạt Động Bên Trong Git Dành Cho DevOps, Automation Engineer và DevSecOps


    Khi làm việc với Infrastructure as Code (Terraform, Ansible), CI/CD Pipeline hoặc phát triển phần mềm hiện đại, gần như mọi công cụ đều xoay quanh một thành phần trung tâm: Git.

    Nhưng Git không chỉ đơn giản là một nơi để lưu source code. Bên trong Git là cả một cơ chế quản lý phiên bản cực kỳ thông minh dựa trên snapshot, object, hash và branch, giúp các nhóm phát triển có thể cộng tác hiệu quả mà vẫn giữ được tính độc lập và khả năng khôi phục gần như tuyệt đối.
    Git là gì?


    Git (Distributed Version Control System - DVCS) là một hệ thống quản lý phiên bản phân tán dùng để theo dõi và quản lý quá trình phát triển của dự án.

    Khác với các hệ thống quản lý mã nguồn tập trung, mỗi thành viên trong nhóm đều sở hữu một bản sao hoàn chỉnh của repository trên máy cá nhân. Điều này cho phép:
    • Làm việc offline
    • Phát triển độc lập
    • Tạo branch riêng
    • Theo dõi toàn bộ lịch sử thay đổi
    • Đồng bộ với repository trung tâm khi cần

    Git đặc biệt phù hợp với các quy trình:
    • Continuous Integration (CI)
    • Continuous Deployment (CD)
    • DevOps
    • DevSecOps
    • Infrastructure as Code (IaC)

    Kiến trúc Git


    Git được xây dựng theo mô hình phân tán gồm:
    Remote Repository
    |
    --------------------------------
    | | |
    Local Git 1 Local Git 2 Local Git 3

    Mỗi Local Git Environment bao gồm:
    Working Directory

    Staging Area

    Local Repository
    1. Remote Repository


    Remote Repository là nơi lưu trữ project dùng chung cho toàn bộ nhóm.

    Ví dụ:
    • GitHub
    • GitLab
    • BitBucket
    • Internal Git Server

    Chức năng:
    • Lưu trữ source code tập trung
    • Đồng bộ giữa các thành viên
    • Là nơi thực hiện Pull Request/Merge Request
    • Tích hợp CI/CD Pipeline

    Ví dụ:
    git clone
    git fetch
    git pull
    git push
    2. Local Repository


    Local Repository là bản sao của Remote Repository trên máy cá nhân.

    Mỗi developer có thể:
    • Commit độc lập
    • Tạo branch riêng
    • Thử nghiệm tính năng mới
    • Làm việc offline

    Các commit cục bộ sẽ được đồng bộ bằng:
    git fetch
    git pull
    git push

    Điểm mạnh của Git nằm ở đây. Mỗi máy đều có:
    • Source code
    • Branch
    • Commit history
    • Metadata

    Nói cách khác, mỗi developer đều sở hữu một Git Server thu nhỏ trên máy của mình.
    3. Working Directory


    Working Directory là thư mục làm việc thực tế trên hệ điều hành.

    Đây là nơi:
    • Viết code
    • Chỉnh sửa file
    • Tạo file mới
    • Xóa file

    Git liên tục so sánh trạng thái file trong Working Directory với snapshot gần nhất.

    Các trạng thái phổ biến: Modified


    File đã thay đổi:
    config.yaml
    main.py
    terraform.tf Untracked


    File mới chưa được Git quản lý:
    secret.txt
    test.sh
    new.tf

    Kiểm tra trạng thái:
    git status

    Ví dụ:
    git status

    Output:
    modified: app.py
    untracked: test.sh
    4. Staging Area (Index)


    Staging Area là vùng đệm chuẩn bị cho commit tiếp theo.

    File được đưa vào Staging bằng:
    git add

    Ví dụ:
    git add app.py
    git add .

    Khi file được đưa vào Staging:
    • File trở thành tracked file
    • Snapshot mới được tạo
    • Chuẩn bị đưa vào commit

    Lưu ý:

    Chỉ những file nằm trong Staging Area mới được commit.

    Ví dụ:
    git commit -m "Fix login bug"

    Nếu file chưa được stage:
    Working Directory

    → sẽ không xuất hiện trong commit.
    Chu trình hoạt động của Git

    Working Directory
    |
    git add

    Staging Area
    |
    git commit

    Local Repository
    |
    git push

    Remote Repository

    Đây chính là workflow mà mọi CI/CD pipeline hiện đại đều đang sử dụng.
    Git Objects – Trái Tim Của Git


    Git không lưu file theo cách truyền thống.

    Git lưu trữ dữ liệu dưới dạng các Object.

    Có ba loại object cơ bản: Blob


    Lưu nội dung thực tế của file.

    Ví dụ:
    main.py
    docker-compose.yml
    inventory.yml
    Tree


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

    Chứa:
    • Pointer đến Blob
    • Pointer đến Tree khác

    Ví dụ:
    project/
    ├── app.py
    ├── Dockerfile
    └── ansible/
    Commit


    Commit object chứa:
    • Pointer đến Snapshot (Tree)
    • Date/Time
    • Parent Commit
    • Commit Message
    • Author
    • Committer

    Ví dụ:
    Commit
    └── Tree
    ├── Blob
    ├── Blob
    └── Tree
    SHA-1 Hash – Danh tính của mọi Object


    Mỗi Git Object được định danh bằng:
    40-character SHA-1 Hash

    Ví dụ:
    9fceb02c1d...

    Hash được sử dụng để:
    • So sánh thay đổi
    • Truy xuất object cực nhanh
    • Liên kết object
    • Kiểm tra tính toàn vẹn dữ liệu

    Thông thường Git chỉ hiển thị:
    9fceb

    hoặc
    9fceb02

    Miễn là phần hash này là duy nhất.
    Snapshot – Bí mật khiến Git hoạt động cực nhanh


    Nhiều người nghĩ Git lưu sự khác biệt (delta) giữa các phiên bản.

    Thực tế, Git hoạt động dựa trên Snapshot.

    Snapshot là một Tree Object chứa con trỏ đến toàn bộ file được Git theo dõi tại thời điểm commit.

    Ví dụ:
    Commit A
    └── Snapshot A

    Commit B
    └── Snapshot B

    Nếu chỉ sửa:
    app.py

    thì Git chỉ tạo thêm:
    • Blob mới của app.py
    • Tree mới
    • Commit mới

    Các file còn lại vẫn sử dụng object cũ thông qua pointer.

    Ví dụ:
    config.yml
    Dockerfile
    README.md

    vẫn giữ nguyên hash.

    Đây chính là lý do:
    • Commit rất nhanh
    • Branch rất nhẹ
    • Merge hiệu quả
    • Repository có hiệu năng cao

    Branch Thực Chất Là Gì?


    Mỗi commit lưu:
    Parent Commit Pointer

    Kết quả:
    A → B → C → D

    hình thành một chuỗi commit gọi là:
    Branch

    Các loại commit: Initial Commit


    Không có parent. Normal Commit


    Có một parent. Merge Commit


    Có nhiều parent.

    Ví dụ:
    main
    A → B → C

    feature
    ↘ D → E

    Merge
    A → B → C → M
    ↘ D → E ↗
    Xem lịch sử commit

    git log

    Thông tin hiển thị:
    • Commit Hash
    • Author
    • Email
    • Date
    • Commit Message

    Ví dụ:
    git log --oneline

    Output:
    a1b2c Fix login bug
    d3e4f Add Terraform module
    e5f6a Update README
    Kiểm tra nội dung object


    Xem nội dung commit:
    git cat-file

    Kiểm tra trạng thái Working Directory:
    git ls-files --modified

    Kiểm tra Staging Area:
    git ls-files --stage

    Khi sửa và stage một file, bạn sẽ thấy:
    • Chỉ file thay đổi có hash mới
    • Các file còn lại giữ nguyên hash

    Do đó mỗi commit chỉ tạo thêm một số object nhỏ:
    • Commit Object
    • Snapshot Object
    • Blob của file đã thay đổi

    Đây chính là bí quyết giúp Git có thể quản lý hàng triệu file và hàng trăm nghìn commit với hiệu năng cực cao.
    Tóm tắt


    Git không phải là công cụ lưu file đơn thuần mà là một content-addressable filesystem được xây dựng từ:
    Blob
    Tree
    Commit
    SHA-1 Hash
    Snapshot
    Branch

    Kiến trúc:
    Working Directory

    Staging Area

    Local Repository

    Remote Repository

    Việc hiểu rõ cơ chế bên trong của Git sẽ giúp DevOps Engineer, Automation Engineer và DevSecOps Engineer:
    • Tự tin xử lý merge conflict
    • Thiết kế CI/CD Pipeline hiệu quả
    • Tối ưu Git workflow
    • Hiểu cách GitLab/GitHub Actions hoạt động
    • Dễ dàng làm chủ các công cụ IaC như Terraform, Ansible và Kubernetes GitOps

    Trong thế giới DevOps hiện đại, hiểu Git ở mức object và snapshot không còn là kiến thức "nice to have" mà đã trở thành một kỹ năng nền tảng bắt buộc đối với mọi kỹ sư hạ tầng và tự động hóa.​
    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