MN
KHÁM PHÁ VÀ TRẢI NGHIỆM CÁ NHÂN
MN

Mục Lục

1. Cách dùng Git LFS để quản lý file lớn trong Git

Git LFS (Git Large File Storage) là một phần mở rộng của Git được thiết kế để xử lý các tệp lớn một cách hiệu quả. Trong Git thông thường, mọi tệp và mọi phiên bản của tệp đều được lưu trữ trong lịch sử commit, điều này có thể dẫn đến kích thước kho lưu trữ trở nên rất lớn nếu bạn làm việc với các tệp lớn như video, hình ảnh chất lượng cao, nhị phân, hoặc các file dữ liệu nặng khác.

1.1. Cách Git LFS hoạt động

  1. Theo dõi tệp lớn:
    • Git LFS không lưu trữ trực tiếp tệp lớn trong kho lưu trữ Git. Thay vào đó, nó lưu trữ một pointer (trỏ) đến tệp lớn đó. Pointer này là một tệp văn bản nhỏ chứa thông tin về nơi lưu trữ tệp thực tế.
  2. Lưu trữ tệp lớn bên ngoài:
    • Tệp lớn thực tế được lưu trữ trên một máy chủ LFS riêng biệt (có thể là GitHub, GitLab, hoặc một server tự thiết lập), không phải trong kho lưu trữ Git chính. Khi bạn clone hoặc pull kho lưu trữ, Git LFS sẽ tự động tải về các tệp lớn từ server LFS này.
  3. Tương tác người dùng:
    • Người dùng vẫn tương tác với Git bình thường: add, commit, push và pull. Git LFS hoạt động ngầm để xử lý các tệp lớn. Khi bạn thêm hoặc cập nhật một tệp lớn được Git LFS theo dõi, chỉ pointer được lưu trong lịch sử commit, còn tệp lớn sẽ được quản lý riêng.

1.2. Tại sao nên dùng Git LFS?

  • Giảm kích thước kho lưu trữ: Giúp giữ cho kho lưu trữ Git nhỏ gọn và nhanh chóng bằng cách tách rời các tệp lớn.
  • Hiệu quả hơn cho dự án lớn: Với các dự án có nhiều tệp nhị phân lớn hoặc tệp dữ liệu, Git LFS giúp quản lý dễ dàng hơn và không làm chậm hiệu suất của Git.
  • Tích hợp dễ dàng: Git LFS dễ dàng tích hợp vào quy trình làm việc hiện tại của bạn với Git, không yêu cầu nhiều thay đổi.

1.3. Các lệnh cơ bản của Git LFS

  • git lfs install: Cài đặt Git LFS trong dự án của bạn.
  • git lfs track "*.png": Theo dõi tất cả các tệp .png với Git LFS.
  • git lfs untrack "*.png": Ngừng theo dõi các tệp .png với Git LFS.
  • git lfs ls-files: Liệt kê tất cả các tệp hiện đang được theo dõi bởi Git LFS trong dự án.

1.4. Khi nào nên sử dụng Git LFS?

Git LFS rất hữu ích khi dự án của bạn bao gồm các tệp lớn mà bạn không muốn làm chậm tốc độ của Git hoặc tăng kích thước kho lưu trữ không cần thiết. Điều này đặc biệt quan trọng trong các dự án multimedia, trò chơi, hoặc những dự án sử dụng nhiều tệp nhị phân lớn.

2. Các file như thế nào được coi là lớn trong Git

Trong Git, một tệp được coi là “lớn” khi kích thước của nó bắt đầu ảnh hưởng đến hiệu suất của hệ thống quản lý phiên bản (VCS) và kho lưu trữ Git. Mặc dù không có định nghĩa chính xác về kích thước tệp được coi là lớn, nhưng thường thì các tệp có kích thước từ vài chục megabyte (MB) trở lên đã bắt đầu được coi là lớn.

Dưới đây là một số mức độ chung để xác định tệp lớn trong Git:

