2010-12-30 13 views
30

Tôi vô tình cam kết một số dữ liệu nhị phân lớn vào một số cam kết. Kể từ đó tôi đã cập nhật .gitignore của tôi và các tệp đó không còn được cam kết nữa. Nhưng tôi muốn quay trở lại các commit cũ hơn và chọn lọc các dữ liệu này từ kho lưu trữ, loại bỏ một vài thư mục cần có trong .gitignore. Tôi không muốn loại bỏ các cam kết.Prune dữ liệu nhị phân từ kho git sau khi thực tế

Làm cách nào để tôi hoàn thành việc này? Phương pháp ưa thích của tôi sẽ là một số cách để áp dụng lại các quy tắc .gitignore cho các commit cũ ... một câu trả lời sử dụng phương thức này cũng sẽ khá hữu ích cho người khác, vì tôi chắc chắn rằng vấn đề của tôi không phải là duy nhất. Nó cũng sẽ nhanh chóng áp dụng cho một giải pháp chung, không có nhiều tùy chỉnh cụ thể cho cấu trúc thư mục duy nhất của mỗi người dùng.

Điều này có thể, hoặc là cách dễ dàng tôi đề xuất ở trên hoặc theo cách phức tạp hơn?

+5

Xem [git: vĩnh viễn xóa tệp hoặc thư mục khỏi lịch sử] (http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/) và [Xóa các tệp nhị phân lớn từ kho lưu trữ] (https://groups.google.com/forum/#!topic/github/ghXxynyhj0o). Họ nên giúp đỡ. – marcog

+1

Googling cho 'git remove file from history' sẽ giải quyết được vấn đề của bạn. Bằng cách này, rebasing một thay đổi để .gitignore vào lịch sử đầu và sau đó bằng cách nào đó áp dụng trở lại .gitignore cho tất cả các cam kết có khả năng sẽ không giúp đỡ nhiều, bởi vì đôi khi bỏ qua các tập tin được cố ý kiểm tra trong, và bạn sẽ không muốn mất những người đó. –

Trả lời

11

Các giải pháp trong this answer làm việc một cách hoàn hảo đối với tôi:

Bạn cũng có thể kiểm tra quá trình làm sạch của bạn với một tool like bfg repo cleaner, như trong this answer:

java -jar bfg.jar --delete-files *.{jpg,png,mp4,m4v,ogv,webm} ${bare-repo-dir}; 

(Trừ BFG làm cho chắc chắn nó không xóa mọi thứ trong cam kết mới nhất của bạn, vì vậy bạn cần phải xóa những tệp đó trong chỉ mục hiện tại và thực hiện cam kết "sạch". Tất cả các cam kết trước đó sẽ được làm sạch bởi BFG)

+3

Tôi đã có một thư mục (vô tình) với tất cả các tệp nhị phân và với điều này: ** java -jar bfg.jar --delete-thư mục tải xuống ** repo của tôi đến từ 250Mb đến 20Mb! –

+0

@akauppi - Câu trả lời của anh ta là về git. Anh ta đang tham chiếu một công cụ Java (bfg) để loại bỏ các tệp khỏi kho lưu trữ git dựa trên, nó xuất hiện, phần mở rộng tên tệp. – mwakerman

+0

@mwakerman Tôi thấy điều này tìm cách xóa các tệp khác ngoài java, do đó, giải pháp chung .git sẽ thích hợp hơn cho tôi ở đây. – ryanjdillon

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