Nếu tôi chạy svn rm file
, tập tin sẽ bị xóa khỏi bản sao làm việc cục bộ.
Những gì tôi làm bây giờ là:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Làm cách nào để tránh svn cũng xóa tệp cục bộ khi sử dụng svn rm
?
Nếu tôi chạy svn rm file
, tập tin sẽ bị xóa khỏi bản sao làm việc cục bộ.
Những gì tôi làm bây giờ là:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Làm cách nào để tránh svn cũng xóa tệp cục bộ khi sử dụng svn rm
?
Câu trả lời:
Bạn muốn --keep-local
tùy chọn dòng lệnh. Thao tác này sẽ xóa tệp khỏi kiểm soát phiên bản mà không xóa tệp khỏi hệ thống tệp của bạn.
$ svn rm --keep-local my_important_file
Lưu ý: Các --keep-local
chỉ ảnh hưởng đến svn rm
các bản sao của bạn. Những người dùng khác có thể xóa bản sao cục bộ của tệp trừ khi có xung đột giữa bản sao cục bộ và kho lưu trữ do những thay đổi họ đã thực hiện. Đây có thể không phải là kết quả mong muốn. Xem bình luận bên dưới.
Xóa một tệp khỏi SVN mà không xóa nó cục bộ là một vấn đề phổ biến. Một ví dụ nổi bật là tệp. Classpath trong một dự án Eclipse. Đặt tệp cấu hình này trong SVN là tuyệt vời miễn là tất cả các máy được sử dụng trong dự án có cùng cài đặt Eclipse và Java. Khi điều kiện này bị vi phạm, bắt đầu phá vỡ các dự án Eclipse khác. Đây là điểm người ta phải xóa một tệp khỏi SVN mà không xóa ist ở bất cứ đâu.
svn rm --keep-local .classpath
thực hiện công việc một cách hoàn hảo trên một máy và tại thời điểm đó.
Vấn đề là các máy khác có thể mất tệp đó (khi cập nhật) hoặc phục hồi lại (trên cam kết). Lỗ hổng của SVN không phải là xử lý --keep-local
trong kho lưu trữ cũng như không truyền bá nó sang các bản sao làm việc khác. Do đó, trên tất cả các máy khác, lệnh trên phải được thực thi - tốt nhất trước khi có bất kỳ cam kết hoặc cập nhật nào.
Điều này, tất nhiên, sẽ làm việc 90%, tốt nhất. Xóa và phiên bản lại sẽ xảy ra đột ngột. Giải pháp của tôi là có mọi máy, tôi có quyền truy cập trực tiếp hoặc gián tiếp, làm
svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine
Điều này là hoàn toàn xấu đến mức hầu như không được gọi là một "giải pháp". Tuy nhiên, nó luôn cho phép sửa chữa nhanh chóng của bất kỳ tai nạn sau này.
Tôi không có câu trả lời cho câu hỏi chính xác này, nhưng tôi có câu trả lời cho một câu hỏi liên quan, đó là làm thế nào để xóa tất cả các tệp (không phải là một câu hỏi cụ thể) trong một thư mục khỏi kiểm soát phiên bản mà không xóa chúng cục bộ. Giải pháp này xuất phát từ một triển khai Linux khoa học.
ls -a .svn
sẽ hiển thị thư mục svn lưu trữ dữ liệu điều khiển. Đơn giản:
rm -r .svn
sẽ thoát khỏi thư mục này. Sau đó gõ:
svn status
sẽ tạo ra một 'cảnh báo: thư mục này không phải là một bản sao hoạt động', bởi vì nó không còn dưới sự kiểm soát phiên bản.
Tôi hi vọng cái này giúp được.