2010-05-28 27 views
10

Tệp .git của tôi đã tăng lên 229Mb và tôi tự hỏi cách tốt nhất để cắt giảm kích thước là gì. Tôi biết về git gc và đã sử dụng nó một số tiền hợp lý. Tôi không hoàn toàn chắc chắn về cách git hoạt động, nhưng tôi biết rằng có thông tin đóng gói trong đó mà tôi không còn cần. Giống như, tôi biết tôi không còn cần năm chi nhánh đầu tiên được cứu. Có cách nào để xóa hoàn toàn các nhánh hoặc cam kết thực sự cũ hay thứ gì đó như thế không?Quản lý kích thước tệp .git

Trả lời

14

Nếu bạn muốn giữ của bạn (có thể truy cập) cam kết lịch sử còn nguyên vẹn, sau đó hết hạn, đóng gói lại, mận, và rác thu thập:

git reflog expire --expire=0 --all 
git repack -ad 
git prune 
git gc 

này cần được kích thước tối thiểu bạn có thể nhận repo của bạn tiếp tục lịch sử cam kết của bạn.

Nếu không, nghĩa là, bạn muốn hoặc không nhớ bắt đầu lại với trạng thái hiện tại của repo như cam kết ban đầu, sau đó phương pháp tiếp cận của Peter Tillemans sẽ làm điều đó.

+0

Điều này giống như một cách tiếp cận tốt, cảm ơn! – DavidP6

+1

'git gc' tự động chạy' git prune', như đã đề cập trong trang tài liệu này, ví dụ: https://www.kernel.org/pub/software/scm/git/docs/git-prune.html – kontur

1

Các dễ nhất là nên làm một

git clone --depth 1 your_old_repo 

trên một vị trí mới và sau đó trao đổi nó trở lại tại chỗ.

cũng thấy git faq

+0

Rất tiếc, bản sao nông nghiệp có chức năng giới hạn. –

1

Tôi muốn làm một chút về rác thu gom với git gc

+0

Với tùy chọn '--prune = ', có lẽ. – Cascabel

2

Bạn có một số kỹ thuật trong "Reduce git repository size", nhưng tôi cũng đề cập đến trong số đó hơn git gc alone can increase the size of the repo!

Vì vậy, một số chi nhánh bộ lọc (cũng được tham chiếu trong that question) có thể cần thiết, nếu không ai chủ động kéo từ repo của bạn.

Một yếu tố có xu hướng tăng nhanh chóng kích thước của repo Git là phiên bản của quá nhiều tệp nhị phân. Đây là một trong Git limits, vì vậy hãy thử để:

  • phiên bản đối tượng lớn như vậy trong repo Git riêng của họ, tham chiếu như submodules
  • hoặc phiên bản chúng trong một kho lưu trữ bên ngoài thực hiện việc giao, giống như một kho Maven (ie " không có trong repo Git ")
Các vấn đề liên quan