Câu trả lời:
Tôi không chắc chắn những gì bạn muốn. Trước hết, tất nhiên mỗi lần bạn cam kết / đẩy thư mục sẽ lớn hơn một chút, vì nó phải lưu trữ từng cam kết bổ sung đó.
Tuy nhiên, có lẽ bạn muốn git gc
"dọn sạch các tệp không cần thiết và tối ưu hóa kho lưu trữ cục bộ" ( trang thủ công ).
Một lệnh có thể có liên quan khác là git clean
sẽ xóa các tệp không bị theo dõi khỏi cây của bạn ( trang thủ công ).
WARNING
Lệnh như được viết ở trên bởi @Kalle sẽ xóa MỌI > KHÔNG GIỚI HẠN <TẬP TIN VÀ TRỰC TIẾP TRONG ROOT GIT CỦA BẠN , không chỉ là "các tệp được liệt kê trong .gitignore". Bất cứ điều gì không được theo dõi bởi Git, bất kể nó có được liệt kê hay không .gitignore
sẽ bị xóa. git clean -dfX
(lưu ý trường hợp trên X
) sẽ chỉ xóa các mục có quy tắc áp dụng trong .gitignore
. Vui lòng lưu ý cảnh báo này: Không bao giờ chạy git clean
mà không chạy trong chế độ tương tác, -i
thay vì -f
hoặc ít nhất là chạy khô trước - -n
và sau đó chạy lại với -f
.
Chạy:
git remote prune origin
Xóa tất cả các nhánh theo dõi cũ đã bị xóa origin
nhưng vẫn có sẵn tại địa phương remotes/origin
.
git gc --auto
' G arbage C ollection ' - chạy các nhiệm vụ vệ sinh (nén các bản sửa đổi, loại bỏ các vật thể lỏng lẻo / không thể tiếp cận). Các --auto
lá cờ đầu tiên xác định xem có bất kỳ công việc là cần thiết, và lối thoát hiểm mà không làm bất cứ điều gì nếu không muốn nói.
Một kịch bản trong đó repo git của bạn sẽ trở nên nghiêm trọng hơn với mỗi lần xác nhận là một trường hợp bạn đang cam kết các tệp nhị phân mà bạn tạo thường xuyên. Lưu trữ của họ sẽ không hiệu quả hơn tập tin văn bản .
Một cái khác là một trong đó bạn có một số lượng lớn các tệp trong một repo ( giới hạn của git ) thay vì một số thay thế ( được quản lý như các mô hình con ).
Trong bài viết này về không gian git , AlBlue đề cập:
Lưu ý rằng Git (và Hg và các DVCS khác) gặp phải sự cố khi các tệp nhị phân (lớn) được kiểm tra, sau đó bị xóa, vì chúng vẫn sẽ hiển thị trong kho lưu trữ và chiếm dung lượng, ngay cả khi chúng không hiện tại .
Nếu bạn có các tệp nhị phân lớn được lưu trữ trong repo git của mình, bạn có thể xem xét:
git filter-branch
(cảnh báo: điều này sẽ viết lại lịch sử, điều này thật tệ nếu bạn đã đẩy repo của mình và nếu người khác đã rút khỏi nó)Như tôi đã đề cập trong " là gì các giới hạn tập tin trong Git (số lượng và kích thước)? ", Gần đây hơn (năm 2015, 5 năm sau khi câu trả lời này) Git LFS từ GitHub là một cách để quản lý các tập tin lớn (bằng cách lưu trữ chúng bên ngoài các Kho Git).
vâng vâng, git gc
là giải pháp, một cách tự nhiên,
và cục bộ - bạn chỉ có thể xóa kho lưu trữ cục bộ và sao chép lại,
những giây bạn chờ đợi để xử lý git & bên ngoài khổng lồ đó được thu thập thành những phút dài trong đó được thu thập đến hàng giờ không hiệu quả,
Tạo một kho lưu trữ mới (hoàn toàn, không chỉ là một nhánh) từ đầu , bao gồm cả phiên bản tệp gần đây, tự nhiên bạn sẽ mất tất cả lịch sử,
nhưng khi ở trong thế giới mã không phải là lúc để có được tình cảm, không có điểm nào kéo theo toàn bộ 5 năm mã mỗi cam kết hoặc khác biệt, bạn vẫn có thể lưu trữ git & externals cũ ở đâu đó, nếu bạn hoài cổ:]
nhưng, đến một lúc nào đó bạn thực sự phải di chuyển theo:]
nhóm của bạn sẽ cảm ơn bạn!
Chạy lệnh này cực kỳ nguy hiểm, nhưng sẽ thu nhỏ kho lưu trữ của bạn bằng cách xóa tất cả các tệp sao lưu / sao lưu git của bạn:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Nó sẽ xóa tất cả các tệp git sử dụng để khôi phục kho lưu trữ của bạn khỏi một số lệnh xấu, ví dụ: nếu bạn đã làm git reset --hard
, bạn thường có thể khôi phục các tệp bị mất. Nhưng nếu bạn làm git reset --hard
trước git reflog expire...
lệnh thì bạn sẽ mất tất cả. Bây giờ, hy vọng duy nhất của bạn là sử dụng một số công cụ phân tích hệ thống tệp của bạn và cố gắng khôi phục các tệp đã bị xóa, nếu chúng không bị ghi đè.
git clean -d -f -i
là cách tốt nhất để làm điều đó
Điều này sẽ giúp làm sạch một cách kiểm soát hơn.
-i
là viết tắt của tương tác.
git clean
không phải là để làm sạch repo nhiều như làm sạch thư mục. Đối với người dùng sao chép / dán một cách mù quáng, hãy cẩn thận; điều này loại bỏ các tập tin / thư mục không bị theo dõi mà bạn thực sự có thể muốn cục bộ.
Không biết nó có thu nhỏ nó không, nhưng sau khi tôi chạy git clean
, tôi cũng thường làm git repack -ad
như vậy, điều này làm giảm số lượng tệp gói.
git gc
quy trình, vì vậy không cần phải chạy riêng