Git LFS – Quản Lý Tệp Lớn Trong Git Hiệu Quả Cho Developer

Git LFS Là Gì?

Git LFS (Large File Storage) là tiện ích mở rộng chính thức của Git, giúp developer quản lý các tệp lớn như hình ảnh, video, file audio, mô hình machine learning và các file binary. Thay vì lưu toàn bộ nội dung file vào repository Git, Git LFS lưu một con trỏ tham chiếu (pointer) có kích thước chỉ vài trăm byte trong repo, còn dữ liệu thực được lưu trữ trên server LFS riêng biệt.

Git LFS quản lý file lớn trong repository
Git LFS quản lý file lớn trong repository

Vấn Đề Với Git Truyền Thống Khi Xử Lý File Lớn

Khi bạn thêm file lớn vào Git truyền thống, mỗi lần commit đều lưu toàn bộ nội dung file đó vào lịch sử (.git/objects). Điều này gây ra nhiều vấn đề nghiêm trọng:

  • Kho repository phình to – chỉ vài file binary dung lượng vài trăm MB đã có thể đẩy repo lên hàng GB chỉ sau vài tháng
  • Clone chậm đau đớn – mỗi developer clone repo đều tải toàn bộ lịch sử mọi phiên bản file lớn
  • Diff không ý nghĩa – Git không thể so sánh binary file một cách có ích, mọi thay đổi hiển thị là “Binary files differ”
  • Băng tải CI/CD tăng – mỗi pipeline clone đều tải thừa dữ liệu không cần thiết

Cài Đặt Git LFS Trên Hệ Thống

Cài đặt Git LFS sau khi đã cài Git trên máy:

git lfs install
git lfs track "*.psd"
git lfs track "*.zip"
git lfs track "*.bin"
git lfs track "*.mp4"
git lfs track "*.model"
git lfs track "*.weights"

Các lệnh trên tạo file .gitattributes ở thư mục gốc repo, liệt kê các phần mở rộng cần quản lý bằng LFS. File này cần commit vào repo để toàn bộ team cùng sử dụng.

Cách Hoạt Động Của Git LFS

Git LFS hoạt động theo mô hình con trỏ + object store:

Thành phần Mô tả
Con trỏ trong repo File text ~130 byte chứa ID object, kích thước, SHA-256 hash của file thật
Object store (server) Server LFS lưu file thật theo hash, không ảnh hưởng kho Git chính
Hook trong checkout Tự động tải file thật khi checkout commit có chứa LFS files
LFS fetch/pull Chỉ tải file cần thiết, không tải toàn bộ lịch sử
Sơ đồ kiến trúc Git LFS pointer và object store
Sơ đồ kiến trúc Git LFS pointer và object store

Workflow Thực Tế Cho Developer

Quy trình làm việc với Git LFS trong dự án thực tế:

  1. Theo dõi file mới – Chạy git lfs track "*.extension" cho từng loại file cần quản lý
  2. Thêm vào staginggit add .gitattributes file.binary (cả config lẫn file)
  3. Push lên remote – Git đẩy con trỏ trước, LFS đẩy file thật song song qua API riêng
  4. Đồng đội clone – Chỉ tải con trỏ (< 1KB), tải file thật khi cần qua git lfs pull
  5. Switch branch – Git checkout tự động tải file LFS tương ứng với branch đó

Cấu Hình Server LFS

Phần lớn Git host (GitHub, GitLab, Bitbucket) đã tích hợp sẵn LFS server. Cấu hình cơ bản:

# GitHub: lưu trữ 1GB miễn phí, gói trả phí mở rộng
git lfs env

# Self-hosted: cài LFS adapter
git lfs track "*.psd" --verbose
git config lfs.storage "/var/lfs/objects"

Hạn Chế Cần Lưu Ý

  • Bandwidth upload – mỗi push chứa file LFS mới đều phải upload toàn bộ file đó (không có incremental upload)
  • Storage quota – GitHub Free giới hạn 1GB LFS, GitLab Free 10GB; vượt quá cần trả phí
  • Không hỗ trợ mọi host – Cần host có cài đặt Git LFS server; không phải Git hosting nào cũng hỗ trợ
  • Tốn thời gian ban đầu – Quá trình upload file LFS lớn có thể mất nhiều thời gian, đặc biệt trên đường chậm

So Sánh Git LFS Với Git Thuần

Tiêu chí Git thuần Git LFS
File nhị phân Lưu toàn bộ trong repo Lưu pointer, file thật trên server riêng
Dung lượng repo Tăng nhanh Giữ nhỏ gọn
Clone time Chậm hơn với file lớn Nhanh hơn đáng kể
Diff Không phân tích được binary Không áp dụng (bỏ qua file LFS)
Cài đặt Không cần thêm Cần cài git-lfs client

Best Practices Khi Dùng Git LFS

  • Chỉ track file binary thực sự lớn (>10MB); file text nhỏ không cần LFS
  • Đồng bộ .gitattributes ngay từ đầu dự án
  • Sử dụng git lfs ls-files để kiểm tra file nào đang được track
  • Xóa file LFS không dùng: git lfs prune dọn dẹp object store cục bộ

Kết Luận

Git LFS là giải pháp thiết yếu cho bất kỳ dự án nào có file nhị phân lớn trong repository. Hiểu cách cài đặt, cấu hình và quản lý giúp team tránh repo phình to, tăng tốc clone, và giữ lịch sử Git gọn nhẹ. Đặc biệt quan trọng với các dự án game dev, ML model training, và thiết kế đồ họa. Đọc tài liệu chính thức tại Git-Scm BookGitHub Git LFS.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Thiết Lập Môi Trường Phát Triển Python Với Pyenv Và Venv

Thiết Lập Môi Trường Phát Triển Python Với Pyenv Và Venv Python là ngôn ngữ phổ biến cho việc phát triển phần mềm, dữ liệu và trí tuệ nhân tạo….

Xem thêm

Lean 4: Ngôn ngữ lập trình chứng minh định lý hiện đại

Lean 4: Ngôn ngữ lập trình chứng minh định lý hiện đại Lean 4 là hệ thống chứng minh định lý và ngôn ngữ lập trình được phát triển bởi…

Xem thêm

Kotlin Coroutines: Hướng Dẫn Lập Trình Bất Đồng Bộ Trên Android

Kotlin Coroutines: Hướng Dẫn Lập Trình Bất Đồng Bộ Trên Android Kotlin Coroutines là công cụ mạnh mẽ giúp lập trình viên viết code bất đồng bộ một cách dễ…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất