2008-09-17 35 views
16

Khi dịch vụ chuyển ngữ phụ địa phương tôi giải thích cho mọi người chỉ giữ mã nguồn và các tệp văn bản không lớn trong kho, không phải tệp dữ liệu nhị phân lớn. Các tệp nhị phân nhỏ hơn là một phần của các bài kiểm tra, có thể.Nuking tập tin khổng lồ trong kho svn

Rất tiếc, tôi làm việc với con người! Ai đó có khả năng một ngày nào đó vô tình cam kết một hulk nhị phân 800MB. Điều này làm chậm hoạt động kho lưu trữ.

Lần cuối cùng tôi đã chọn, bạn không thể xóa tệp khỏi kho lưu trữ; chỉ làm cho nó không phải là một phần của bản sửa đổi mới nhất. Kho lưu trữ giữ cho con quái vật cho tất cả vĩnh cửu, trong trường hợp bất cứ ai bao giờ muốn nhớ lại trạng thái của kho lưu trữ cho ngày đó hoặc số sửa đổi.

Có cách nào thực sự xóa tệp quái vật đó và kết thúc bằng một kho lưu trữ có kích thước phù hợp không? Tôi đã thử điều dump/tải svnadmin nhưng nó là một nỗi đau.

Trả lời

13

Một số thông tin thêm về vấn đề này có thể được tìm thấy tại bài viết trên blog: Subversion Obliterate, the missing feature

Hãy chắc chắn để đọc qua các ý kiến ​​quá, nơi Karl Fogel đặt bài viết vào quan điểm :-)

+2

Trang được liên kết hiện là 404. Sẽ đánh giá cao bản chỉnh sửa để giữ câu trả lời này hiện tại. – ghayes

+1

Đã chỉnh sửa để trỏ đến phiên bản trang web đã lưu trữ. Tuy nhiên, có thể khả thi để chỉnh sửa phản hồi thực tế cho câu trả lời. – eis

16

Để xóa vĩnh viễn tệp quái vật khỏi kho lưu trữ svn, không có giải pháp nào khác ngoài việc sử dụng tải/tải svnadmin. (SVN Book: dump command)

Để ngăn các tệp lớn được cam kết, có thể sử dụng tập lệnh móc. Ví dụ: bạn có thể có một tập lệnh chạy "tiền cam kết" bất cứ khi nào ai đó cố gắng cam kết với kho lưu trữ. Tập lệnh có thể kiểm tra tệp hoặc loại tệp và từ chối cam kết nếu tệp chứa tệp hoặc tệp quá lớn hoặc loại "bị cấm".

Sử dụng điển hình các kịch bản móc là kiểm tra (cam kết trước) rằng cam kết chứa thông điệp tường trình hoặc (hậu cam kết) để gửi chi tiết email của cam kết hoặc cập nhật trang web với các tệp mới được cam kết.

Tập lệnh móc là một tập lệnh chạy để phản hồi lại các sự kiện lưu trữ (SVN Book: Create hooks).

1

Khi bạn đã xóa tệp khỏi bản sửa đổi CHÍNH của mình, nó sẽ không làm chậm tốc độ hoạt động vì vùng đồng bằng giữa các bản sửa đổi được xử lý. (Tất cả các bản sao lưu kho lưu trữ phải xử lý tải).

+1

chúng tôi có rất nhiều đủ lớn tập tin để backkup - không muốn nữa! – DarenW

3

Nếu bạn có thể nắm bắt nó ngay sau khi cam kết, kỹ thuật tải/tải svnadmin không quá đau đớn. Giả sử ai đó chỉ vô tình phạm gormundous-thô-image.psd trong Revision 3849. Bạn có thể làm điều này:

svnadmin dump /var/repos -r 1:3848 > ~/repos_dump 

Điều đó sẽ tạo ra một tập tin dump chứa tất cả mọi thứ lên đến và bao gồm sửa đổi 3848. Vào thời điểm đó, bạn có thể sử dụng svnadmin tạo và tải svnadmin để hoàn nguyên kho lưu trữ mà không có cam kết vi phạm, báo trước rằng bất kỳ thay đổi nào bạn đã thực hiện trong cấu trúc thư mục của kho lưu trữ - móc, liên kết tượng trưng, ​​thay đổi quyền, tệp auth, v.v.-- sẽ cần phải được sao chép từ thư mục cũ. Dưới đây là một ví dụ về phần còn lại của phiên bash bạn có thể sử dụng để hoàn thành hoạt động:

svnadmin create /var/repos-new 
svnadmin load /var/repos-new < ~/repos_dump 
cp -r /var/repos/conf /var/repos-new 
cp -r /var/repos/hooks /var/repos-new 
mv /var/repos{,-old} && mv /var/repos-new /var/repos 

Tôi chắc chắn đây sẽ là đau đớn hơn lịch sử hơn kho của bạn có, nhưng nó làm việc.

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