2.1. Tệp từ 10MB đến 100MB

  • Tệp trong khoảng này có thể được quản lý bởi Git thông thường, nhưng sẽ bắt đầu làm tăng kích thước của kho lưu trữ và thời gian clone hoặc pull có thể chậm lại, đặc biệt là khi có nhiều tệp lớn trong dự án.
  • Với các tệp trong phạm vi này, Git LFS có thể là lựa chọn tốt để quản lý hiệu quả.

2.2. Tệp lớn hơn 100MB

  • GitHub, chẳng hạn, đặt giới hạn cho kích thước tệp là 100MB cho các tệp được tải lên trực tiếp vào kho lưu trữ. Nếu tệp lớn hơn 100MB, bạn sẽ không thể push tệp đó mà không sử dụng Git LFS hoặc một giải pháp thay thế.
  • Các tệp lớn hơn 100MB thường cần được xử lý bởi Git LFS để tránh các vấn đề về hiệu suất và tuân thủ các giới hạn của nền tảng lưu trữ Git.

2.3. Tệp lớn hơn 1GB

  • Đây là các tệp rất lớn và chắc chắn sẽ gây ra các vấn đề về hiệu suất nếu được lưu trữ trực tiếp trong Git mà không sử dụng Git LFS. Chúng sẽ làm tăng đáng kể kích thước của kho lưu trữ và làm chậm các hoạt động Git thông thường.
  • Sử dụng Git LFS hoặc một hệ thống lưu trữ khác ngoài Git là bắt buộc cho các tệp trong kích thước này.

2.4. Tệp nhị phân và tệp không thể nén

  • Tệp nhị phân, như hình ảnh, video, hoặc tệp thực thi, thường không thể nén hiệu quả bằng các kỹ thuật nén delta mà Git sử dụng cho tệp văn bản. Điều này làm cho chúng trở nên “lớn” hơn khi được quản lý bởi Git thông thường.
  • Các tệp nhị phân lớn thường gây ra sự gia tăng kích thước kho lưu trữ nhanh chóng vì Git không thể quản lý các phiên bản thay đổi của chúng một cách hiệu quả.

2.4. Khi nào nên cân nhắc sử dụng Git LFS?

  • Khi bạn có nhiều tệp trên 10-50MB: Nếu bạn có nhiều tệp lớn trong dự án, bạn nên cân nhắc sử dụng Git LFS để quản lý chúng.
  • Khi bạn gặp giới hạn của nền tảng: Nếu bạn gặp phải giới hạn tải lên của GitHub, GitLab, hoặc các nền tảng khác, việc sử dụng Git LFS là cần thiết.
  • Khi bạn nhận thấy hiệu suất giảm: Nếu bạn thấy Git bắt đầu trở nên chậm chạp hoặc kích thước kho lưu trữ tăng nhanh, việc sử dụng Git LFS để tách các tệp lớn ra là một giải pháp tốt.

3. Lịch sử Git LFS

Git LFS (Git Large File Storage) được phát triển để cải thiện việc quản lý các tệp lớn trong kho lưu trữ Git, giúp giảm kích thước kho lưu trữ và tăng hiệu suất khi làm việc với các tệp lớn như hình ảnh, video, và các tệp nhị phân khác. Dưới đây là lịch sử phát triển và các mốc quan trọng của Git LFS:

3.1. Khởi đầu và ra mắt

  • 2015: Git LFS được tạo ra bởi Scott Chacon, một trong những người sáng lập GitHub, để giải quyết vấn đề quản lý các tệp lớn trong kho lưu trữ Git. Git LFS chính thức được phát hành vào tháng 6 năm 2015.

3.2. Cập nhật và mở rộng

  • 2016: Git LFS 1.0 được phát hành với nhiều cải tiến và sửa lỗi. Trong thời gian này, Git LFS đã bắt đầu được chấp nhận rộng rãi và được tích hợp vào nhiều nền tảng lưu trữ Git như GitHub và GitLab.
  • 2017: Git LFS 2.0 được phát hành với các tính năng mới và cải tiến về hiệu suất, bao gồm việc hỗ trợ các tính năng nâng cao như phân mảnh tệp lớn và cải thiện hiệu suất mạng.

