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:
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ư:
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:
Điều này khiến Git đặc biệt phù hợp với:
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:
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:
Điều này giúp:
Git Object Model
Git sử dụng ba loại object chính. Blob
Lưu dữ liệu file.
Có thể là:
Git không quan tâm loại dữ liệu.
Tree
Lưu cấu trúc thư mục.
Tree chứa:
Commit
Commit chứa metadata:
Branch – Tính năng làm nên sự thành công của Git
Branch có thể hiểu là:
Ví dụ:
main
├── feature-login
├── feature-api
└── bugfix-vpn
Git khuyến khích:
Điều này giúp:
HEAD là gì?
HEAD là:
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à:
Ví dụ:
git tag v1.0.0
git tag v2.1.0
Tag thường dùng cho:
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:
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ẽ:
Rebase
Rebase giúp:
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:
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:
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:
Trong DevOps hiện đại:
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.
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ẽ:
- Tìm Common Ancestor
- So sánh thay đổi
- 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ử
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.