2010-01-05 39 views
31

Tôi đã sao lưu cơ sở dữ liệu của mình sang GIT để tôi có thể lấy db tại máy tính ở nhà.Làm cách nào để xóa vĩnh viễn một tệp được lưu trữ trong GIT?

Tôi không muốn tệp này được phiên bản, nó chỉ là một điều thời gian thực sự.

Tôi có thể xóa nó cho tốt để GIT không theo dõi nó về phía trước hoặc lịch sử?

+0

thể trùng lặp của [Gỡ bỏ các file nhạy cảm và cam kết của họ trong lịch sử Git] (http://stackoverflow.com/questions/872565/remove-sensitive-files-and-their-commits- từ-git-history) – CharlesB

+0

có thể trùng lặp của [Xóa hoàn toàn tệp khỏi tất cả lịch sử cam kết lưu trữ Git] (http://stackoverflow.com/questions/307828/completely-remove-file-from-all-git-repository-commit- lịch sử) –

Trả lời

57

Tôi luôn tìm thấy Guides: Completely remove a file from all revisions feed hữu ích.

Để loại bỏ các tập tin gọi là Rakefile:

git filter-branch --force --index-filter \ 
  'git rm --cached --ignore-unmatch Rakefile' \ 
  --prune-empty --tag-name-filter cat -- --all 

Lệnh này sẽ chạy toàn bộ lịch sử của tất cả các chi nhánh và thẻ, thay đổi bất kỳ cam kết rằng liên quan đến các tập tin Rakefile, và bất kỳ cam kết sau đó. Cam kết sẽ trống sau đó (vì chúng chỉ thay đổi Rakefile) là bị xóa hoàn toàn.

+3

cảm ơn, điều đó thực sự hiệu quả! Bạn cũng có thể thêm: git push --all --force –

+2

Cảm ơn. Nó đã cho tôi một vài cố gắng vì tôi đã không cung cấp đường dẫn tương đối đầy đủ đến tệp (từ thư mục gốc) và chỉ có tên tệp. – mdiehl13

+1

Hãy nhớ luôn luôn cảnh báo tất cả các đồng nghiệp của bạn khi bạn chuẩn bị viết lại lịch sử trên kho lưu trữ từ xa ('git push --all --force'), nếu không chúng sẽ gặp phải tất cả các vấn đề khi thực hiện thao tác kéo. – pedromanoel

18

Cập nhật cho remote repository:

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch FOLDERNAME" -- --all 

thay FOLDERNAME với các tập tin hoặc thư mục bạn muốn loại bỏ từ kho git nhất định.

rm -rf .git/refs/original/ 

git reflog expire --expire=now --all 

git gc --prune=now 

git gc --aggressive --prune=now 

Bây giờ đẩy tất cả các thay đổi đối với kho lưu trữ từ xa

git push --all --force 

này sẽ dọn dẹp kho từ xa.

3

Bạn cũng có thể sử dụng bfg để dễ dàng.

BFG là một đơn giản hơn, thay thế nhanh hơn để git-filter-branch cho sạch dữ liệu xấu ra khỏi lịch sử kho Git của bạn:

Loại bỏ điên Big tập tin Passwords Loại bỏ, Credentials & dữ liệu cá nhân khác

$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA 

Hoặc chỉ cần thay thế tất cả các lần xuất hiện của một số tập tin:

$ bfg --replace-text passwords.txt 

séc https://rtyley.github.io/bfg-repo-cleaner/https://help.github.com/articles/removing-sensitive-data-from-a-repository/

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