3.3. Tiếp tục phát triển

  • 2018-2019: Git LFS tiếp tục nhận được các bản cập nhật định kỳ để cải thiện hiệu suất và bảo mật. Các nhà phát triển và cộng đồng Git LFS cũng làm việc để mở rộng hỗ trợ cho các nền tảng khác và cải thiện khả năng tương thích.
  • 2020: Git LFS 3.0 được phát hành, giới thiệu các tính năng mới và cải tiến hiệu suất. Các cải tiến này giúp Git LFS hoạt động tốt hơn với các kho lưu trữ lớn và cải thiện khả năng quản lý tệp lớn.

3.4. Tích hợp và tiêu chuẩn hóa

  • 2021: Git LFS đã trở thành tiêu chuẩn trong việc quản lý tệp lớn trong Git và được tích hợp sâu rộng vào nhiều nền tảng lưu trữ mã nguồn, bao gồm GitHub, GitLab, Bitbucket và Azure DevOps.
  • 2022: Git LFS 3.2 được phát hành, mang lại nhiều cải tiến và sửa lỗi, và tiếp tục mở rộng hỗ trợ cho các nền tảng và công cụ khác.

3.5. Hiện tại

  • 2024: Git LFS tiếp tục được phát triển và duy trì, với các bản cập nhật định kỳ để cải thiện hiệu suất và bảo mật. Git LFS đã trở thành một công cụ quan trọng cho việc quản lý các tệp lớn trong các dự án Git và được sử dụng rộng rãi trong ngành công nghiệp phần mềm.

3.6. Tính năng chính của Git LFS

  • Theo dõi tệp lớn: Git LFS cho phép bạn theo dõi các tệp lớn và lưu trữ chúng bên ngoài kho lưu trữ chính.
  • Thay thế tệp lớn bằng pointers: Git LFS thay thế các tệp lớn trong kho lưu trữ Git bằng các pointers nhỏ hơn, giúp giảm kích thước kho lưu trữ và cải thiện hiệu suất.
  • Lưu trữ tệp bên ngoài: Các tệp lớn được lưu trữ trên một máy chủ LFS riêng biệt và chỉ có các pointers được lưu trong kho lưu trữ Git chính.

Git LFS đã giúp giải quyết vấn đề quản lý tệp lớn trong Git và trở thành một phần quan trọng của quy trình phát triển phần mềm hiện đại.

4. Ví dụ cách dùng Git LFS

Dưới đây là hướng dẫn chi tiết về cách sử dụng Git LFS để quản lý các tệp lớn trong dự án của bạn. Các bước này bao gồm cách cài đặt, cấu hình và sử dụng Git LFS trong một kho lưu trữ Git.

4.1. Bước 1: Cài đặt Git LFS

Trên Windows, macOS, hoặc Linux:

  1. Tải và cài đặt Git LFS từ trang chính của Git LFS.
  2. Cài đặt Git LFS bằng lệnh sau trong terminal hoặc command prompt:
git lfs install

4.2. Bước 2: Cấu hình Git LFS để theo dõi các tệp lớn

Chuyển đến thư mục của kho lưu trữ Git của bạn:

cd path/to/your/repo

Theo dõi tệp lớn bằng Git LFS: Giả sử bạn muốn theo dõi tất cả các tệp .zip.mp4, bạn có thể thực hiện các lệnh sau:

git lfs track "*.zip"
git lfs track "*.mp4"

Điều này sẽ thêm các quy tắc theo dõi vào tệp .gitattributes. Bạn có thể kiểm tra nội dung của .gitattributes để xác nhận:

*.zip filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text

Thêm và commit tệp .gitattributes:

git add .gitattributes
git commit -m "Add Git LFS tracking for zip and mp4 files"

4.3. Bước 3: Thêm và commit các tệp lớn

Thêm tệp lớn vào kho lưu trữ:

git add path/to/largefile.zip
git add path/to/largefile.mp4

