2008-10-15 31 views
15

Tôi có một kho lưu trữ svn cục bộ trong PC, tôi đã sử dụng nó cho một dự án sở thích và nó không có nghĩa là có thể truy cập được với bất kỳ ai.Xóa nội dung tập tin từ lịch sử SVN

Bây giờ, tôi đang nghĩ đến việc tạo kho lưu trữ cho người khác và tôi không muốn có dữ liệu đó ở đó.

Có cách nào để thu thập thông tin lưu trữ và thay thế tất cả mật khẩu và dữ liệu tài khoản bằng văn bản như "xxxxxxxxxx" không?

Trả lời

0

Điều đơn giản nhất là kiểm tra nội dung của kho lưu trữ, xóa tất cả thông tin nhạy cảm, nhập thư mục làm việc vào một kho lưu trữ mới và cung cấp cho công chúng. Rất có khả năng ai sẽ sử dụng dự án của bạn sẽ quan tâm đến trạng thái hiện tại của nó, không phải trong lịch sử thay đổi.

9

Nếu bạn làm một

svnadmin dump > mysvn 

bạn sẽ nhận được một tập tin phẳng của tất cả các dữ liệu của tất cả các phiên bản trong kho của bạn. Từ đó, bạn sẽ có thể chỉnh sửa thủ công tệp (nếu repo của bạn có kích thước đáng kể, bạn có thể cần trình chỉnh sửa dòng, như pico, nano, vi, v.v.).

Cuối cùng, sau đó bạn sẽ tải lại kết xuất này vào một kho lưu trữ mới. Điều này sẽ bảo tồn lịch sử của bạn về dự án của bạn.

svnadmin load /path/to/new/repo < mysvn 

Thực tiễn này sẽ được coi là không có trong bất kỳ môi trường doanh nghiệp nào mà bạn trải qua kiểm toán, v.v ... cho dự án sở thích.

EDIT: Tôi đã phải làm điều này trước khi cố gắng hợp nhất hai kho lưu trữ khác nhau lại với nhau, vì vậy nó yêu cầu thêm một "nút thư mục mới" tệp phẳng. Tôi không chắc chắn nếu SVN băm các tập tin hoặc thay đổi để xác định nếu nó bị giả mạo.

+1

Thực tế kiểm tra tổng kiểm tra khi tải lại dữ liệu. Chỉ cần thử phương pháp này cho một vấn đề tương tự. :) – Iain

+0

Thao tác này sẽ hoạt động nhưng bạn cần phải cập nhật md5sum cho bất kỳ tệp nào (đường dẫn nút) được chỉnh sửa. Trong vim bạn có thể sử dụng ctrl-v để làm nổi bật phần biểu diễn tệp, sau đó nhập ":! Md5sum" để lấy hàm băm mới. Tệp bắt đầu sau dòng PROPS-END và kết thúc bằng hai dòng trống, tiếp theo là dòng "Node-Path:" tiếp theo. –

13

Kiểm tra câu hỏi thường gặp về Subversion: How do I completely remove a file from the repository's history?

+0

Câu hỏi thường gặp đã được chuyển đến http://subversion.apache.org/faq.html#removal – Witek

+0

Cảm ơn, Witek. Tôi đã cập nhật liên kết. –

+1

Bạn vui lòng thêm lệnh để thực thi. Tôi đã không hiểu những gì họ nói trong sự giúp đỡ. Có nghĩa là gì 'để svnadmin đổ kho của bạn, sau đó ống dumpfile thông qua svndumpfilter (không bao gồm đường dẫn xấu) vào một lệnh tải svnadmin'. Không có chi tiết nào trong liên kết đưa ra. – Hunsu

7

Dường như có sự hiểu lầm. Tôi không muốn xóa tệp. Tôi muốn xóa mật khẩu được lưu trữ trong kho lưu trữ. Tôi không muốn mất các tập tin, không phải là sửa đổi, sửa đổi và lịch sử.

Điều tôi đã làm là những gì Matt đề xuất, đổ kho và chỉnh sửa nó.

Để làm điều này, tôi đã sử dụng trình chỉnh sửa hệ thập lục phân (khexedit) và thay thế chuỗi mật khẩu bằng một chuỗi có cùng độ dài. Bằng cách đó, tôi không phải cập nhật các trường kích thước.

