Làm thế nào để xóa một tập tin khỏi kiểm soát phiên bản mà không xóa nó?


Câu trả lời:


277

Bạn muốn --keep-localtù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-localchỉ ảnh hưởng đến svn rmcá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.


4
Vẫn không xóa nó khỏi hệ thống của người khác sau khi họ cập nhật?
Nyerguds

1
@Nyerguds Điều đó đúng, vì svn rm đang xóa các tệp khỏi kho lưu trữ. Trong trường hợp bạn muốn xóa tệp khỏi repo, NHƯNG giữ chúng cục bộ trên máy của bạn sau đó bạn sẽ sử dụng cờ ở trên.
Greg Hilston

6
@GregHilston Như tôi đã nói, tuy nhiên, điều đó không thực sự giúp ích trong các dự án đa lập trình viên thực tế. Cần có một cách để lật ngược tập tin ở mọi nơi. Trường hợp phổ biến nhất ở đây là các tệp cài đặt cục bộ vô tình phạm phải (rất phổ biến trong các dự án Java), nhưng việc đảo ngược chúng không nên xóa các tệp cài đặt của người dùng khác.
Nyerguds

5
@GregHilston "các dự án đa lập trình viên thực tế" được ngụ ý khá nhiều trong "các hệ thống của người khác". Vấn đề là ở đây: người khác cập nhật và ghi đè cài đặt của họ. Điều này thường không quá khó khăn, nhưng đủ khó chịu để muốn giải quyết nó. Nhưng tại thời điểm đó, khi họ đã ghi đè cài đặt và bây giờ nhận được svn "rm" khi cập nhật, nó thực sự xóa tệp cài đặt cục bộ có khả năng quan trọng khỏi hệ thống của họ, trong khi nó chỉ cần được đảo ngược để có thể định cấu hình thành cục bộ cài đặt lại.
Nyerguds

4
Tải lại một tệp cũ hơn từ kho lưu trữ đánh dấu nó là từ phiên bản cũ hơn, có nghĩa là một bản cập nhật sẽ chỉ xóa nó một lần nữa. Không có cách nào rõ ràng để làm điều này mà không cần can thiệp thủ công trên tất cả các máy trong dự án.
Nyerguds

13

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-localtrong 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.


-3

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.


Một câu hỏi liên quan? Xóa một tập tin và xóa toàn bộ bản sao làm việc là những điều hoàn toàn khác nhau IMHO.
Melebius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.