Apakah ada cara untuk memulihkan dari "pengembalian svn" yang tidak disengaja?

95

Saya berhasil menembak kaki saya sendiri pagi ini dengan melakukan hal berikut:

  1. Mulai mengerjakan perubahan pada proyek saya
  2. Melakukan banyak pengeditan pada banyak file
  3. Menyadari bahwa pendekatan saya salah, dan saya perlu memulai kembali
  4. cd ke level teratas proyek saya dan melakukan "svn --recursive revert." untuk memulihkan kotak pasir lokal saya ke keadaan pra-perubahannya.
  5. Melolong ngeri ketika saya menyadari bahwa telah ada sejumlah perubahan lain yang luar biasa di kotak pasir lokal saya, dan saya baru saja melenyapkan semuanya. (server svn telah down Jumat lalu jadi saya tidak dapat memeriksanya, dan saya telah melupakannya selama akhir pekan)

Untungnya dalam kasus ini saya telah melakukan "svn diff> temp.txt" sebelum meninggalkan pekerjaan pada hari Jumat, dan file temp.txt masih ada di hard drive saya, jadi saya dapat memasukkan file itu ke "patch" dan memulihkan kehilangan perubahan.

Tetapi untuk referensi saya di masa mendatang (yaitu saat berikutnya saya membuat kesalahan bodoh yang sama) ... adakah cara untuk memberi tahu svn untuk membatalkan "pengembalian svn"? Apakah svn menyimpan backup local / not-check-in diffs dimanapun?

Jeremy Friesner
sumber
34
IIRC TortoiseSVN memindahkan file yang dikembalikan ke tempat sampah, tetapi klien baris perintah SVN asli tidak memiliki nuansa seperti itu.
Dario Solera
1
Saya tidak dapat menemukan file di recycle bin. Apakah saya kurang beruntung?
dalcantara
5
Komentar teratas tentang recycle bin. Itu baru saja menyelamatkan hariku!
OrganicPanda
2
milikku juga! Terima kasih banyak. File yang dikembalikan baru saja muncul di tempat sampah saya dan dapat dipulihkan.
sladda
1
Anda baru saja menyelamatkan bagian belakang saya dengan barang recycle bin !!!
Epirocks

Jawaban:

79

Tidak, (sama sekali) TIDAK .

Jika Anda mengatakan kepada Subversion itu harus mengembalikan file, semua perubahan hilang oleh angin.

Hanya ingatanmu yang bisa mendapatkannya kembali.

Pengecualian: File baru yang Anda tambahkan, hanya akan kehilangan statusnya "ditambahkan", tetapi file akan tetap berada di direktori ini, hanya statusnya yang tidak diketahui ("?")

Pengecualian Platform / Perangkat Lunak: Menggunakan TortoiseSVN pada Windows, Revert terlebih dahulu melempar file ke Recycle Bin dan kemudian mengembalikannya. Anda dapat menggali Recycle Bin untuk memulihkan file.

