Saya berhasil menembak kaki saya sendiri pagi ini dengan melakukan hal berikut:
- Mulai mengerjakan perubahan pada proyek saya
- Melakukan banyak pengeditan pada banyak file
- Menyadari bahwa pendekatan saya salah, dan saya perlu memulai kembali
- cd ke level teratas proyek saya dan melakukan "svn --recursive revert." untuk memulihkan kotak pasir lokal saya ke keadaan pra-perubahannya.
- 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?
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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)
sumber
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
sumber
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.
sumber
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.
sumber
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 )
sumber
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.
sumber