Mục Lục
1. Trường hợp nếu chỉ commit file lớn một vài lần
Nếu bạn commit một tệp lớn một lần, sau đó không commit lại tệp lớn đó nữa và chỉ commit các tệp khác, thì sự khác biệt về dung lượng kho lưu trữ giữa Git thông thường và Git LFS sẽ như sau:
1.1. Git Thông Thường:
- Lưu Trữ Mọi Phiên Bản: Trong Git thông thường, mỗi lần bạn commit một tệp, Git lưu trữ toàn bộ nội dung của tệp đó trong các đối tượng Git (objects). Nếu bạn commit một tệp lớn và sau đó không commit lại tệp lớn đó, các bản sao của tệp lớn sẽ vẫn được lưu trữ trong lịch sử commit.
- Tăng Dung Lượng Kho Lưu Trữ: Nếu tệp lớn được commit 10 lần, dù bạn không thay đổi tệp trong các commit tiếp theo, dung lượng kho lưu trữ của Git sẽ tăng lên vì mỗi commit sẽ chứa một bản sao của tệp lớn. Nếu bạn xóa tệp lớn trong các commit tiếp theo nhưng không xóa lịch sử commit cũ, kho lưu trữ vẫn giữ lại tất cả các phiên bản của tệp lớn đó.
1.2. Git LFS:
- Lưu Trữ Con Trỏ (Pointer): Khi bạn commit một tệp lớn với Git LFS, Git LFS lưu trữ một con trỏ nhỏ trong các commit thay vì lưu trữ toàn bộ nội dung của tệp. Nội dung của tệp lớn được lưu trữ riêng biệt trên máy chủ Git LFS.
- Dung Lượng Kho Lưu Trữ Git Chính: Nếu bạn commit một tệp lớn một lần và sau đó không commit lại tệp lớn đó nữa, dung lượng của kho lưu trữ Git chính sẽ không tăng đáng kể sau các commit tiếp theo vì Git LFS chỉ lưu trữ các con trỏ nhỏ trong các commit.
- Lịch Sử Tệp Lớn: Các phiên bản của tệp lớn vẫn được lưu trữ trên máy chủ Git LFS. Tuy nhiên, kho lưu trữ Git chính chỉ giữ các con trỏ nhỏ, không làm tăng đáng kể dung lượng của kho lưu trữ Git chính.
1.3. So Sánh:
- Git Thông Thường:
- Nếu bạn commit một tệp lớn 10 lần, dung lượng của kho lưu trữ Git chính sẽ tăng đáng kể vì mỗi commit chứa toàn bộ nội dung của tệp lớn.
- Ngay cả khi bạn không commit tệp lớn nữa, các bản sao cũ của tệp vẫn tồn tại trong lịch sử và làm tăng kích thước kho lưu trữ.
- Git LFS:
- Nếu bạn commit một tệp lớn và sau đó không commit lại tệp lớn nữa, dung lượng kho lưu trữ Git chính sẽ không tăng đáng kể vì chỉ có các con trỏ nhỏ được lưu trữ trong các commit.
- Dung lượng của máy chủ Git LFS sẽ tăng vì nó lưu trữ các phiên bản của tệp lớn, nhưng điều này không ảnh hưởng đến kích thước của kho lưu trữ Git chính.
1.4. Kết Luận:
Nếu bạn sử dụng Git thông thường và commit một tệp lớn nhiều lần, dung lượng kho lưu trữ Git chính sẽ tăng lên với mỗi commit. Nếu bạn sử dụng Git LFS, dung lượng kho lưu trữ Git chính sẽ không tăng đáng kể vì chỉ có các con trỏ nhỏ được lưu trữ trong các commit, trong khi các phiên bản của tệp lớn được lưu trữ trên máy chủ Git LFS.
2. Trường hợp nếu commit file lớn nhiều lần
Khi bạn liên tục commit một tệp lớn, chẳng hạn như một tệp có kích thước 100MB, thì việc sử dụng Git thông thường và Git LFS sẽ dẫn đến các kết quả khác nhau về dung lượng lưu trữ của kho lưu trữ (repository). Dưới đây là sự so sánh giữa Git thông thường và Git LFS trong trường hợp này:
2.1. Git Thông Thường:
- Lưu Trữ Toàn Bộ Nội Dung Tệp:
- Mỗi lần bạn commit tệp lớn 100MB, Git sẽ lưu toàn bộ nội dung của tệp vào kho lưu trữ. Điều này có nghĩa là mỗi phiên bản của tệp được lưu trữ đầy đủ trong lịch sử commit.
- Tăng Dung Lượng Kho Lưu Trữ:
- Nếu bạn commit tệp 100MB này 10 lần, dung lượng của kho lưu trữ sẽ tăng thêm 1GB (100MB x 10 commits). Điều này xảy ra vì Git lưu trữ toàn bộ nội dung của tệp trong mỗi commit, ngay cả khi chỉ có một phần nhỏ của tệp thay đổi.
- Bảo Mật và Độc Lập:
- Git thông thường bảo đảm rằng mỗi commit là một đơn vị độc lập, lưu trữ toàn bộ nội dung cần thiết để khôi phục lại phiên bản đó. Tuy nhiên, điều này có thể gây ra việc lãng phí không gian lưu trữ khi làm việc với các tệp lớn.
2.2. Git LFS (Large File Storage):
- Lưu Trữ Con Trỏ Thay vì Nội Dung:
- Khi sử dụng Git LFS, mỗi lần bạn commit tệp 100MB, Git chỉ lưu một con trỏ nhỏ trong kho lưu trữ Git chính. Con trỏ này trỏ đến nơi tệp lớn thực sự được lưu trữ trên máy chủ Git LFS.
- Dung Lượng Kho Lưu Trữ Không Tăng Đáng Kể:
- Nếu bạn commit tệp 100MB này 10 lần, dung lượng của kho lưu trữ Git chính sẽ không tăng đáng kể. Điều này là do Git LFS chỉ lưu trữ con trỏ cho tệp lớn, không phải toàn bộ nội dung của tệp.
- Tuy nhiên, dung lượng trên máy chủ Git LFS sẽ tăng lên vì nó lưu trữ tất cả các phiên bản của tệp lớn.
- Tối Ưu Hóa Cho Các Tệp Lớn:
- Git LFS được thiết kế đặc biệt để xử lý các tệp lớn một cách hiệu quả, giảm thiểu sự gia tăng dung lượng của kho lưu trữ Git chính.
2.3. So Sánh Dung Lượng:
Khía Cạnh | Git Thông Thường | Git LFS |
---|---|---|
Lưu Trữ Nội Dung | Lưu toàn bộ nội dung của tệp trong mỗi commit. | Lưu trữ con trỏ đến tệp lớn trong kho lưu trữ Git chính. |
Tăng Dung Lượng Git | Tăng lên đáng kể với mỗi lần commit tệp lớn. | Tăng rất ít trong kho lưu trữ Git chính, chủ yếu tăng ở Git LFS server. |
Xử Lý Các Tệp Lớn | Không tối ưu, có thể làm phình to kho lưu trữ. | Tối ưu hóa cho các tệp lớn, giảm thiểu dung lượng lưu trữ của Git chính. |
2.4. Kết Luận:
- Git Thông Thường: Nếu bạn liên tục commit một tệp lớn, dung lượng kho lưu trữ sẽ tăng nhanh chóng, làm phình to kho lưu trữ Git chính. Điều này có thể gây ra các vấn đề về hiệu suất và quản lý dung lượng lưu trữ.
- Git LFS: Git LFS giúp giữ dung lượng của kho lưu trữ Git chính ổn định bằng cách lưu trữ các tệp lớn riêng biệt trên một máy chủ khác. Điều này rất hữu ích khi làm việc với các tệp lớn và cần giữ cho kho lưu trữ Git chính nhẹ và dễ quản lý.
Nếu bạn đang xử lý các tệp lớn trong dự án của mình, Git LFS là một giải pháp hiệu quả để tránh tình trạng kho lưu trữ bị phình to và giữ cho quy trình làm việc của bạn nhanh chóng và linh hoạt.
Xin chào,
Bài viết này sử dụng AI ChatGPT để viết sau đó được lựa chọn, biên tập lại nội dung, chỉ một phần nhỏ các bài là tôi tự viết. Nội dung thể hiện ý chí cá nhân về các vấn đề, giải pháp. Tôi lưu tại website này để học, tra cứu và chia sẻ.
Tôi là Minh, sống tại Hà Nội, kỹ sư phần mềm với hơn 20 năm kinh nghiệm. Các ngôn ngữ yêu thích của tôi là Swift, Objective-C, Java, Kotlin, .NET, HTML, JavaScript, CSS, Bootstrap, jQuery, AngularJS, Angular…
Các bạn có thể tải app của tôi trên App Store hoặc Google Play:
QuestionBank-Ôn thi vào 10: phiên bản iOS, phiên bản Android
TypingTest by QuestionBank: phiên bản iOS, phiên bản Android
Xin cảm ơn,
Minh