Tiếp theo, tôi cần cập nhật các trường md5 với hàm băm của nội dung tệp. Đối với điều này, tôi đã viết một kịch bản mà sử dụng "svnadmin tải" đầu ra để tạo ra một lỗi và nhận được md5 cũ và mới từ lỗi đó. Tiếp theo, thay thế băm cũ bằng sed và sau đó, lặp lại cho đến khi không có lỗi.

+2

bạn có thể đăng mã không? – BCS

+0

'svnadmin dump repo> svn.dump', sau đó tìm phiên bản của tệp bạn cần chỉnh sửa. Xuất các tập tin đó ('svn export file @ r1234 file.1234'). Sao chép các tệp đã xuất sang tệp.1234.modified. Ghi đè mật khẩu bằng 'x' để chúng có cùng kích thước. Nhận md5sums mới và sha1 tổng ('md5sum file. *; Sha1sum file. *'). Mở svn.dump trong vim và tìm kiếm md5sum đã sửa đổi trước. Ghi đè mật khẩu giống hệt như trong tệp đã sửa đổi của bạn và cập nhật md5sum và sha1sum. sau đó 'mv repo repo.bak && svnadmin tải repo dannysauer

4

Tôi có cùng một vấn đề nhưng hơn trên code.google.com: Tôi đã kiểm tra một số tệp không thể truy cập được thông qua lịch sử trên googlecode nhưng tôi không muốn bỏ qua tất cả lịch sử, sau khi một số googling, thử, thử lại và thử lại tôi đã thành công. Bên dưới công thức làm việc cho dự án nhỏ của tôi (6,5 MB, 90 bản sửa đổi).Hầu hết kiến ​​thức đến từ googlecode, phần còn lại chủ yếu là từ svn redbook

Đầu tiên tạo một repo địa phương nơi bạn sẽ tải về repo googlecode để:

svnadmin create /tmp/your_local_repo 

tạo tập tin/tmp/isd_gc/móc/pre-revprop- thay đổi nội dung

#!/bin/bash 
exit 0 

làm cho nó thực thi:

chmod +x /tmp/isd_gc/hooks/pre-revprop-change 

nếu bạn thất bại trong phần này, rất có thể bạn sẽ thấy lỗi: Thay đổi Revprop bị chặn bởi móc trước khi thay đổi (mã thoát 255) không có đầu ra.

bây giờ bạn có thể init đồng bộ svn từ code.google.com

svnsync init --username [email protected] file:///tmp/your_local_repo https://yourproject.googlecode.com/svn 

và bắt đầu tải về tất cả lịch sử:

svnsync sync --username [email protected] file:///tmp/your_local_repo 

Committed revision 1.

tính sao chép cho phiên bản 1 .

Đang truyền dữ liệu tệp .......................

Thuộc tính được sao chép để sửa đổi 87.

Bây giờ chúng tôi tạo một tệp lưu trữ sẽ được nạp vào svndumpfilter để xóa các tệp không mong muốn.

svnadmin dump . > /tmp/tst_dump_gc.dmp 

sử dụng svndumpfilter để xóa tệp không mong muốn đầu tiên khỏi nó.

svndumpfilter exclude /trunk/unwanted file_1.jsvg </tmp/tst_dump_gc.dmp> /tmp/tst_dump_clean1.dmp 

Dropped 1 nút:

'/ trunk/file_new.jsvg không mong muốn'

loại bỏ tập tin không mong muốn thứ hai:

svndumpfilter exclude /trunk/unwanted file_2.jsvg </tmp/tst_dump_clean1.dmp> /tmp/tst_dump_clean2.dmp 

tái tạo "cũ tạm repo"

rm -rf /tmp/your_local_repo 

svnadmin create /tmp/your_local_repo 

tải dum được lọc p vào repo

[/tmp]$svnadmin load --ignore-uuid your_local_repo < /tmp/tst_dump_clean2.dmp 

Kiểm tra xem mọi thứ đều ổn trong máy khách svn (kiểm tra lịch sử trên thân chỉ hiển thị 25 kết quả đầu tiên trong ứng dụng khách svn của tôi).

svnsync sync --username [email protected] https://yourproject.googlecode.com/svn 
Các vấn đề liên quan