SVN membatalkan penghapusan sebelum komit


135

Jika Anda menghapus direktori dari copy pekerjaan SVN, tetapi belum berkomitmen, tidak jelas bagaimana cara mendapatkannya kembali. Google bahkan menyarankan "svn undo delete before commit" sebagai kueri umum saat Anda mengetik "svn undo d", tetapi hasil pencarian tidak membantu.

edit: Saya ingin solusi yang bekerja di subversi 1.4.4


Apakah ada direktori saudara dengan yang Anda hapus dengan perubahan tertunda? Jika demikian, berhati-hatilah saat kembali dari level yang lebih tinggi, Anda mungkin kehilangan perubahan.
Russell

Jawaban:


145

svn revert deletedDirectory

Berikut dokumentasi untuk svn revertperintah tersebut.


EDIT

Jika deletedDirectorydihapus menggunakan rmdirdan tidak svn rm, Anda harus melakukannya

svn update deletedDirectory

sebagai gantinya.


3
Itu pasti baru, tidak bekerja di SVN 1.4.4. (Itu adalah hal pertama yang saya coba.)
LaC

4
Inilah yang 1.4.4 katakan, btw: $ svn help revert revert: Pulihkan file copy pekerjaan asli (batalkan sebagian besar suntingan lokal). penggunaan: kembalikan PATH ... Catatan: subperintah ini tidak memerlukan akses jaringan, dan menyelesaikan semua status konflik. Namun, itu tidak mengembalikan direktori yang dihapus.
LaC

1
1.6.6 memiliki teks yang sama dalam bantuan, tetapi itu berhasil untuk saya ketika saya mengujinya. Perhatikan bahwa jika Anda tidak menggunakan svn deleteuntuk menghapus direktori, tetapi malah menghapusnya menggunakan rmdir, Anda harus melakukannya svn update deletedDirectory.
Michael Hackner

Saya telah menghapus satu file (svn del) dari direktori lokal svn-ed. Pembaruan svn tidak berfungsi tetapi svn kembali berfungsi. Saya menggunakan SynchroSVN untuk Mac. Namun, terima kasih atas tipnya.
karim

5
Sesuai tautan, gunakan svn -R kembali untuk membatalkan penghapusan seluruh direktori dengan semua konten, yang mungkin Anda inginkan. svn kembali tanpa -R hanya mengembalikan direktori, bukan isinya.
n13

156

1) lakukan

svn revert . --recursive

2) mengurai keluaran untuk kesalahan seperti

"Failed to revert 'dir1/dir2' -- try updating instead."

3) panggil svn up untuk setiap direktori error:

svn up dir1/dir2

12
Ini jawaban paling akurat, terima kasih banyak, Anda banyak membantu saya.
greenoldman

1
Kecuali itu mengembalikan segalanya? Anda mungkin tidak ingin melakukan itu.
n13

1
Ini paling masuk akal jika Anda memiliki seluruh folder yang menurut SVN telah dihapus. Saya memilikinya saat memeriksa copy pekerjaan. Satu folder sudah ada, jadi ditempatkan dalam konflik dan tidak diperiksa. Itu adalah tautan ke folder lain. Saya mengganti namanya dan mencoba svn upuntuk memeriksanya, menyadari konfliknya, melakukan svn resolved foodan svn statusmemberi tahu saya bahwa saya memiliki sekitar 10k file yang ditandai sebagai D. svn updan svn reverttidak mendapatkannya kembali, tetapi ini menyelesaikan masalah.
simbabque

6
1 --recursiveyang membantu memulihkan konten direktori yang dihapus.
Melebius

1
Ya Tuhan, Anda menyelamatkan malam saya!
ArturOlszak

32

Apa yang berhasil bagi saya adalah

svn revert --depth infinity deletedDir

Ini bekerja dengan sangat baik untuk saya (svn 1.7.10) di mana svn mengembalikan deletedDir gagal melakukan pekerjaan itu. Jawaban yang sangat bagus.
rtome

4

Lakukan operasi (rekursif) Kembalikan dari tingkat di atas direktori yang Anda hapus.


1
Ini akan menghapus CARA lebih banyak perubahan dari yang diperlukan.
Michael Hackner

Itu tidak bekerja dengan Subversion 1.4.4 (Saya baru saja mencobanya). Bantuan svn mengembalikan bahkan mengatakan "subperintah ini tidak memerlukan akses jaringan, dan menyelesaikan setiap negara konflik. Namun, itu tidak memulihkan direktori yang dihapus." Maaf, saya harus menentukan versinya. 1.4.4 adalah yang disertakan dengan Mac OS X 10.5.
LaC

4

Untuk membuatnya menjadi satu liner, Anda dapat mencoba sesuatu seperti:

svn status | cut -d ' ' -f 8 | xargs svn revert

Saya dapat membuat direktori dengan spasi dalam namanya. Ini mungkin merusak 'memotong' AFAIK.
Denis Barmenkov

1

Solusi paling sederhana yang dapat saya temukan adalah menghapus direktori induk dari copy pekerjaan (dengan rm -rf, bukan svn delete), dan kemudian jalankan pembaruan svn di eyang. Misalnya, jika Anda menghapus a / b / c, rm -rf a / b, cd a, svn up. Itu mengembalikan semuanya. Tentu saja, ini hanya solusi yang baik jika Anda tidak memiliki perubahan tidak terikat lainnya di direktori induk yang ingin Anda simpan.

Semoga halaman ini akan menjadi hasil teratas saat saya mencari pertanyaan ini di Google. Akan lebih baik lagi jika seseorang menyarankan metode yang lebih bersih, tentunya.


Itu dengan asumsi tidak ada subdirektori di induk yang memiliki perubahan tertunda.
Russell

0

Anda dapat menghapus folder dan memperbarui direktori induk sebelum melakukan:

rm -r some_dir

svn update some_dir_parent

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.