Ingin menghapus revisi dari repositori SVN saya

33

Revisi terbaru dalam repo kode saya telah rusak dan telah membuat aplikasi saya tidak stabil. Saya ingin kembali ke revisi sebelumnya.

Tetapi saya tidak ingin hanya menggunakan 'kembalikan' pada copy pekerjaan saya; Saya sebenarnya ingin menghapus revisi kepala saya dan beberapa revisi sebelumnya dalam repo saya, sehingga 'mengembalikan' repo saya ke revisi sebelumnya, yang akan menjadi revisi kepala. Adakah yang tahu bagaimana saya akan melakukan ini?

Sathyajith Bhat
sumber
1
Anda tidak bisa menghapus revisi lama, yang bisa Anda lakukan hanyalah membalikkan perubahan, dan melakukan itu, seperti yang disebutkan oleh Felix. Sidenote yang menarik, Git (dan juga solusi kontrol versi lainnya) sebenarnya memungkinkan Anda untuk benar-benar menghapus revisi ..
davr
3
Ya Anda bisa, Anda hanya perlu akses ke repositori SVN dengan svnadmin. Lihat jawaban saya di bawah ini.
martin
davr secara teknis benar. Apa yang Anda gambarkan adalah membuang semua revisi kecuali yang buruk, lalu membuang ini di atas repo lama. Dalam pikiran saya itu tidak benar-benar sama dengan 'menghapus' revisi.
Sirex

Jawaban:

12

Mungkin tautan ini membantu Anda:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Mengutip:

  1. Ubah ke direktori teratas dalam copy pekerjaan Anda (dengan asumsi Anda ingin memutar kembali seluruh copy pekerjaan).

  2. jalankan svn revertuntuk mengembalikan file copy pekerjaan Anda ke keadaan di mana Anda terakhir kali melakukan / memeriksa.

  3. jalankan svn status -vuntuk melihat nomor revisi yang sesuai dengan copy pekerjaan Anda (nomor revisi tertinggi dalam daftar yang svn status -vmenghasilkan).

  4. jalankan di svn merge -rXX:YYmana XXangka yang Anda peroleh di langkah sebelumnya dan YYmerupakan angka revisi yang ingin Anda kembalikan.

  5. Selesai! Kemungkinan pengecualian untuk ini adalah bahwa file dalam copy pekerjaan Anda yang tidak ada ketika revisi YYawalnya dibuat, akan tetap ada, karena secara default svn tidak menghapus hal-hal. Jika Anda ingin menyingkirkannya, jalankan svn del [filename]masing-masing.

  6. Sudah selesai dilakukan dengan baik! Sekarang mainkan dengan copy pekerjaan Anda seolah-olah semua suntingan perantara tidak pernah terjadi. Dan ketika Anda siap untuk melakukan upaya Anda, cukup gunakan svn commit seperti biasa!

Felix
sumber
1
Di Windows Os, opsi # 4 jalankan svn merge -rXX:YY .Ingatlah untuk meletakkan titik di akhir baris untuk referensi direktori saat ini. Dan di TortoiseSVN, ada opsi untuk membalikkan penggabungan.
Shantha Kumara
3
Ini tidak benar-benar kembali ke "revisi sebelumnya, yang akan menjadi revisi kepala". Itu tidak membuat revisi yang lebih lama HEAD. Sebaliknya, itu menciptakan KEPALA baru. Lihat jawaban martin.
Matthew Flaschen
Saya memodifikasi jawaban untuk memasukkan komentar Shantha tentang periode trailing. Ini sama pada * nix juga.
Mike Kormendy
72

