SVN hoàn tác xóa trước khi cam kết


135

Nếu bạn xóa một thư mục khỏi một bản sao làm việc của SVN, nhưng chưa cam kết, thì làm thế nào để lấy lại nó. Google thậm chí còn đề xuất "svn hoàn tác xóa trước khi cam kết" là một truy vấn phổ biến khi bạn nhập "svn hoàn tác", nhưng kết quả tìm kiếm không có ích.

chỉnh sửa: Tôi muốn một giải pháp hoạt động trong lật đổ 1.4.4


Có thư mục anh chị em nào với thư mục bạn đã xóa với các thay đổi đang chờ xử lý không? Nếu vậy, hãy cẩn thận khi hoàn nguyên từ cấp cao hơn bạn có thể mất các thay đổi.
Russell

Câu trả lời:


145

svn revert deletedDirectory

Đây là tài liệu cho svn revertlệnh.


BIÊN TẬP

Nếu deletedDirectoryđã bị xóa bằng cách sử dụng rmdirvà không svn rm, bạn sẽ cần phải làm

svn update deletedDirectory

thay thế.


3
Đó phải là mới, nó không hoạt động trong SVN 1.4.4. (Đó là điều đầu tiên tôi thử.)
LaC

4
Đây là những gì 1.4.4 nói, btw: $ svn giúp hoàn nguyên hoàn nguyên: Khôi phục tệp sao chép làm việc nguyên sơ (hoàn tác hầu hết các chỉnh sửa cục bộ). cách sử dụng: hoàn nguyên PATH ... Lưu ý: tiểu ban này không yêu cầu truy cập mạng và giải quyết mọi trạng thái xung đột. Tuy nhiên, nó không khôi phục các thư mục bị loại bỏ.
LaC

1
1.6.6 có cùng văn bản trong trợ giúp, nhưng nó hoạt động với tôi khi tôi thử nghiệm nó. Lưu ý rằng nếu bạn không sử dụng svn deleteđể xóa thư mục, nhưng thay vào đó xóa nó bằng cách sử dụng rmdir, bạn sẽ cần phải svn update deletedDirectorythay thế.
Michael Hackner

Tôi đã xóa một tệp (svn del) khỏi thư mục svn-ed cục bộ. Cập nhật svn không hoạt động nhưng svn hoàn nguyên hoạt động. Tôi đã sử dụng SynchroSVN cho Mac. Tuy nhiên, cảm ơn vì lời khuyên.
karim

5
Theo liên kết, sử dụng svn -R hoàn nguyên để phục hồi toàn bộ thư mục với tất cả nội dung, đây có thể là những gì bạn muốn. svn hoàn nguyên mà không có -R chỉ khôi phục thư mục, không phải nội dung.
n13

156

1) làm

svn revert . --recursive

2) phân tích cú pháp cho các lỗi như

"Failed to revert 'dir1/dir2' -- try updating instead."

3) gọi svn lên cho mỗi thư mục lỗi:

svn up dir1/dir2

12
Đây là câu trả lời chính xác nhất, cảm ơn bạn rất nhiều, bạn đã giúp tôi rất nhiều.
greenoldman

1
Ngoại trừ điều đó hoàn nguyên mọi thứ? Bạn có thể không muốn làm điều đó.
n13

1
Điều này có ý nghĩa nhất nếu bạn có toàn bộ thư mục mà SVN cho rằng đã bị xóa. Tôi đã có điều đó trong khi kiểm tra một bản sao làm việc. Một thư mục đã tồn tại, vì vậy nó được đặt trong xung đột và không được kiểm tra. Đó là một liên kết đến một thư mục khác. Tôi đã đổi tên nó và cố gắng svn upđể kiểm tra, nhận ra xung đột, đã làm svn resolved foosvn statusnói với tôi rằng tôi có khoảng 10k tệp được đánh dấu là D. svn upsvn revertđã không nhận được chúng trở lại, nhưng điều này đã giải quyết vấn đề.
simbabque

6
+1 --recursivegiúp khôi phục nội dung của các thư mục đã xóa.
Melebius

1
Ôi Chúa ơi, bạn đã cứu buổi tối của tôi!
ArturOlszak

32

Những gì làm việc cho tôi là

svn revert --depth infinity deletedDir

Điều này làm việc rất tốt cho tôi (svn 1.7.10) trong đó svn hoàn nguyên đã xóaDir không thực hiện được công việc. Câu trả lời tuyệt vời.
rtome

4

Thực hiện thao tác (đệ quy) Hoàn nguyên từ cấp trên thư mục bạn đã xóa.


1
Điều này sẽ xóa sạch CÁCH nhiều thay đổi hơn mức cần thiết.
Michael Hackner

Điều đó không hoạt động với Subversion 1.4.4 (Tôi đã thử nó). svn giúp hoàn nguyên thậm chí nói rằng "tiểu ban này không yêu cầu truy cập mạng và giải quyết bất kỳ trạng thái xung đột nào. Tuy nhiên, nó không khôi phục các thư mục đã xóa." Tôi xin lỗi, tôi nên đã chỉ định phiên bản. 1.4.4 là những gì đi kèm với Mac OS X 10.5.
LaC

4

Để làm cho nó thành một lớp lót, bạn có thể thử một cái gì đó như:

svn status | cut -d ' ' -f 8 | xargs svn revert

Tôi có thể tạo thư mục với khoảng trắng trong tên của nó. Nó có thể phá vỡ 'cắt' AFAIK.
Denis Barmenkov

1

Giải pháp đơn giản nhất tôi có thể tìm thấy là xóa thư mục mẹ khỏi bản sao làm việc (với rm -rf, không xóa svn), rồi chạy cập nhật svn trong ông bà. Ví dụ: nếu bạn đã xóa a / b / c, rm -rf a / b, cd a, svn lên. Điều đó mang lại mọi thứ trở lại. Tất nhiên, đây chỉ là một giải pháp tốt nếu bạn không có thay đổi không được cam kết nào khác trong thư mục cha mà bạn muốn giữ.

Hy vọng trang này sẽ đứng đầu kết quả vào lần tới khi tôi google câu hỏi này. Tất nhiên sẽ tốt hơn nếu ai đó đề xuất một phương pháp sạch hơn, tất nhiên.


Đó là giả sử không có thư mục con trong cha mẹ có các thay đổi đang chờ xử lý.
Russell

0

Bạn có thể xóa thư mục và cập nhật thư mục mẹ trước khi cam kết:

rm -r some_dir

svn update some_dir_parent

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.