Cập nhật: git prune
sẽ "giải quyết" vấn đề này, ở chỗ nó sẽ loại bỏ các đối tượng lỏng lẻo
( git gc
cuộc gọi git prune
, nhưng chỉ cho các đối tượng lỏng lớn hơn hai tuần, theo mặc định).
Tuy nhiên, như OP Michael Donohue đề cập trong các bình luận:
Tôi thích khía cạnh an toàn của việc giữ các vật thể lỏng lẻo trong hai tuần, nên tôi muốn quay lại và xem lại một số bản sửa đổi cũ, vì vậy tôi không thực sự thích giải pháp này.
Tôi không gặp bất kỳ khó khăn nào với kích thước hoặc hiệu suất của git, chỉ là 'git gui' khăng khăng yêu cầu tôi nén cơ sở dữ liệu, ngay cả khi việc nén cơ sở dữ liệu sẽ không có tác dụng.
Câu trả lời ban đầu:
Vấn đề " git gc
" không loại bỏ tất cả các vật thể lỏng lẻo đã được báo cáo trước đây (cuối năm 2008, " " git gc
"dường như không loại bỏ các vật thể lỏng lẻo nữa "
git gc
chỉ loại bỏ các đối tượng lỏng lẻo cũ hơn hai tuần, nếu bạn thực sự muốn loại bỏ chúng ngay bây giờ, hãy chạy git trimne.
Nhưng hãy đảm bảo rằng không có quy trình git nào khác có thể hoạt động khi bạn chạy nó, hoặc nó có thể dẫm lên thứ gì đó.
" git gc
" sẽ giải nén các đối tượng không thể truy cập được và hiện đang ở trong các gói.
Do đó, dung lượng ổ đĩa được sử dụng bởi kho lưu trữ git thực sự có thể tăng lên đáng kể sau một git gc
thao tác "", điều này có thể gây ngạc nhiên cho một số người đang gần đầy trên hệ thống tệp của họ, xóa một số nhánh khỏi kho lưu trữ theo dõi , và sau đó dấu " git gc
" có thể nhận được một bất ngờ rất khó chịu.
[
Ví dụ: ]
Các chi nhánh cũ được đặt trước thông qua thẻ như next-20081204
.
Nếu bạn cập nhật bản sao cục bộ của linux-next
kho lưu trữ hàng ngày, bạn sẽ tích lũy được một số lượng lớn các thẻ nhánh cũ này.
Sau đó, nếu bạn xóa toàn bộ một loạt chúng và chạy git-gc
, hoạt động sẽ mất khá nhiều thời gian và số lượng khối và inode được sử dụng sẽ tăng lên đáng kể.
Chúng sẽ biến mất sau dấu " git prune
", nhưng khi tôi thực hiện thao tác dọn dẹp này, tôi thường mong muốn có --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
tùy chọn "git gc".
Vậy trong trường hợp của bạn, " git prune
" có hữu ích không?
(có thể bằng cách sử dụng "now" trong gc.pruneexpire
biến cấu hình, cần thiết để hành vi trên xảy ra).
Bạn cũng có (từ cùng một chủ đề):
repack -a -d -l
Chú ý chữ thường 'a'.
git-gc
các lệnh gọi đóng gói lại bằng chữ hoa 'A', đây là nguyên nhân khiến các đối tượng không thể truy cập được giải nén. 'A' nhỏ, dành cho những người biết họ đang làm gì và muốn git chỉ thả các đối tượng không thể truy cập.