Hãy để tôi rõ ràng lên quan niệm sai lầm của bạn:
bất cứ ai có thể cho tôi một số ý tưởng tại sao các nhà phát triển git đưa ra quyết định thiết kế để lưu trữ nội dung của file (blobs), vì vậy khi nội dung thay đổi một blob mới cần phải được tạo ra?
giải thích Khá tốt của (ban đầu) thiết kế Git có thể được tìm thấy trong The Git Parable bài luận Tom Preston-Werner của (ngoài một liên kết đến trong Greg Hewgill answer).
Ý tưởng đằng sau thường là (trong dự án đủ lớn) trong bản sửa đổi mới chỉ một vài tệp trong số lượng lớn tệp trong một thay đổi dự án, vì vậy chỉ lưu trữ các phiên bản khác nhau của nội dung tệp. Đây là cùng một ý tưởng rằng Subversion sử dụng trong kỹ thuật 'bản sao giá rẻ' của nó (nó sử dụng hardlinking, IIRC).
Ngoài nội dung của tệp là zlib (deflate) nén (hoặc chính xác hơn mỗi đối tượng trong cơ sở dữ liệu kho git được nén, bao gồm các đối tượng comit).
Tôi tin rằng các cửa hàng Subversion sửa đổi chứ không phải là nội dung, vì vậy khi thay đổi nội dung, nó chỉ đơn giản là theo dõi những khác biệt giữa hai người. Không thể git đã làm nó như thế này là tốt? Lợi ích của việc lưu trữ nội dung thay vì nội dung sửa đổi là gì?
Tôi không hiểu bạn muốn nói gì ở đây.
Nếu lưu trữ chênh lệch tiết kiệm dung lượng, thì tôi muốn nói với bạn rằng ngoài định dạng 'lỏng lẻo' (mỗi đốm màu, tức là mỗi nội dung khác nhau của một tệp được lưu trữ trong tệp riêng biệt bên trong .git
) cũng có định dạng 'được đóng gói', nơi nhiều đối tượng được lưu trữ ở dạng deltaified, sử dụng đồng bằng nhị phân từ thư viện LibXDiff.
Định dạng này được tạo để chuyển mạng (dung lượng ổ đĩa lớn có thể rẻ, nhưng không phải băng thông) và được điều chỉnh theo định dạng trên đĩa. Định dạng này rất hiệu quả, một trong những định dạng hệ thống kiểm soát phiên bản hiệu quả hơn, không hiệu quả nhất, làm cho kho lưu trữ git nhỏ hơn hoặc một trong những nhỏ nhất trong số các hệ thống kiểm soát phiên bản khác nhau. Tùy thuộc vào hoàn cảnh toàn bộ bản sao kho lưu trữ git (có chứa lịch sử đầy đủ) có thể nhỏ hơn Subversion tương đương checkout (có chứa bản sao thay đổi nguyên sơ để svn diff
và svn status
hoạt động mà không cần chuyển mạng).
Thiết kế này ('lỏng' và định dạng 'đóng gói') có lợi thế là đóng gói rất hiệu quả, nhưng có những bất lợi mà bạn phải đóng gói lại bằng tay sử dụng "git gc
" (không phải cho không gian đĩa, nhưng đối với hiệu suất - đĩa I/O); ngày nay hầu hết lệnh git repack repository (an toàn) khi cần thiết.
"nhà phát triển git" đã đưa ra quyết định thiết kế về định dạng 'lỏng lẻo' là Linus Torvalds. Không phải nhà phát triển ** s **. –