2010-10-27 32 views
7

Có cách nào để hoàn nguyên từ một changeset cụ thể không?svn hoàn nguyên từ changeset

Các thay đổi đã được cam kết, như tôi thấy từ changeset. Bây giờ, tôi muốn hoàn nguyên các tệp từ trước khi chúng được cam kết.

Tôi đã làm lại đường dẫn/tệp/svn nhưng không yêu cầu mật khẩu hoặc bất kỳ thứ gì. Chẳng có gì xảy ra.

+0

Vui lòng chi tiết hơn. – splash

+0

không có gì xảy ra khi tôi thực hiện svn revert cho mỗi tệp. – Woppi

+0

Xin vui lòng thậm chí còn phức tạp hơn. Nếu các thay đổi đã được cam kết, bạn có thể hoàn nguyên về cam kết sửa đổi trước ... – user434507

Trả lời

3

quyết: svn merge -r1234: 4321 path/to/path yourfile/to/thefileyouwanttogobackto,

nơi
1234 là phiên bản của bạn
4321 là phiên bản bạn muốn quay trở lại.

3

Bạn có thể thực hiện "hợp nhất ngược" tức là "áp dụng" tất cả thay đổi TỪ bản sửa đổi hiện tại của bạn cho bản sửa đổi bạn muốn quay lại (nghĩa là hoàn tác tất cả thay đổi từ bản sửa đổi bạn muốn quay lại TO sửa đổi).

svn merge -r HEAD:nnnn . 

nơi sửa đổi bạn muốn quay lại. http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.merge.html

Sau khi xem xét các thay đổi, giải quyết mọi xung đột, v.v., sử dụng svn commit để đẩy các thay đổi vào kho lưu trữ.

+0

Có cảm ơn bạn zellus, sai lầm của tôi! Tôi đã cập nhật câu trả lời của mình để phản ánh điều đó. –

+0

http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo nói chi tiết về việc hoàn nguyên các cam kết. – zellus

+0

Nó nói "không thể thay thế một thư mục từ bên trong" – Woppi

1

Nếu bạn biết một số sửa đổi bạn muốn hoàn nguyên ở đây là một cách khác để hoàn nguyên.

svn diff -c r1031 | grep ^Index | awk '{ print $2}' | xargs -I {file} svn export -r 1030 {file} {file} 

Nó tìm thấy tất cả các file thay đổi trong r1031 và thay thế bằng các tập tin tương tự từ phiên bản 1030.

PS: Cũng xin, hãy cẩn thận nếu các tập tin bạn muốn trở lại không có mặt trong 1030. Nó có thể có thể không hoạt động theo cách bạn mong đợi.

0

Xem entry này viết blog để biết chi tiết:

http://blog.mafr.de/2008/05/13/revert-a-commit-in-svn/

với một số giải thích nền tốt:

Để hiểu những gì đang xảy ra ở đây đòi hỏi phải có một số nền tảng trên những gì lệnh merge không khái niệm: Nó hồ sơ thay đổi phải được thực hiện để sửa đổi N để biến nó thành bản sửa đổi N + 1 (được gọi là delta) và áp dụng cho bản sao làm việc. Đó không phải là điều chúng tôi muốn trong trường hợp của chúng tôi, vì vậy chúng tôi đảo ngược thứ tự các bản sửa đổi thông thường trên dòng . Có hiệu quả, chúng ta nói lệnh kết hợp để tạo một delta là cách khác. Kết quả là "tua lại" của cơ sở mã.

Và cũng có thể, trong các ý kiến, làm thế nào để làm điều này trong TortoiseSVN:

Để làm điều này với TortoiseSVN, bạn kích chuột phải vào thư mục hoặc tập tin bạn muốn phục hồi và sử dụng “ Hợp nhất ”từ trình đơn TortoiseSVN. Chọn tùy chọn “Kết hợp hai cây khác nhau”. Trong phần “Từ”, chọn Head bản sửa đổi. Trong “Tới”, chọn bản sửa đổi cũ + 1 (tức lànếu bạn muốn hoàn nguyên về bản sửa đổi 169, hãy nhập bản sửa đổi 170 vào hộp).

0

Cách đơn giản nhất được mô tả trong SVN Book:

$ svn merge -c -303 http://svn.example.com/repos/calc/trunk 

Đó sẽ undo bất kỳ thay đổi được thực hiện trong changeset 303 và bạn có thể xem xét và cam kết chúng khi cần thiết.

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