2012-11-12 35 views
5

Tôi sử dụng SmartSVN làm giao diện người dùng cho Subversion. Đôi khi, một tập tin nguồn đó là dưới kiểm soát kho lưu trữ trở nên dư thừa - Tôi chỉ đơn giản là không còn cần nó. Trong trường hợp này, tôi muốn xóa nó theo nghĩa là cập nhật bản sao làm việc không còn tìm nạp tệp từ kho lưu trữ nữa. Nhưng tôi vẫn muốn lịch sử của tệp (tức là các bản sửa đổi đã cam kết trước đó) vẫn còn trong kho lưu trữ.Xóa tệp khỏi SubVersion/SmartSVN

Nếu tôi nhớ chính xác, lệnh Remove của SmartSVN sẽ xóa lịch sử của tệp (tôi rõ ràng là do dự để xác minh điều này). Vui lòng sửa tôi nếu tôi nhầm. Nếu không: Làm thế nào tôi có thể đạt được hiệu quả mong muốn?

EDIT: Sử dụng tệp giả, xác nhận rằng Remove xóa tệp khỏi điều khiển SVN hoàn toàn và lịch sử của nó không còn hiển thị. Vì vậy, vấn đề là có thật.

+0

Bạn có thể thử nó trên một tập tin giả. Thêm nó, cam kết sau đó loại bỏ nó. Nếu tôi có một buck để đặt cược, 'remove' hoặc' del' hoặc 'rm' sẽ không xóa lịch sử khỏi kho lưu trữ. –

+0

@Luc M: Chỉ cần gọi 'del' có nghĩa là sau lần cập nhật tiếp theo cho bản sao làm việc, tệp sẽ lại ở đó. – Dabbler

+0

Tôi đoán rằng bạn phải 'commit' để xóa nó khỏi bản sao làm việc của bạn. –

Trả lời

4

Subversion không bao giờ xóa hoàn toàn tệp khỏi kho lưu trữ. Trong thực tế, đây là một tính năng được yêu cầu tốt.

Bạn thực hiện svn delete hoặc svn rm và tệp không còn trong bản sao làm việc. Tuy nhiên, nó chắc chắn vẫn còn đó. Điều có thể là thuyết phục bạn rằng tệp đã bị xóa vĩnh viễn là bạn đang làm một việc như sau:

$ svn co http://repo/svn/project 
[...] 
$ cd project 
$ svn del foo.txt 
$ svn commit -m "Removed foo.txt" 
committed version 12345 
$ svn ls http://repo/svn/project/foo.txt 
No such file 

Điều này đúng. Tệp foo.txt không còn trong bản sửa đổi mới nhất của Subversion.

Có thể bạn đã làm một cái gì đó như thế này:

Bạn biết rằng tệp không có trong bản sửa đổi 12345 vì bạn đã xóa nó. Tuy nhiên, hãy xem xét sửa đổi 12344. Tệp vẫn phải ở đó trong bản sửa đổi THAT:

$ svn ls -r12344 http://repo/svn/project/foo.txt 
No such file 

Xem, sửa đổi không được sửa đổi 12344. Do đó, sửa đổi đó đã bị xóa vĩnh viễn.

Không quá nhanh, Bunky. Những gì bạn yêu cầu là sửa đổi 12344 của tệp trong bản sửa đổi hiện tại của bố cục kho lưu trữ. Những gì bạn cần làm là hiểu sự khác biệt giữa bản sửa đổi tập tin và sửa đổi kho lưu trữ. Điều này được gọi là revision pegging và có thể là một trong những khái niệm khó hơn trong Subversion.

Điều bạn muốn xem là tệp trong bản sửa đổi 12,344 của REPOSITORY. Để làm điều đó, bạn đặt một @ vào cuối URL kho:

$ svn ls http://repo/svn/project/[email protected] 
foo.txt 

Bây giờ, chúng ta có thể thấy các tập tin vì nó là trong phiên bản 12344 của mà bố trí kho. Nếu bạn cần phải lấy lại các tập tin, bạn luôn có thể sao chép các phiên bản của tập tin mà bạn muốn từ các phiên bản cố định của việc bố trí kho:

$ svn cp -r12344 -m"undeleting foo.txt" \ 
     http://repo/svn/project/[email protected] \ 
     http://repo/svn/project 

này sẽ sao chép sửa đổi 12.344 file foo.txt tại phiên bản 12344 của kho lưu trữ đến phiên bản hiện tại của kho lưu trữ.

Cách dễ nhất để tìm kiếm các file đã bị xóa là nhìn vào svn log:

$ svn log -rHEAD -v http://repo/svn/project/foo.txt 
r12345 | dweintraub | [...] 

Removed foo.txt 

D /project/foo.txt 
----------------------------------------------------- 

Tôi đã xóa file `foo.txt trong phiên bản 12345. Do đó, nó vẫn tồn tại trong phiên bản 12.344.Điều cần biết nếu tôi cần khôi phục tệp.

Có, nó có vẻ ngớ ngẩn trong trường hợp này mà tôi phải yêu cầu sửa đổi tệp và bố cục Subversion vì chúng đều giống nhau. Tuy nhiên, đó không phải lúc nào cũng đúng. Các tệp được di chuyển xung quanh và sao chép, xóa và bỏ xóa. Phiên bản của tệp tôi muốn có thể không giống với phiên bản kho lưu trữ mà tôi đang tìm kiếm.

0

Tôi chấp nhận câu trả lời của David W. - nó mô tả chính xác trạng thái của mọi thứ từ quan điểm của Subversion (dựa trên dòng lệnh). Vì tôi đang sử dụng SmartSVN làm giao diện người dùng, tôi muốn thêm thông tin thích hợp từ phối cảnh này.

Để xem lịch sử các tập tin đã xóa bằng cách sử dụng SmartSVN,

  • mở một trình duyệt Repository (như trái ngược với Project Window)
  • Ban hành Repository | Show Revision lệnh
  • Chọn nút Revision vô tuyến điện; sau đó nhấn nút Select
  • Chọn phiên bản kho lưu trữ bạn muốn xem

Sau đó bạn sẽ thấy các tập tin, miễn là nó đã có mặt trong phiên bản kho bạn đã chọn. Lưu ý rằng thư mục được chọn sẽ xác định tệp nào được hiển thị (dường như không có cách nào để hiển thị tất cả các tệp như trong Cửa sổ dự án) và cũng có thể hiển thị bản sửa đổi kho lưu trữ nào được chọn.

1

Trong SmartSVN:

Chọn File/Folder -> nhấn chuột phải -> "Open in Repository Browser" -> nhấp chuột phải vào tập tin/thư mục mà bạn muốn loại bỏ -> "Di ..."

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