2012-12-18 47 views
7

Tôi đã tự hỏi liệu có ai có cách hiệu quả hơn, thông minh hơn để thực hiện việc này không. Cấu trúc vòng lặp yêu cầu mọi tệp đã xóa sẽ bị xóa khỏi mọi cam kết bằng cách đọc từng cam kết. Với nhiều cam kết, điều này mất một thời gian dài.git xóa tất cả các tệp đã xóa khỏi toàn bộ lịch sử

git log --pretty=format: --name-status | grep -i ^D | cut -f2- | sort -u | xargs -I {} git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch {}' HEAD 

Trả lời

3

Điều đó dường như xóa từng tệp một.
Hãy xem xét rằng git rm có thể xóa nhiều tệp.

Vì vậy, một tối ưu hóa sẽ là xây dựng danh sách đó và gọi cho bộ lọc một lần.
Bạn có thể xem một ví dụ về cách tiếp cận đó trong "Proper way to remove unwanted files with git filter-branch without git rm failing".

+1

Tôi đã tìm thấy 'grep -v -x -f/tmp/files-in-repo.txt' cùng với' xargs --delimiter = \\ n -r git rm ... 'hữu ích. –

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