Commit các tệp lớn:

git commit -m "Add large files with Git LFS"

4.4. Bước 4: Đẩy các thay đổi lên kho lưu trữ từ xa

Đẩy các thay đổi lên kho lưu trữ từ xa:

git push origin main

4.5. Bước 5: Kiểm tra các tệp được theo dõi bởi Git LFS

Liệt kê các tệp đang được theo dõi bởi Git LFS:

git lfs ls-files

Git LFS sẽ quản lý các tệp lớn trong dự án của bạn và giúp giữ cho kho lưu trữ Git chính nhẹ và hiệu quả. Khi các tệp lớn được commit, Git LFS sẽ lưu trữ các tệp đó trên máy chủ LFS và chỉ giữ lại các pointers trong kho lưu trữ chính.

5. Các câu lệnh cơ bản của Git LFS

5.1. Cài Đặt Git LFS

  • Trước khi sử dụng, bạn cần cài đặt Git LFS trên máy tính của mình:bash
git lfs install

Lệnh này sẽ cấu hình Git LFS cho repository của bạn.

5.2. Theo Dõi Tệp Với Git LFS

  • Để theo dõi một loại tệp cụ thể bằng Git LFS, bạn sử dụng lệnh git lfs track:
git lfs track "*.psd"

Ví dụ: Lệnh trên sẽ theo dõi tất cả các tệp có phần mở rộng .psd.

5.3. Ngừng Theo Dõi Tệp Với Git LFS

  • Nếu bạn không muốn Git LFS theo dõi một loại tệp nào đó nữa, bạn có thể sử dụng lệnh git lfs untrack:
git lfs untrack "*.psd"

Ví dụ: Lệnh trên sẽ ngừng theo dõi tất cả các tệp có phần mở rộng .psd.

5.4. Kiểm Tra Các Tệp Được Theo Dõi Bởi Git LFS

  • Để xem các tệp đang được theo dõi bởi Git LFS, bạn sử dụng lệnh git lfs ls-files:
git lfs ls-files

Lệnh này sẽ liệt kê tất cả các tệp trong repository đang được Git LFS quản lý.

5.5. Xem Các Loại Tệp Được Theo Dõi Bởi Git LFS

  • Để xem các mẫu tệp (patterns) mà Git LFS đang theo dõi, bạn có thể xem nội dung của tệp .gitattributes:
cat .gitattributes

5.6. Push Tệp Đã Được Theo Dõi Bằng Git LFS

  • Sau khi theo dõi tệp với Git LFS và thêm chúng vào Git, bạn có thể push chúng lên remote repository:
git add <file_name>
git commit -m "Add large file using Git LFS"
git push origin <branch_name>

5.7. Clone Repository Đã Sử Dụng Git LFS

  • Khi bạn clone một repository sử dụng Git LFS, các tệp lớn sẽ được tải về tự động:
git clone <repository_url>

5.8. Kiểm Tra Phiên Bản Git LFS

  • Để kiểm tra phiên bản Git LFS đang sử dụng, bạn có thể dùng lệnh:
git lfs version

5.9. Xóa Các Tệp Đã Theo Dõi Bằng Git LFS

  • Để xóa các tệp không còn cần thiết từ Git LFS, bạn có thể sử dụng lệnh:
git lfs prune

Lệnh này sẽ xóa các tệp LFS không còn được tham chiếu trong bất kỳ branch nào.

5.10. Di Chuyển Các Tệp Đã Commit Sang Git LFS

  • Nếu bạn đã commit các tệp lớn mà không theo dõi chúng với Git LFS, bạn có thể di chuyển chúng sang Git LFS bằng cách sử dụng lệnh git lfs migrate:
git lfs migrate import --include="*.psd"

Ví dụ: Lệnh trên sẽ di chuyển tất cả các tệp .psd từ lịch sử commit sang Git LFS.

5.11. Kiểm Tra Cấu Hình Git LFS

  • Để kiểm tra cấu hình hiện tại của Git LFS, bạn có thể sử dụng lệnh:
git lfs env