Saya sedang mengerjakan proyek dengan seorang teman dan saya ingin kembali ke versi yang lebih lama dari kode kami dan menjadikannya sebagai yang sekarang. Bagaimana saya melakukannya?
Saya menggunakan "anksvn" di vs08.
Saya memiliki versi yang saya inginkan di PC saya, tetapi komit gagal; Pesan yang saya dapatkan adalah "komit gagal, file atau direktori kedaluwarsa."
Saya juga punya klien subversi di PC saya.
svn merge -r HEAD:140
.Anda hanya dapat melakukan perubahan baru di kepala riwayat subversi.
Alasan Anda tidak dapat melakukan apa pun secara langsung dengan salinan baik yang Anda miliki di PC Anda, adalah karena
.svn
foldernya mengetahui bahwa itu adalah kode dari masa lalu, sehingga memerlukan pembaruan sebelum melakukan apa pun.Temukan nomor revisi yang baik dan kembalikan
Temukan nomor revisi dari salinan lama yang Anda inginkan.
Dapatkan revisi Anda saat ini dengan:
Atau untuk memeriksa versi proyek Anda yang lebih lama , gunakan:
hingga Anda menemukan nomor revisi yang tepat.
Catat angka revisi yang baik (dengan asumsi
123
untuk contoh di bawah).Perbarui ke revisi terbaru:
Batalkan semua perubahan antara revisi yang Anda inginkan dan versi terbaru:
(sama dengan jawaban Jon Skeet di atas.)
Jika Anda tidak dapat menemukan nomor revisi
Jika Anda tidak dapat menemukan salinan lama, dan Anda hanya ingin mengkomit file-file saat ini di PC Anda:
Buat salinan versi bagus Anda (tetapi tanpa
.svn
folder apa pun ):Sekarang pastikan Anda memiliki versi terbaru:
Salin versi bagus Anda dari atas copy pekerjaan.
Perintah ini akan menyalin, dan juga menghapus file apa pun dari pohon kerja yang tidak ada dalam salinan baik Anda, tetapi tidak akan memengaruhi
.svn
folder yang ada .Jika Anda tidak memiliki rsync, Anda dapat menggunakan
cp -a
tetapi Anda juga harus menghapus file yang tidak diinginkan secara manual.Anda harus dapat melakukan apa yang Anda miliki sekarang.
sumber
Cukup gunakan baris ini
Anda dapat mengetahui revisi Anda saat ini dengan menggunakan:
sumber
Cara standar menggunakan penggabungan untuk membatalkan seluruh proses masuk sangat bagus, jika itu yang ingin Anda lakukan. Namun, terkadang, yang ingin Anda lakukan hanyalah mengembalikan satu file. Tidak ada cara yang sah untuk melakukan itu, tetapi ada peretasan:
Gunakan sub-perintah ekspor svn:
svn ekspor http: // url-ke-file-Anda @ 123 / tmp / nama file
(Di mana 123 adalah nomor revisi untuk versi file yang baik.) Kemudian pindahkan atau salin file tunggal itu untuk menimpa yang lama. Periksa di file yang dimodifikasi dan Anda selesai.
sumber
svn
juga?svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
Sedikit lebih tua
lalu yang biasa
sumber
Saya pikir ini yang paling cocok:
Lakukan penggabungan ke belakang, misalnya, jika kode yang dikomit berisi revisi dari rev 5612 ke 5616, hanya menggabungkannya mundur. Ini bekerja pada akhirnya.
Contohnya:
Ini akan berisi kode yang digabungkan kembali ke revisi sebelumnya, maka Anda bisa mengkomitnya.
sumber
Inilah yang saya lakukan dan bekerja untuk saya.
Saya ingin membatalkan perubahan dalam banyak komit yang saya lakukan untuk waktu tertentu dan ingin pergi ke titik komit sebelumnya.
Ini akan menjalankan penggabungan terbalik, membatalkan perubahan dalam copy pekerjaan Anda.
Cukup tinjau kode dan komit.
sumber
Klik kanan pada hierarki tertinggi yang ingin Anda kembalikan >>
Revert
atauRevert to Revision
sumber
Sebagian besar jawaban sebelumnya telah menggunakan penggabungan terbalik, dan itu biasanya jawaban yang tepat. Namun, ada satu situasi (yang baru saja terjadi pada saya) di mana tidak.
Saya tidak sengaja mengubah file dengan ujung baris Unix ke ujung garis DOS ketika membuat perubahan kecil, dan melakukan itu. Ini mudah dibatalkan, baik dengan mengubah akhir baris dan melakukan lagi, atau dengan penggabungan terbalik, tetapi memiliki efek membuat
svn blame
daftar edit saya sebagai sumber setiap baris file. (Menariknya, TortoiseSVN di Windows tidak terpengaruh oleh ini; hanya baris perintahsvn blame
.)Jika Anda ingin mempertahankan riwayat seperti yang dilaporkan oleh
svn blame
, saya pikir Anda perlu melakukan hal berikut:Penghapusannya sedikit menakutkan, tapi ingat Anda selalu menyimpan file di repositori, jadi memulihkannya bukan masalah besar. Berikut beberapa kode untuk menggambarkan langkah-langkahnya. Asumsikan itu
xxx
adalah nomor revisi dari salinan bagus terakhir.Perhatikan bahwa untuk salinan di repositori, tujuan harus berupa direktori, bukan nama file.
sumber
Klik kanan proyek> Ganti Dengan> Revisi atau URL> Pilih revisi spesifik yang ingin Anda kembalikan.
Sekarang komit versi kode pembaruan lokal ke repositori. Ini akan mengembalikan basis kode ke revisi tertentu.
sumber
Ada banyak jawaban berbahaya di halaman ini. Perhatikan bahwa sejak SVN versi 1.6, melakukan pembaruan -r dapat menyebabkan konflik pohon, yang dengan cepat meningkat menjadi data yang berpotensi kehilangan mimpi buruk kafkeresque di mana Anda mencari informasi tentang konflik pohon.
Cara yang benar untuk kembali ke versi adalah:
Di mana 12345 adalah nomor versi. Jangan lupa titiknya.
sumber
Sinkronkan ke versi yang lebih lama dan komit. Ini harus melakukan trik.
Berikut juga penjelasan tentang membatalkan perubahan.
sumber
Singkatnya, jawaban Jon Skeet adalah solusi singkatnya, namun jika Anda seperti saya, Anda mungkin ingin penjelasan. Manual Subversion menyebut ini a
Cherry-Pick Gabung
Dari halaman manual.
Contoh:
Ini akan menggantikan salinan lokal [2983] (yang, sesuai dengan kutipan di atas, harus disinkronkan dengan server - tanggung jawab Anda) dengan revisi 289 dari server. Perubahan terjadi secara lokal, yang berarti jika Anda memiliki checkout bersih, maka perubahan dapat diperiksa sebelum melakukan mereka.
sumber
Berikut ini berhasil bagi saya.
Saya punya banyak perubahan lokal dan harus membuang yang ada di salinan lokal dan checkout versi stabil terakhir di SVN.
Periksa status semua file, termasuk file yang diabaikan.
Grep semua baris untuk mendapatkan file yang baru ditambahkan dan diabaikan.
Ganti yang dengan
//
.dan rm -rf semua baris.
svn status --tidak-abaikan | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"
sumber