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.
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ữ. –
@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
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. –