Git, cũng như các dịch vụ như Github, được xây dựng và tối ưu hóa cho các tệp mã dựa trên văn bản nhẹ và hiếm khi thấy các kho lưu trữ lớn hơn vài GB. Tuy nhiên, nó thường hữu ích khi theo dõi các tệp lớn và để làm điều đó dễ dàng hơn, Git cung cấp phần mở rộng Lưu trữ tệp lớn (LFS).
Mục lục
Cách hoạt động của Git Large File Storage (LFS)
Về mặt kỹ thuật, Git không có kích thước tệp tối đa, nhưng nó bắt đầu bị chia nhỏ khi bạn bắt đầu đạt đến kích thước tệp nhất định. Github xác định mức tối đa này là 100 MB cho mỗi kho lưu trữ.
Giới hạn mềm này phụ thuộc vào cách Git lưu trữ dữ liệu nội bộ. Mặc dù hiển thị cho người dùng danh sách các thay đổi, được gọi là khác biệt, Git thực sự sử dụng phương pháp dựa trên ảnh chụp nhanh để lưu trữ dữ liệu nội bộ và sử dụng phương pháp đó để tạo lại các khác biệt, chứ không phải theo cách khác.
Điều này là tốt cho một lượng nhỏ dữ liệu, nhưng nó có nghĩa là mỗi khi một tệp được sửa đổi, phải thực hiện một bản chụp nhanh, và vì vậy nếu tệp rất lớn, nó có thể nhanh chóng chiếm nhiều dung lượng. Git quản lý điều này nội bộ một chút với “packfiles”, có thể thực hiện một số công việc thu gom rác, nhưng vấn đề khi làm việc với các tệp lớn vẫn còn.
Vì vậy, một giải pháp được gọi là Git Large File Storage (LFS) đã được thực hiện. Về cơ bản, thay vì lưu trữ tệp thực tế trong kho lưu trữ, Git LFS chỉ lưu trữ một con trỏ đến nơi tệp đó thực sự ở đó. Khi ứng dụng khách Git của bạn muốn sao chép một kho lưu trữ hoặc kiểm tra tệp, nó sẽ tải tệp đó xuống từ Git LFS.
Điều này có nghĩa là bạn sẽ không cần tải xuống mọi đối tượng được tạo phiên bản chỉ để sao chép repo. LFS giúp việc thiết lập và chạy kho lưu trữ nhanh hơn nhiều vì Git chỉ quan tâm đến con trỏ, con trỏ nhỏ và chỉ tìm nạp dữ liệu mà nó cần.
Nhược điểm chính là bây giờ bạn không thể sử dụng các gói, có nghĩa là bạn sẽ cần thêm dung lượng cho mỗi và mọi bản sao của tệp. Tuy nhiên, với LFS cho phép bạn có một kho lưu trữ lớn với thời gian sao chép tối ưu, điều này không ảnh hưởng đến trải nghiệm của nhà phát triển.
Bạn có thể sử dụng Git LFS ở đâu?
Để sử dụng nó, bạn sẽ cần một máy chủ được định cấu hình để sử dụng Git LFS. Nó chỉ là một phần mở rộng của Git, vì vậy bạn không cần cài đặt thêm bất kỳ phần mềm nào hoặc thiết lập máy chủ để xử lý việc lưu trữ dữ liệu.
Github có hỗ trợ Git LFS, nhưng chỉ cho phép 10 GB trên mỗi kho lưu trữ. Điều này áp dụng cho các repo thông thường cũng như các repo LFS. Tuy nhiên, khá dễ dàng để mua thêm dữ liệu từ Cài đặt> Thanh toán và 50 GB chỉ tốn thêm 4,20 đô la một tháng:
Bạn cũng sẽ cần phải trả tiền cho băng thông, vì việc cập nhật các tệp lớn sẽ tạo ra một bản sao của tệp và phải gửi toàn bộ.
Nếu bạn muốn lưu trữ các kho lưu trữ đặc biệt lớn và muốn thực hiện việc đó trên phần cứng của riêng mình, chúng tôi khuyên bạn nên sử dụng Gitlab tự lưu trữ. Bạn có thể đọc hướng dẫn của chúng tôi về cách thiết lập phiên bản Gitlab cá nhân để tìm hiểu thêm.
CÓ LIÊN QUAN: Cách thiết lập máy chủ Gitlab cá nhân
Cài đặt và sử dụng Git LFS
Bạn sẽ cần tải xuống và cài đặt Git LFS từ trang web của họ.
Sau đó, mở Git hoặc Git Bash trên Windows và chạy lệnh cài đặt để xác minh rằng nó đang hoạt động:
git lfs install
Git LFS hoạt động hơi tách biệt với Git. Nó không tự động theo dõi các tệp trên một kích thước nhất định; bạn sẽ cần thêm tệp vào Git LFS theo cách thủ công để bắt đầu sử dụng nó. Bạn có thể sử dụng cú pháp ký tự đại diện cho việc này:
git lfs track "*.dat"
Bạn có thể dùng ls-files
và status
để xem trạng thái của chính hệ thống con Git LFS:
git lfs ls-files git lfs status
Di chuyển sang Git LFS
Nếu bạn đang đến từ một kho lưu trữ Git hiện có hoặc vô tình phạm phải điều gì đó mà không theo dõi nó trước trong Git LFS, bạn sẽ cần sử dụng migrate
công cụ để di chuyển dữ liệu sang LFS.
Ví dụ: nhập tất cả các tệp hiện có khớp với ký tự đại diện:
git lfs migrate import --include="*.mp4"
Hoặc chỉ gửi mọi thứ sang LFS:
git lfs migrate import --everything
Bạn có thể cần phải làm git push --force
để ghi đè lịch sử chi nhánh.