Ini berhasil untuk saya. Mengingat Anda memiliki revisi 1234 sebagai HEAD dan Anda ingin mengembalikan tiga komitmen terakhir:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo
martin
sumber
12
+1. Anda satu-satunya yang sama-sama memahami pertanyaan dan memberikan jawaban spesifik.
Matthew Flaschen
6
Secara teknis ini adalah jawaban yang tepat. Akan tetapi, harus ditunjukkan bahwa ini, selain mungkin agak rumit untuk dilakukan, juga akan membatalkan semua salinan check-out - jadi Anda harus memberi tahu siapa pun yang juga menggunakan repo.
sleske
1
cepat dan mudah dan to the point dan sebenarnya apa yang diminta poster itu.
unc0nected
7
Selama Anda memastikan untuk juga menyalin repositori UUID ke repo baru (lihat "svnadmin setuuid", menyalin dari UUID di "info svn" di repo lama), hanya checkout yang diperbarui ke revisi yang Anda hentikan akan menjadi tidak valid.
Bryan Petty
1
Pada repo baru Anda mungkin perlu memperbaiki izin file atau menyalin file dalam direktori hooks / conf
AdamS
5

Saya tahu ini adalah pertanyaan lama, namun, saya baru saja menemukan cara melakukan ini dengan Windows / TortoiseSVN.

Seperti komentar yang disarankan, Anda tidak dapat "menghapus" suatu revisi, tetapi yang dapat Anda lakukan adalah membuat revisi yang lebih terkini yang sama dengan revisi yang ingin Anda kembalikan.

  1. Periksa HEAD dari repositori untuk direktori tempat Anda ingin mengembalikan revisi.
  2. Muat tampilan "Tampilkan Log" di TortoiseSVN untuk direktori level tertinggi yang ingin Anda kembalikan (mis. "Trunk").
  3. Klik kanan revisi yang ingin Anda hapus CATATAN: ini adalah revisi yang ingin Anda hapus, bukan yang ingin Anda kembalikan.
  4. Pilih "Kembalikan perubahan dari revisi ini".
  5. Klik "Ya" saat diminta.
  6. Perbarui checkout seperti biasa, tetapi ke "HEAD".
  7. Komit kembali.

Anda kemudian akan pergi ke semua orang yang memeriksanya dan meminta mereka untuk memperbarui dan pastikan untuk menghapus file baru.

Selain itu, Anda harus memastikan bahwa semua orang tahu apa revisi itu dan berpotensi memperbarui deskripsi.

Martin
sumber
apa bedanya dengan prosedur "kembalikan" yang normal?
Tomer W
Revert hanya mengubah copy pekerjaan Anda menjadi apa yang ada di dalam repo ... ini adalah bagaimana membuat KEPALA laporan mencerminkan keadaan dari komit sebelumnya.
Martin
1
Terima kasih untuk ini - Melakukan ini dengan cara kura-kura SVN adalah apa yang saya butuhkan untuk mengembalikan komit yang keliru :)
Dr. Andrew Burnett-Thompson
Ada juga entri menu konteks " Kembalikan ke revisi ini " di jendela Log.
Uwe Keim
4

Anda dapat menggunakan dump / load untuk tujuan ini.

Anda juga dapat menggunakan svnsync untuk membuat cadangan ke beberapa revisi.

Jika Anda memiliki repositori besar, perlu waktu.

Bac Dari Vietnam
sumber
3

Bagi saya (VisualSVN, 30-HEAD) berfungsi sebagai berikut:

  del C: \ Repositori \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositori \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositori \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositori \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositori \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositori \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositori \ MyRepo \ db \ saat ini
  

Anton Golikhoff
sumber
Bagaimana ini lebih baik daripada jawaban lain?
Toto
Jauh lebih cepat.
Anton Golikhoff
0

Pergi ke terminal dan arahkan ke repsitory svn: sekarang ketik

svn perbarui -r "nomor revisi yang ingin Anda kembalikan"

Mohd Ikram
sumber
2
Selamat Datang di Pengguna Super! Silakan baca pertanyaan itu lagi dengan seksama. Jawaban Anda tidak menjawab pertanyaan awal. OP mengatakan "Saya tidak ingin hanya menggunakan 'kembalikan' pada copy pekerjaan saya"
DavidPostill