2009-08-18 18 views
8

Tôi là một trong những phiên bản trước của mã của tôi, được lưu trữ trong kho lưu trữ Subversion, có thông tin nhạy cảm. Làm thế nào để xóa nó trong khi vẫn giữ tất cả các phiên bản khác?Làm thế nào để xóa thông tin nhạy cảm khỏi Subversion?

EDIT: Các kho là dự án Google Code Hosting, vì vậy tôi không thể đổ và khôi phục lại kho = (

+1

Tôi không nghĩ rằng bạn có thể tự mình làm bất cứ điều gì. Bạn có thể yêu cầu Google phá hủy kho lưu trữ, và sau đó xây dựng lại nó? –

+0

Có lẽ tôi có thể làm điều đó, nếu tôi chọn một tên mới cho dự án. –

Trả lời

7

Muốn bạn muốn là một SVN tính năng thường được gọi là "tiêu diệt", mà tiếc là vẫn không phải là . thực hiện

là một workaround, bạn sẽ phải đổ, lọc & tái nhập kho của bạn Xem ví dụ như các mục trong faq SVN How do I completely remove a file from the repository's history?

BTW:.. Đó là một dupe :-). https://stackoverflow.com/questions/663584/subversion-permanently-remove-incorrectly-checked-in-directory-project

EDIT:

Repository Dự án Google Code Hosting, vì vậy tôi không thể đổ và khôi phục lại kho = (

Theo như tôi thấy, giải pháp duy nhất trong trường hợp này là (yêu cầu Google) đặt lại dấu kiểm của bạn (xem this FAQblog post) này sẽ xóa hoàn toàn tất cả dữ liệu khỏi kho lưu trữ (cả dữ liệu và lịch sử hiện tại), như thể bạn vừa mới bắt đầu kho lưu trữ bằng cách sử dụng svnadmin create.

Rõ ràng, trước tiên bạn sẽ cần bản sao lưu kho lưu trữ của mình.

Giải pháp tốt nhất có lẽ là:

  • tạo một bản sao lưu của repo của bạn sử dụng snvsync (điều này cũng sẽ sao lưu lịch sử)
  • làm dump/lọc/khôi phục khiêu vũ (xem ở trên) trên của bạn bản sao lưu của repo, để loại bỏ các vấn đề commmits
  • reset kho Google
  • đưa trở lại repo lọc của bạn, một lần nữa sử dụng snvsync (xem FAQ How do I import my existing source code?)
7

Bạn không thể xóa những gì được cam kết với chuyển hướng phụ trừ hoàn toàn đổ, xóa bản gốc và tạo lại kho lưu trữ từ bãi chứa.

Nếu bạn muốn loại bỏ hoàn toàn một file/đường dẫn, bạn có thể làm điều đó với các svndumpfilter:

svnadmin dump /path/to/repository > svndump 
svndumpfilter exclude path/to/sensitivefile > svndump-excluded 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository < svndump-excluded 

Sau đó, sao lưu của bạn/path/to/kho và thay thế bằng/tmp/newrepository sau khi bạn' đã xác minh mọi thứ đều ổn.

Nếu bạn chỉ muốn loại trừ một phiên bản duy nhất, bạn sẽ phải làm một cái gì đó giống như

svnadmin dump -r 0:1000 /path/to/repository > svndump1 
svnadmin dump -r 1002:HEAD --incremental /path/to/repository > svndump2 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository <svndump1 
svnadmin load /tmp/newrepository <svndump2 

Đó là, phiên bản 1001 được loại trừ.Bạn không thể làm điều đó tốt hơn btw hạt, một phiên bản toàn bộ phải được loại trừ. Cùng một thỏa thuận ở đây, sao lưu kho lưu trữ ban đầu của bạn, xác minh rằng tất cả mọi thứ cần thiết trong kho lưu trữ mới là có.

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