Làm thế nào để "phục hồi" một thư mục đã xóa trong Subversion / TortoiseSVN?


96

Chúng tôi đã vô tình xóa thư mục 'tags' khỏi kho lưu trữ Subversion của chúng tôi, nơi chúng tôi chỉ định xóa một thẻ cụ thể. Cách dễ nhất để lấy lại thư mục 'tags' là gì?

Chúng tôi sử dụng TortoiseSVN làm khách hàng của mình và tôi nghĩ rằng khi tôi truy cập trình duyệt repo và hiển thị nhật ký, sẽ có một cái gì đó giống như "hoàn nguyên các thay đổi từ bản sửa đổi này" tương tự như những gì bạn có thể thấy trong hộp thoại tương tự trên bản sao làm việc của mình. Nhưng không có lệnh như vậy ở đó ...

Câu trả lời:


115

Chỉ cần sao chép lại thư mục đã xóa từ bản sửa đổi trước đó.

Trong Trình duyệt Kho lưu trữ, nhấp vào nút có nhãn HEAD (ở góc trên cùng bên phải) để hiển thị bản sửa đổi ở đó thư mục của bạn vẫn tồn tại, sau đó nhấp chuột phải vào thư mục đó và chọn "Sao chép vào ..." và nhập đường dẫn vào đó bạn. muốn thư mục được tạo lại (có thể là cùng một đường dẫn đã có trong hộp văn bản).


4
Mẹo tuyệt vời, cảm ơn. Một TortoiseSVN gotcha - trong hộp thoại "sao chép vào ..." đó, tôi phải thay đổi đường dẫn từ 'example.com/svn/tags' thành 'tags1' rồi quay lại để bật nút OK.
Borek Bernard

2
Điều này có thể tốt cho thẻ, nhưng không nên được thực hiện để lấy lại bất kỳ thư mục khác vì bạn sẽ mất lịch sử
slckin

3
Nó giữ lịch sử, chỉ đã làm nó cũng.
acdcjunior

chỉ cần đảm bảo bạn bỏ chọn "Stop trên copy / đổi tên" khi xem nhật ký, bởi vì nếu không TortoiseSVN sẽ không hiển thị lịch sử trước khi bạn khôi phục hành động (rõ ràng) ...
Oli

Nó hoàn toàn hoạt động. Tiết kiệm rất nhiều thời gian của tôi. Cảm ơn :)
dgupta3091

78

cho những người đam mê dòng lệnh:

  • trước tiên hãy tìm số sửa đổi nơi mà việc xóa của bạn đã xảy ra:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

giả sử bạn thấy rằng thư mục đã bị xóa trong bản sửa đổi 999 (btw: bạn có thể tìm thấy số bản sửa đổi dễ dàng hơn với trình duyệt repo svn)

  • sao chép thư mục từ bản sửa đổi trừ đi 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà bạn đã hoàn thành!

trong trường hợp của bạn, điều này có thể là:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"

1
Thanks..saved rất nhiều thời gian
Dharani Kumar

Điều này vừa cứu được thịt xông khói của tôi!
axiopisty

Chỉ muốn xác nhận rằng cách tiếp cận "svn copy" trên thực tế bảo tồn tất cả lịch sử và đối với các thư mục, nó hoạt động đệ quy, khôi phục thư mục và tất cả các thư mục con.
WallStProg

11

Hầu hết những câu trả lời này sẽ hoạt động ở một mức độ nào đó nhưng câu trả lời chính xác là của Daniel. Thực hiện hợp nhất ngược lại. Bằng cách đó, bạn giữ lịch sử phiên bản.

svn merge -r R1:R2

trong đó R1 là bản sửa đổi mà bạn đang ở và R2 là bản sửa đổi có chứa tệp / thư mục đã xóa.


1
Trong hợp nhất ngược, R1 phải là bản sửa đổi bạn muốn hoàn nguyên với R2 là bản sửa đổi trước đó.
arleslie

2
Bạn không mất bất kỳ lịch sử nào với svn copy.
maxschlepzig

Đối với những người trong chúng ta, những người không đam mê dòng lệnh, hãy xem: rùa
Pascal

2
Điều này sẽ không khôi phục tất cả các tệp / thư mục đã xóa? Điều này có hiệu quả không nếu tôi chỉ muốn khôi phục một thư mục đã xóa cụ thể chứ không phải các thư mục đã xóa khác?
OJ7

8

Bạn sẽ cần phải thực hiện hợp nhất ngược lại .

Để biết chi tiết về cách thực hiện (và khá nhiều thứ khác mà bạn muốn hoặc cần làm với SVN), cuốn sách chính thức có sẵn trực tuyến .


3

Tiếp theo câu trả lời của raudi đã làm việc cho tôi sau bản sửa đổi này.

Một số ứng dụng khách svn có thể cần số bản sửa đổi được chỉ định bằng cách sử dụng tham số sửa đổi -r thay vì sử dụng @ sau thư mục như sau:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"

Nếu bạn đang khôi phục từ một thư mục vẫn tồn tại thì -r <revision>sẽ hoạt động. Tuy nhiên, nếu bạn đang cố gắng khôi phục trực tiếp thư mục, bạn sẽ cần sử dụng @<revision>. Nếu không, nó sẽ cho bạn biết tệp không được tìm thấy.
arleslie

2

Thao tác Repository Browsercủa bạn repository, nhấp chuột phải vào thư mục chính nơi thư mục đã xóa của bạn tồn tại. Bây giờ, Show Logtrong thư mục mẹ và chọn bản sửa đổi trước đó mà bạn đã thực hiện thao tác xóa. Bạn sẽ có một danh sách và nhấp chuột phải vào thư mục từ thông tin sửa đổi và chọnUpdate to this Revision .

Bạn xong việc rồi


Ồ, tôi hiểu rồi, nó không nằm trong hộp thoại Show Log mà nằm trong cửa sổ trình duyệt repo chính. Tuy nhiên, lệnh đó sẽ cố gắng cập nhật bản sao làm việc cục bộ của tôi trong khi tôi muốn khắc phục sự cố này trực tiếp trên máy chủ (bạn có thể tưởng tượng rằng việc kiểm tra hàng trăm thẻ, mỗi thẻ chứa hàng nghìn tệp, không phải là chính xác những gì tôi muốn làm).
Borek Bernard

Nó đã làm việc cho tôi. Tùy chọn menu ngữ cảnh (khi nhấp chuột phải) là "Hoàn nguyên các thay đổi từ bản sửa đổi này" và nó sẽ hợp nhất các thay đổi ngược lại.
hsg
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.