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, khi OP Michael Donohue đề cập trong các ý kiến:
tôi làm như các khía cạnh an toàn của việc giữ các đối tượng lỏng lẻo xung quanh trong hai tuần, tôi nên muốn quay trở lại và xem xét một số phiên bản cũ, vì vậy tôi don không thực sự thích giải pháp này.
Tôi không gặp rắc rối với kích thước hoặc hiệu suất của git, nó chỉ là 'git gui', khăng khăng yêu cầu tôi nén cơ sở dữ liệu, ngay cả khi nén cơ sở dữ liệu sẽ không có hiệu lực.
Original câu trả lời:
Các vấn đề của "git gc
" không loại bỏ tất cả vật lỏng lẻo đã được báo cáo trước (cuối năm 2008, ""git gc
" doesn't seem to remove loose objects any more"
git gc
chỉ loại bỏ lỏng lẻo đối tượng lớn 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 prune. chắc chắn không có quá trình git nào khác có thể hoạt động khi bạn chạy nó, hoặc nó có thể có thể bước trên một cái gì đó.
"git gc
" sẽ giải nén các đối tượng không thể truy cập được và hiện đang được đóng gói.
Kết quả là, dung lượng đĩa được sử dụng bởi kho lưu trữ git thực sự có thể đi lên một cách đáng kể sau hoạt động "git gc
", điều này có thể gây ngạc nhiên cho người đang chạy gần đầy trên hệ thống tệp của họ. các chi nhánh từ kho lưu trữ theo dõi và sau đó thực hiện "git gc
" có thể gây bất ngờ rất khó chịu.
[
Ví dụ: ]
Chi nhánh cũ được đặt trước thông qua thẻ chẳng hạn như next-20081204
.
Nếu bạn cập nhật bản sao cục bộ của mình trong kho lưu trữ linux-next
mỗi ngày, bạn sẽ tích luỹ một số lượng lớn các thẻ nhánh cũ này.
Nếu sau đó bạn xóa toàn bộ chuỗi và chạy git-gc
, thao tác này sẽ mất nhiều thời gian và số lượng khối và inodes được sử dụng sẽ tăng đáng kể.
Chúng sẽ biến mất sau "git prune
", nhưng khi tôi thực hiện thao tác dọn dẹp này, tôi thường muốn có tùy chọn --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
cho "git gc".
Vì vậy, trong trường hợp của bạn, "git prune
" có hữu ích không?
(có thể sử dụng "now" trong biến cấu hình gc.pruneexpire
, cần thiết cho hành vi trên xảy ra).
Bạn cũng có (từ cùng một sợi):
repack -a -d -l
Chú ý các chữ thường 'a'.
git-gc
gọi lại bằng chữ hoa 'A' là nguyên nhân khiến các đối tượng không thể truy cập được giải nén. Little 'a', dành cho những người biết họ đang làm gì và muốn git chỉ thả những vật thể không thể tiếp cận.
Hộp thoại đó là một ví dụ tuyệt vời về "tính năng" mà nhiều người mong muốn không tồn tại . Nó không chỉ gây phiền nhiễu, nó có thể xóa các cam kết quan trọng đã trở thành tách ra sau khi thiết lập lại cứng. – adelriosantiago