Peter Parker
sumber
10
Tambahan di atas: Kontrol versi hanya membantu Anda jika Anda benar-benar memasukkan file. Jika Anda berada dalam posisi di mana mematikan copy pekerjaan Anda akan mematikan jam kerja, maka Anda tidak cukup sering melakukan.
myron-semack
1
Setuju ... dalam hal ini server svn sedang down, dan itulah mengapa saya memiliki perubahan yang belum berkomitmen yang masih tertunda. : ^ (
Jeremy Friesner
13
Iya!!! Ada cara untuk memulihkannya tergantung pada O / S dan / atau IDE Anda - baca jawaban lain di bawah ini sebelum Anda mengalami serangan jantung !!
HDave
2
Itu tidak benar, ini sedikit lebih rumit daripada TIDAK sederhana. Gunakan alat pemulihan atau jika Anda beruntung, file tersebut ada di recycle bin.
RaphMclee
1
@RalphMclee: Itu tergantung pada platform dan klien svn. TortoiseSVN akan menyimpan file baru yang dikembalikan ke recycle bin. Ini hanyalah pengecualian. Dan saya ragu alat pemulihan dapat merekonstruksi perubahan file Anda secara konsisten. Jauh lebih mudah dan lebih jelas untuk diingat: mengembalikan akan menghancurkan pekerjaan Anda, gunakan dengan hati-hati!
Peter Parker
104

Ada solusi ... pergi ke tempat sampah Anda, Anda akan menemukan di sana versi terbaru dari file yang dihapus. Tortoise "melempar" ke recycle bin setiap file yang dikembalikannya.

shto
sumber
2
Secara kebetulan, ini juga mengapa TortoiseSVN tampak sangat lambat saat melakukan pengembalian. Memindahkan file ke recycle bin adalah operasi yang sangat lambat saat recycle bin penuh. Anda dapat menonaktifkan fitur ini dalam pengaturan TortoiseSVN "Umum - dialog 1".
Wim Coenen
8
Terima kasih kawan, Anda menyelamatkan saya! Saya tidak sengaja melakukan Revert dan hampir kehilangan 2 minggu kerja. Untungnya, saya menemukannya di recycle bin.
Arie Livshin
2
@ArieLivshin, mengapa Anda bekerja selama 2 minggu tanpa komitmen? Sepertinya Anda perlu mempelajari lebih lanjut tentang cabang.
JoelFan
Ankhsvn dengan kesal tidak melakukan ini
Phil Hale
Terima kasih .. Sangat membantu ful.
Prem Singh Bist
32

Tidak terlalu spesifik untuk Subversion, tetapi jika Anda bekerja dengan Eclipse, Anda dapat mencoba keberuntungan Anda dalam sejarah lokal.

Sekarang, sesuatu yang lebih spesifik Subversion: jika Anda tidak ingin membuat sebuah cabang untuk setiap perubahan yang Anda lakukan, Anda dapat membiarkan beberapa trunk diperiksa secara lokal (trunk-modif-1, trunk-modif-2 .. .). Setiap "modifikasi" dilakukan pada pohon terpisah dan Anda hanya perlu menyimpan daftar yang memeriksa sesuai dengan modifikasi mana.

Atau Anda dapat menggunakan Git secara lokal tetapi saya tidak pernah mencobanya.

Vladimir
sumber
3
FYI - masuk ke sejarah lokal melalui menu konteks klik kanan "Pulihkan dari sejarah lokal".
HDave
Untuk bagian Eclipse, berikut adalah jawaban yang lebih konkret: stackoverflow.com/a/18220708/517705
Sk8erPeter
14

Baru-baru ini melakukan kesalahan ini dengan tidak melakukan perubahan file baru (sekitar 10) ke SVN dan semuanya lenyap karena kesalahan konyol saya. Tapi yang menyelamatkan saya adalah jendela opsi "Kembalikan versi sebelumnya" di menu konteks. Fiuh itu melegakan dan pelajaran yang didapat.

Programmer
sumber
Terima kasih! Ini menyelamatkan saya dari mengulangi jam kerja! Saya belum pernah melihat fitur jendela ini sebelumnya, tetapi fitur ini menyelamatkan daging saya!
NibblyPig
Kemana saya dapat mengirim $ 6000 yang saya berutang kepada Anda karena ini telah menghemat hari kerja? Hal yang dipelajari ...
HDave
Terima kasih itu menyelamatkan hariku.
Opax Web
Saya tetap menonaktifkan pos pemeriksaan yang mendukung pemulihan seperti itu karena merusak kinerja. Baru-baru ini, Eclipse menghapus folder proyek saya termasuk arsip gitnya, karena ada masalah dengan fitur Undo-nya, dan saya agak berharap saya telah mengaktifkannya. Namun, program Windows bernama Recuva menyelamatkan saya dengan mencari ruang file yang dihapus. Saya sangat berhati-hati untuk tidak menambahkan konten tambahan ke drive yang terpengaruh sampai saya memulihkan semua file saya, dan itu memberi saya setiap file sumber berubah sejak pencadangan terbaru saya seminggu sebelumnya. File biner sebagian besar tidak dapat dipulihkan.
Carl
8

Anda tidak dapat memulihkan file, jika Anda menggunakan klien baris perintah svn .

Tetapi Anda bisa memulihkannya, jika Anda menggunakan TortoiseSVN sebagai klien svn Anda. TortoiseSVN akan secara otomatis memindahkannya ke Recycle Bin Anda. Anda dapat memulihkannya dari sana setelah pengembalian yang tidak disengaja.

Ini adalah opsi yang dapat dikonfigurasi di TortoiseSVN. Itu ada di bawah Pengaturan -> Dialog 1 -> Gunakan recycle bin saat kembali.

Secara default dicentang, yang berarti file dipindahkan ke recycle bin. Jika Anda ingin (kebanyakan Anda tidak peduli untuk menonaktifkan ini. Jika Anda punya alasan, beri tahu saya juga)

Manohar
sumber
1
Luar biasa! ... menyelamatkan saya
Janani Kumar
6

Jika Anda menggunakan InteliJ maka Anda adalah orang yang beruntung. Di menu atas, Anda memiliki opsi Kontrol Versi, dan di bawahnya Anda akan menemukan opsi riwayat lokal, di mana Anda akan menemukan semua riwayat untuk file yang dipilih, termasuk semua operasi yang Anda lakukan dengan file itu (perbarui, komit, kembalikan).

Semoga beruntung, Arkde

Aurelian Cotuna
sumber
1
Dan jika itu adalah file baru, file itu sendiri akan terhapus. Dalam hal ini pilih folder tempat file berada dari tampilan Proyek dan kemudian pilih 'Riwayat Lokal'. IntelliJ menyelamatkan hari itu lagi.
Nufail
4

Juga jika Anda telah mengembalikan kode NET Anda (file .cs dll) dan Anda telah membangun aplikasi Anda sebelum mengembalikan tetapi setelah Anda membuat perubahan, Anda dapat memulihkan perubahan dari file assembly menggunakan salah satu alat reflektor untuk melihat kode.

scor4er
sumber
3

Saya sangat beruntung menemukan log perubahan lokal dari file (Revisi Lokal) di browser riwayat di Eclipse. Saya telah memeriksa perbedaannya satu per satu dan saya telah melakukan beberapa kali penyimpanan pada file sebelum menimpa.

fyts
sumber
2

Saya mengembalikan solusi (Visual Studio + AnkhSVN) dan kehilangan perubahan beberapa file. Saya tidak dapat menemukan file di recycle bin.

TAPI: Saya memulihkan file saya yang hilang dengan Handy Recovery, yaitu SVN hanya menghapus file saya saat kembali.

Gunakan perangkat lunak pemulihan data apa pun untuk memulihkan file yang dikembalikan (seperti uji coba Handy Recovery )

Peter Barbanyaga
sumber
1

Tidak, SVN tidak menyimpan log atau cadangan (meskipun ada solusi untuk TortoiseSVN yang dicatat dalam jawaban lain).

Tetapi jika seseorang sedang menelusuri jawaban dan tidak memperhatikan komentar ini di pertanyaan OP:

"Untungnya dalam kasus ini saya telah melakukan" svn diff> temp.txt "sebelum meninggalkan pekerjaan pada hari Jumat, dan file temp.txt masih ada di hard drive saya, jadi saya dapat memasukkan file itu ke" patch "dan memulihkan perubahan saya yang hilang. "

Saya membayangkan itu adalah paradigma umum untuk melakukan 'svn diff' SEBELUM Anda melakukan 'svn kembali'. Jika Anda terbiasa melakukan ini, bahkan jika perbedaannya baru saja digaungkan ke terminal, Anda setidaknya memiliki satu cara yang memungkinkan untuk memulihkan perubahan yang hilang.

shaneb
sumber