Có cách nào để khôi phục từ "hoàn nguyên svn" tình cờ không?


94

Tôi đã tự bắn vào chân mình sáng nay bằng cách làm như sau:

  1. Bắt đầu làm việc để thay đổi dự án của tôi
  2. Thực hiện một loạt các chỉnh sửa cho một loạt các tệp
  3. Nhận ra rằng cách tiếp cận của tôi hoàn toàn sai và tôi cần phải bắt đầu lại
  4. cd'd lên cấp cao nhất của dự án của tôi và đã thực hiện "hoàn nguyên svn --recursive." để khôi phục hộp cát cục bộ của tôi về trạng thái trước khi thay đổi.
  5. Kinh hoàng hú lên khi tôi nhận ra rằng có một số thay đổi khác nổi bật trong hộp cát địa phương của tôi và tôi vừa xóa tất cả chúng. (máy chủ svn đã ngừng hoạt động vào thứ Sáu tuần trước nên tôi không thể kiểm tra chúng và tôi đã quên chúng vào cuối tuần)

May mắn thay trong trường hợp này, tôi đã thực hiện "svn diff> temp.txt" trước khi rời khỏi công việc vào thứ Sáu và tệp temp.txt vẫn còn trong ổ cứng của tôi, vì vậy tôi có thể đưa tệp đó vào "bản vá" và khôi phục những thay đổi bị mất.

Nhưng để tham khảo trong tương lai của tôi (tức là lần tiếp theo tôi mắc phải sai lầm ngớ ngẩn tương tự) ... có cách nào để yêu cầu svn hoàn tác "svn hoàn nguyên" không? Svn có giữ một bản sao lưu của các khác biệt địa phương / chưa đăng ký ở bất kỳ đâu không?


34
IIRC TortoiseSVN di chuyển các tệp đã hoàn nguyên vào thùng rác, nhưng ứng dụng dòng lệnh SVN ban đầu không có các sắc thái như vậy.
Dario Solera

1
Tôi không thể tìm thấy tệp trong thùng rác. Tôi có bị mất may mắn không?
dalcantara

5
Bình luận hàng đầu về thùng rác. Đó là chỉ cứu ngày của tôi!
OrganicPanda

2
của tôi cũng thế! cảm ơn bạn rất nhiều. Tệp được hoàn nguyên vừa xuất hiện trong thùng rác của tôi và có thể được khôi phục.
sladda

1
Bạn vừa cứu mặt sau của tôi với thứ thùng rác này !!!
Epirocks

Câu trả lời:


79

Không, (hoàn toàn) KHÔNG .

Nếu bạn nói với Subversion, nó sẽ hoàn nguyên một tệp, mọi thay đổi sẽ tan thành mây khói.

Chỉ có trí nhớ của bạn mới có thể lấy lại chúng.

Ngoại lệ: Các tệp mới bạn đã thêm, sẽ chỉ mất trạng thái "đã thêm", nhưng tệp sẽ vẫn ở trong thư mục này, chỉ trạng thái là không xác định ("?")

Ngoại lệ Nền tảng / Phần mềm: Sử dụng TortoiseSVN trên Windows, trước tiên, Hoàn nguyên sẽ ném các tệp vào Thùng rác và sau đó hoàn nguyên chúng. Bạn có thể đi sâu vào Thùng rác để khôi phục các tệp.


10
Phụ lục ở trên: Kiểm soát phiên bản chỉ giúp bạn nếu bạn thực sự cam kết các tệp. Nếu bạn đang ở một vị trí rằng việc giết bản sao làm việc của bạn sẽ giết hàng giờ làm việc, thì bạn không cam kết đủ thường xuyên.
myron-semack

