Git không tự mình vứt bỏ thông tin *. Tất cả các phiên bản trước của mỗi tệp luôn có sẵn để hoàn nguyên, tìm khác biệt, kiểm tra, et cetera.
Toàn cây so với tập tin cá nhân
Những gì bạn có thể đang cố gắng hòa giải là ý tưởng truy cập một phiên bản cũ của một tệp riêng lẻ so với thực tế là mô hình lịch sử của Git tập trung vào toàn bộ cây. Phiên bản toàn cây đòi hỏi phải có thêm một chút công việc để xem (ví dụ) phiên bản foo.c
như đã tồn tại mười foo.c
lần trước đây so với mười thay đổi toàn cây trước đây:
# 10 foo.c-changes ago
git show $(git rev-list -n 10 --reverse HEAD -- foo.c | head -1):foo.c
# 10 whole-tree-changes ago
git show HEAD~10:foo.c
Lợi ích của việc định hướng cây, chủ yếu là khả năng xem các cam kết như là một đơn vị thay đổi phụ thuộc lẫn nhau được thực hiện cho các phần khác nhau của toàn bộ cây, nói chung vượt trội hơn nhiều so với việc gõ thêm (có thể giảm bớt bằng bí danh, tập lệnh, et cetera) và thời gian CPU đã dành đào qua các cam kết trong quá khứ.
Hiệu quả lưu trữ
Khi một đối tượng mới (ví dụ: một tệp có nội dung chưa từng thấy trước đó) xâm nhập vào hệ thống, nó sẽ được lưu trữ với nén (zlib) đơn giản dưới dạng một đối tượng lỏng lẻo. Khi tích lũy đủ các đối tượng lỏng lẻo (dựa trên gc.auto
tùy chọn cấu hình; hoặc khi người dùng chạy git gc hoặc một trong các lệnh đóng gói cấp thấp hơn), Git sẽ thu thập nhiều đối tượng lỏng lẻo vào một tập tin gói khác.
Các đối tượng trong tệp gói có thể được lưu trữ dưới dạng dữ liệu nén đơn giản (giống như một đối tượng lỏng lẻo, chỉ được gói cùng với các đối tượng khác) hoặc dưới dạng deltas nén đối với một số đối tượng khác. Deltas có thể được nối với nhau đến độ sâu có thể định cấu hình ( pack.depth
) và có thể được tạo ra để chống lại bất kỳ đối tượng phù hợp nào ( pack.window
kiểm soát mức độ tìm kiếm Git rộng rãi cho cơ sở delta tốt nhất; một phiên bản của tệp không liên quan trong lịch sử có thể được sử dụng làm cơ sở nén delta tốt). Các vĩ độ mà cấu hình độ sâu và kích thước cửa sổ cung cấp cho công cụ nén delta thường dẫn đến nén delta tốt hơn so với nén nén phiên bản đơn giản theo kiểu CVS đơn giản so với phiên bản trước.
Chính việc nén delta tích cực này (kết hợp với nén zlib bình thường) thường có thể để kho lưu trữ Git (có lịch sử đầy đủ và cây làm việc không nén) chiếm ít không gian hơn so với kiểm tra SVN duy nhất (với cây làm việc không nén và bản sao nguyên sơ).
Xem phần Git lưu trữ các đối tượng và các phần Packfile của Sách cộng đồng Git . Ngoài ra git gói-đối tượng manpage .
* Bạn có thể nói Git vứt bỏ các cam kết bằng cách viết lại lịch sử, và với các lệnh như git reset , nhưng ngay cả trong những trường hợp này, Git đã bị treo lên trên các cam kết mới bị loại bỏ trong một thời gian, chỉ trong trường hợp bạn quyết định rằng bạn cần chúng. Xem git reflog và git prune .