2013-08-01 25 views
8

Tôi đang di chuyển một kho lưu trữ từ svn sang git.Xóa nhiều tệp trong bộ lọc git-branch

Trong bước cuối cùng này, tôi muốn xóa hàng tấn tệp không cần thiết khỏi lịch sử.

Tôi đang cố gắng vào lệnh sau:

git filter-branch --prune-empty --index-filter \ 
    "for file in $(cat files); do git rm -rf --cached --ignore-unmatch ${file}; done" -f 

Nhưng nó nói rằng danh sách đối số quá dài.

tôi có thể viết lại như thế này:

for file in $(cat files); do 
    git filter-branch --prune-empty --index-filter \ 
    "git rm -rf --cached --ignore-unmatch ${file}" -f 
done 

Nhưng nó sẽ chạy tấn filter-branch lần, và lịch sử dài .. như vậy, nó sẽ mất quá nhiều thời gian.

Có cách nào nhanh hơn để lọc nhánh loại bỏ nhiều tệp không?

+0

bạn có thể xem xét tách git trong svn 2 git hay không; Tôi về cơ bản yêu cầu tái cấu trúc kho lưu trữ – forvaidya

+0

bản sao có thể có của [Bản ghi nhớ mới có lịch sử được sao chép của các tệp hiện được theo dõi mới] (http://stackoverflow.com/questions/17901588/new-repo-with-copied-history-of-only- hiện đang theo dõi các tập tin) –

+0

Tôi đã làm điều đó. Nhưng repo vẫn còn quá lớn. Đồng nghiệp của tôi đã từng thực hiện các tệp nhị phân cho SVN, như jBoss, JDK và những thứ khác ... một mớ hỗn độn thực sự .. – caarlos0

Trả lời

5

Tôi khuyên bạn nên sử dụng The BFG, một cách thay thế đơn giản hơn, nhanh hơn để git-filter-branch được thiết kế đặc biệt để xóa các tệp không mong muốn khỏi lịch sử Git.

Bạn đề cập trong your comment rằng các tập tin vấn đề là mã nhị phân thường lớn, và The BFG có một lựa chọn cụ thể để xử lý này - bạn nên cẩn thận làm theo usage instructions của BFG, nhưng phần cốt lõi là chỉ này:

$ java -jar bfg.jar --strip-blobs-bigger-than 10M my-repo.git 

Bất kỳ tệp nào có kích thước vượt quá 10MB (không có trong số cam kết mới nhất của bạn) sẽ bị xóa khỏi lịch sử của kho lưu trữ Git của bạn. Sau đó bạn có thể sử dụng git gc để làm sạch đi những dữ liệu chết:

$ git gc --prune=now --aggressive 

BFG là thường ít nhất 10-720x nhanh hơn chạy git-filter-branch, và thường dễ dàng hơn để sử dụng.

Tiết lộ đầy đủ: Tôi là tác giả của BFG Repo-Cleaner.

+0

Tôi sẽ đợi ... nhưng vì đây là câu trả lời duy nhất, tôi đã kiểm tra nó là chính xác. Cảm ơn – caarlos0

+0

Không, tôi đã không sử dụng nó ... Tôi chờ đợi để kết thúc của tôi ... – caarlos0

+1

Điều này là vô dụng đối với một số lượng lớn các tệp rất nhỏ. Ngoài ra, là '- xâm lấn 'một ý tưởng tốt ở đây? Xem [tai ương của "git gc - hung hăng" (và cách git deltas làm việc)] (https://metalinguist.wordpress.com/2007/12/06/the-woes-of-git-gc-aggressive-and- how-git-deltas-work /). – jpmc26

Các vấn đề liên quan