1
Đã đồng ý ... trong trường hợp này máy chủ svn không hoạt động và đó là lý do tại sao tôi vẫn chờ xử lý các thay đổi chưa được cam kết. : ^ (
Jeremy Friesner 5/10/09

13
Đúng!!! Có một cách để phục hồi tùy thuộc vào O / S và / hoặc IDE của bạn - hãy đọc các câu trả lời khác bên dưới trước khi bạn lên cơn đau tim !!
HDave

2
Điều đó không đúng, nó phức tạp hơn một chút so với NO đơn giản. Sử dụng công cụ khôi phục hoặc nếu bạn may mắn, các tệp sẽ nằm trong thùng rác.
RaphMclee

1
@RalphMclee: Nó phụ thuộc vào nền tảng và ứng dụng svn. TortoiseSVN sẽ lưu các tệp mới đã hoàn nguyên vào thùng rác. Đây chỉ là một ngoại lệ. Và tôi nghi ngờ một công cụ khôi phục có thể tạo lại các thay đổi trong tệp của bạn một cách nhất quán. Dễ dàng hơn và rõ ràng hơn để nhớ: hoàn nguyên sẽ phá hủy công việc của bạn, hãy sử dụng nó một cách cẩn thận!
Peter Parker

104

Có một giải pháp ... hãy vào thùng rác của bạn, bạn sẽ thấy ở đó phiên bản mới nhất của tệp đã xóa. Rùa "ném" vào thùng rác mọi tệp mà nó hoàn nguyên.


2
Ngẫu nhiên, đây cũng là lý do tại sao TortoiseSVN có vẻ rất chậm khi thực hiện hoàn nguyên. Di chuyển tệp vào thùng rác là một hoạt động rất chậm khi thùng rác đầy. Bạn có thể tắt tính năng này trong cài đặt "Chung - hộp thoại 1" TortoiseSVN.
Wim Coenen

8
Cảm ơn người đàn ông, bạn đã cứu tôi! Tôi đã vô tình làm Revert và gần như mất 2 tuần làm việc. May mắn thay, tôi đã tìm thấy nó trong thùng rác.
Arie Livshin

2
@ArieLivshin, tại sao bạn làm việc trong 2 tuần mà không cam kết? Có vẻ như bạn cần tìm hiểu thêm về các nhánh.
JoelFan

Thật phiền ankhsvn không làm điều này
Phil Hale

Cảm ơn bạn .. Rất giúp ful.
Prem Singh Bist

32

Không thực sự cụ thể về Subversion, nhưng nếu bạn đang làm việc với Eclipse, bạn có thể thử vận ​​may của mình trong lịch sử địa phương.

Bây giờ, một cái gì đó cụ thể hơn một chút về Subversion: nếu bạn không muốn tạo một nhánh cho mỗi thay đổi bạn làm, bạn có thể giữ một vài thân được kiểm tra cục bộ (trunk-modif-1, trunk-modif-2.. .). Mỗi "sửa đổi" được thực hiện trên một cây riêng biệt và bạn chỉ cần giữ một danh sách kiểm tra tương ứng với sửa đổi nào.

Hoặc bạn có thể sử dụng Git cục bộ nhưng tôi chưa bao giờ thử nó.


3
FYI - truy cập lịch sử cục bộ qua menu ngữ cảnh nhấp chuột phải "Khôi phục từ lịch sử cục bộ".
HDave

Đối với phần Eclipse, đây là câu trả lời cụ thể hơn: stackoverflow.com/a/18220708/517705
Sk8erPeter

14

Gần đây, lỗi này đã không thực hiện thay đổi tệp mới (khoảng 10) trên SVN và tất cả đều biến mất vì sai lầm ngớ ngẩn của tôi. Nhưng thứ đã cứu tôi là tùy chọn "Khôi phục phiên bản trước" của cửa sổ trong menu ngữ cảnh. Phù, đó là một sự nhẹ nhõm và bài học kinh nghiệm.


Cảm ơn bạn! Điều này đã giúp tôi khỏi phải làm lại hàng giờ làm việc! Tôi chưa từng thấy tính năng này của windows trước đây, nhưng nó đã cứu tôi!
NibblyPig

Tôi có thể gửi 6000 đô la mà tôi nợ bạn vì điều này đã tiết kiệm được ngày làm việc ở đâu? Bài học kinh nghiệm ...
HDave

Cảm ơn bạn nó đã lưu ngày của tôi.
Opax Web

Tôi tiếp tục tắt kiểm tra hỗ trợ khôi phục như vậy vì nó làm hỏng hiệu suất. Gần đây, Eclipse đã xóa một thư mục trong các dự án của tôi bao gồm cả kho lưu trữ git của nó, do sự cố với tính năng Hoàn tác của nó và tôi muốn rằng tôi đã bật nó lên. Tuy nhiên, một chương trình Windows có tên Recuva đã cứu tôi bằng cách tìm kiếm không gian tệp đã bị xóa. Tôi đã rất cẩn thận để không thêm nội dung bổ sung vào ổ đĩa bị ảnh hưởng cho đến khi tôi khôi phục tất cả các tệp của mình và nó đã cung cấp cho tôi mọi tệp nguồn đã thay đổi kể từ lần sao lưu gần đây nhất của tôi một tuần trước đó. Các tệp nhị phân hầu như không thể khôi phục được.
Carl

8

Bạn không thể khôi phục các tệp, nếu bạn đang sử dụng máy khách dòng lệnh svn .

Nhưng bạn có thể khôi phục chúng, nếu bạn đang sử dụng TortoiseSVN làm ứng dụng khách svn của mình. TortoiseSVN sẽ tự động chuyển chúng vào Thùng rác của bạn. Bạn có thể khôi phục chúng từ đó sau khi hoàn nguyên tình cờ.

Đây là một tùy chọn có thể định cấu hình trong TortoiseSVN. Nó nằm trong Cài đặt -> Hộp thoại 1 -> Sử dụng thùng rác khi hoàn nguyên.

Theo mặc định, nó được chọn, có nghĩa là các tệp được chuyển vào thùng rác. Nếu bạn muốn (chủ yếu là bạn không quan tâm đến việc tắt tính năng này. Nếu bạn có lý do, vui lòng cho tôi biết)


1
Awesome ... cứu tôi
Janani Kumar

6

Nếu bạn đang sử dụng InteliJ thì bạn là một người may mắn. Trên menu trên cùng, bạn có tùy chọn Kiểm soát phiên bản và bên dưới nó, bạn sẽ tìm thấy tùy chọn lịch sử cục bộ, nơi bạn sẽ tìm thấy tất cả lịch sử cho tệp đã chọn, bao gồm tất cả thao tác bạn đã thực hiện với tệp đó (cập nhật, cam kết, hoàn nguyên).

Chúc may mắn, Arkde


1
Và nếu đó là một tệp mới, thì bản thân tệp đó sẽ bị xóa. Trong trường hợp đó, hãy chọn thư mục chứa tệp từ chế độ xem Dự án và sau đó chọn 'Lịch sử cục bộ'. IntelliJ đã cứu ngày một lần nữa.
Nufail


2

Tôi đã hoàn nguyên giải pháp (Visual Studio + AnkhSVN) và mất các thay đổi của một vài tệp. Tôi không thể tìm thấy tệp trong thùng rác.

NHƯNG: Tôi đã khôi phục các tệp bị mất của mình bằng Handy Recovery, tức là SVN chỉ cần xóa các tệp của tôi khi hoàn nguyên.

Sử dụng bất kỳ phần mềm khôi phục dữ liệu nào để khôi phục các tệp đã hoàn nguyên (như dùng thử Handy Recovery )


2

Tôi rất may mắn khi tìm thấy nhật ký thay đổi cục bộ của tệp (Bản sửa đổi cục bộ) trong trình duyệt lịch sử trong Eclipse. Tôi đã kiểm tra sự khác biệt từng cái một và tôi đã lưu một số tệp trước khi ghi đè.


1

Không, SVN không lưu giữ nhật ký hoặc bản sao lưu (mặc dù có một giải pháp cho TortoiseSVN được lưu ý trong các câu trả lời khác).

Nhưng trong trường hợp ai đó đang duyệt các câu trả lời và không nhận thấy nhận xét này trong câu hỏi của OP:

"May mắn thay trong trường hợp này, tôi đã thực hiện" svn diff> temp.txt "trước khi rời khỏi công việc vào thứ Sáu và tệp temp.txt vẫn còn trên ổ cứng của tôi, vì vậy tôi có thể đưa tệp đó vào" bản vá "và khôi phục những thay đổi đã mất của tôi. "

Tôi tưởng tượng đó là một mô hình phổ biến để thực hiện 'svn diff' TRƯỚC KHI bạn thực hiện 'svn hoàn nguyên'. Nếu bạn có thói quen làm điều này, ngay cả khi sự khác biệt chỉ được lặp lại đến thiết bị đầu cuối, ít nhất bạn cũng có một con đường khả thi để khôi phục những thay đổi đã mất của mình.

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.