Bagaimana cara "membatalkan penghapusan" folder yang terhapus di Subversion / TortoiseSVN?

96

Kami secara tidak sengaja menghapus folder 'tag' dari repositori Subversion kami di mana kami hanya bermaksud untuk menghapus satu tag tertentu. Apa cara termudah untuk mendapatkan kembali folder 'tag'?

Kami menggunakan TortoiseSVN sebagai klien kami dan saya pikir ketika saya pergi ke browser repo dan menampilkan log, akan ada sesuatu seperti "kembalikan perubahan dari revisi ini" mirip dengan apa yang Anda lihat dalam dialog serupa pada copy pekerjaan Anda. Tetapi tidak ada perintah seperti itu di sana ...

Borek Bernard
sumber

Jawaban:

115

Cukup salin kembali folder yang dihapus dari revisi sebelumnya.

Di Browser Repositori, klik tombol berlabel HEAD (di pojok kanan atas) untuk menunjukkan ke revisi di sana folder Anda masih ada, lalu klik kanan folder itu dan pilih "Salin ke ..." dan masukkan jalur di sana Anda ingin folder dibuat ulang (mungkin jalur yang sama yang sudah ada di kotak teks).

Mikael Sundberg
sumber
4
Tip bagus, terima kasih. Satu gotcha TortoiseSVN - dalam dialog "salin ke ..." saya harus mengubah jalur dari 'example.com/svn/tags' ke 'tags1' dan kemudian kembali agar tombol OK diaktifkan.
Borek Bernard
2
Ini mungkin baik-baik saja untuk tag, tetapi tidak boleh dilakukan untuk membatalkan penghapusan folder lain karena Anda akan kehilangan riwayat
slckin
3
Itu menyimpan sejarah, begitu saja juga.
acdcjunior
cukup pastikan Anda tidak mencentang "Berhenti saat menyalin / mengganti nama" saat melihat log, karena jika tidak TortoiseSVN tidak akan menampilkan riwayat sebelum tindakan pemulihan Anda (jelas) ...
Oli
Ini benar-benar berhasil. Menghemat banyak waktu saya. Terima kasih :)
dgupta3091
78

untuk penggemar baris perintah:

  • pertama temukan nomor revisi di mana penghapusan Anda terjadi:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

katakanlah Anda menemukan bahwa direktori telah dihapus dalam revisi 999 (btw: Anda mungkin akan lebih mudah menemukan nomor revisi dengan browser repo svn)

  • salin folder dari revisi minus 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voila Anda sudah selesai!

dalam kasus Anda ini mungkin:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"
raudi
sumber
1
Terima kasih..simpan banyak waktu
Dharani Kumar
Ini baru saja menyelamatkan daging saya!
aksiopisti
Hanya ingin memastikan bahwa pendekatan "svn copy" sebenarnya mempertahankan semua riwayat, dan untuk folder, pendekatan ini beroperasi secara rekursif, memulihkan folder dan semua anak.
WallStProg
11

Sebagian besar dari jawaban ini akan berhasil sampai tingkat tertentu tetapi jawaban yang benar adalah Daniel. Lakukan penggabungan terbalik. Dengan cara itu Anda menyimpan riwayat versi.

svn merge -r R1:R2

di mana R1 adalah revisi yang Anda gunakan, dan R2 adalah revisi yang berisi file / folder yang dihapus.

Miles
sumber
1
Dalam penggabungan terbalik, R1 harus menjadi revisi yang ingin Anda kembalikan dengan R2 menjadi revisi sebelumnya.
arleslie
2
Anda tidak kehilangan riwayat apa pun dengan svn copy.
maxschlepzig
Bagi kita yang bukan penggemar baris perintah, lihat: tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Pascal
2
Bukankah ini akan memulihkan semua file / folder yang dihapus? Apakah ini akan berfungsi jika saya hanya ingin memulihkan satu folder tertentu yang dihapus tetapi tidak folder lain yang dihapus?
OJ7
8

Anda perlu melakukan penggabungan terbalik .

Untuk detail tentang bagaimana melakukannya (dan hampir semua hal lain yang Anda inginkan atau perlu lakukan dengan SVN), buku resminya tersedia secara online .

Daniel
sumber
3

Berikut jawaban raudi yang berhasil bagi saya setelah revisi ini.

Beberapa klien svn mungkin memerlukan nomor revisi yang ditentukan menggunakan parameter revisi -r daripada menggunakan @ setelah folder seperti berikut:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"
Paul
sumber
Jika Anda memulihkan dari folder yang masih ada maka -r <revision>akan berfungsi. Namun jika Anda mencoba memulihkan folder secara langsung, Anda harus menggunakan @<revision>. Jika tidak, itu akan memberi tahu Anda bahwa file itu tidak ditemukan.
arleslie
2

Pergi ke Repository BrowserAnda repository, klik kanan pada folder induk tempat folder yang Anda hapus ada. Sekarang, Show Logdari folder induk, dan pilih revisi sebelumnya di mana Anda melakukan operasi hapus. Anda akan memiliki daftar dan klik kanan pada folder dari info revisi dan pilih Update to this Revision.

Kamu selesai

Abdul Munim
sumber
Oh begitu, itu tidak ada di dialog Show Log tetapi di jendela browser repo utama. Namun, perintah itu akan mencoba memperbarui copy pekerjaan lokal saya sementara saya ingin memperbaiki masalah ini di server secara langsung (Anda dapat membayangkan bahwa memeriksa ratusan tag, masing-masing berisi ribuan file, tidak persis seperti yang saya inginkan melakukan).
Borek Bernard
Itu berhasil untuk saya. Opsi menu konteks (pada klik kanan) adalah "Kembalikan perubahan dari revisi ini" dan itu akan membalikkan penggabungan perubahan.
hsg