2010-02-15 17 views
86

Chúng tôi đã vô tình xóa thư mục 'thẻ' 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 'thẻ' là gì?Làm cách nào để "phục hồi" thư mục đã xóa trong Subversion/TortoiseSVN?

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

Trả lời

102

Chỉ cần sao chép thư mục bị xóa trở lại từ một phiên bản trước.

Trong trình duyệt kho, bấm 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 ..." đường dẫn ở đó 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. One TortoiseSVN gotcha - trong hộp thoại "copy to ..." tôi phải thay đổi đường dẫn từ 'example.com/svn/tags' thành 'tags1' và sau đó quay lại nút OK để bật. – Borek

+2

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

+1

Lịch sử nào sẽ bị mất? –

2

Chuyển đến Repository Browser của repository của bạn, nhấp chuột phải vào thư mục mẹ nơi bạn xóa thư mục tồn tại. Bây giờ, Show Log của 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ọn Update to this Revision.

Bạn đang thực hiện

+0

Không có lệnh nào ở đó, xin lỗi. – Borek

+0

Ồ tôi thấy, nó không có trong hộp thoại Hiển thị tường trình nhưng trong cửa sổ trình duyệt kho 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 kiểm tra hàng trăm thẻ, mỗi thẻ chứa hàng nghìn tệp, không chính xác như tôi muốn làm). – Borek

7

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

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

+0

Xem câu trả lời của @Miles dưới đây: http: // stackoverflow .com/a/11927209/179850 – Gray

66

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

  • đầu tiên tìm số sửa đổi mà xóa của bạn đã xảy ra:

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

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

  • sao chép thư mục từ phiên bản trừ 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/[email protected] http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder" 
    

thì đấy bạn đã hoàn tất!

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

svn copy http://svnserver/project/[email protected] http://svnserver/project/tags -m "undeleted folder" 
+1

Cảm ơn! Dễ dàng hơn nhiều trên dòng lệnh. – Derek

+0

Thanks..saved rất nhiều thời gian –

+0

Điều này chỉ cần lưu thịt xông khói của tôi! – axiopisty

2

Tiếp theo từ câu trả lời của raudi mà làm việc cho tôi sau khi rà soát này.

Một số khách hàng svn có thể cần số sửa đổi quy định sử dụng các thông số điều chỉnh -r thay vì sử dụng @ sau khi thư mục như sau:

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

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

11

Hầu hết các câu trả lời sẽ làm việc ở một mức độ nhưng câu trả lời chính xác được 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

nơi R1 là phiên bản mà bạn đang ở, và R2 là phiên bản có chứa các tập tin bị xóa/thư mục.

+1

Đây là câu trả lời đúng. Cảm ơn Miles. – Gray

+1

Trong quá trình hợp nhất ngược lại, 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

+1

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