Perbarui Item ke Revisi vs Kembalikan ke Revisi

161

Saya sudah mulai menggunakan Subversion dengan TortoiseSVN. Jika saya membuka log dan klik kanan pada revisi lama saya melihat dua opsi yang terdengar seperti mereka memutar kembali ke versi yang lebih lama: "Perbarui item ke revisi" dan "Kembalikan ke revisi ini".

Saya mengerti bahwa memperbarui revisi yang lebih lama digunakan ketika Anda hanya ingin melihat kembali versi lama tetapi tidak benar-benar mengubah repositori. Kembalikan adalah ketika Anda benar-benar mengacau dan ingin revisi terbaru dalam repositori sama dengan versi yang lebih lama.

Jadi katakanlah revisi HEAD adalah 100 dan saya kembali ke 95. Ini akan membalikkan penggabungan copy pekerjaan saya kembali ke 95. Lalu saya bisa melakukan perubahan itu ke repositori yang akan membuat revisi 101 benar? Apa bedanya jika saya memperbarui kembali ke revisi 95? Bukankah itu masih membalik perubahan dari revisi terakhir? Saya bingung bagaimana kondisi copy pekerjaan saya berbeda setelah Reverting atau Memperbarui ke revisi yang lebih lama.

Eric Anastas
sumber

Jawaban:

205

Perbarui ke revisi hanya akan memperbarui file copy pekerjaan Anda ke revisi yang Anda pilih. Tetapi Anda tidak dapat terus mengerjakan revisi ini, karena SVN akan mengeluh bahwa workcopy Anda sudah ketinggalan zaman .

kembali ke revisi ini akan membatalkan semua perubahan dalam copy pekerjaan Anda yang dibuat setelah revisi yang dipilih (dalam contoh Anda rev. 96,97,98,99,100) Salinan kerja Anda sekarang dalam keadaan dimodifikasi .

Konten file dari kedua skenario sama, namun dalam kasus pertama Anda memiliki copy pekerjaan yang tidak dimodifikasi dan Anda tidak dapat melakukan perubahan Anda (karena copy pekerjaan Anda tidak menunjuk ke HEAD rev 100) dalam kasus kedua Anda memiliki copy pekerjaan yang dimodifikasi menunjuk ke kepala dan Anda dapat terus bekerja dan berkomitmen

Peter Parker
sumber
1
OK jadi katakan saya perbarui revisi dan copy pekerjaan saya kehabisan data. Tidak ada yang menghentikan saya untuk mengubah file. Bagaimana jika saya mengubah salah satu file dan mencoba mengkomitnya. Saya menduga subversi akan melihat konflik dan memaksa saya untuk menggabungkan versi terbaru dalam repositori ke dalam copy pekerjaan saya yang dimodifikasi sebelum saya mengirimkannya.
Eric Anastas
5
Jika Anda mencoba untuk mengkomit item dengan BASE-Revisi lebih lama dari HEAD, Anda akan mendapatkan "komit gagal: copy pekerjaan Anda mungkin kedaluwarsa"
Peter Parker
bagaimana update todan revert to/frommemperlakukan perubahan lokal (perubahan tidak dikomit)?
BaltoStar
Kedua metode menjaga perubahan lokal tetap utuh, namun perubahan lokal dapat menyebabkan konflik dalam kedua kasus dan dalam kasus sebaliknya modifikasi dari roll back dicampur dengan semua pengguna lain perubahan lokal. Jadi setidaknya simpan tambalan modifikasi Anda atau komit ke cabang.
Peter Parker
31

Untuk memahami perbedaan kondisi copy pekerjaan Anda di kedua skenario, Anda harus memahami konsep revisi BASE :

MENDASARKAN

Jumlah revisi suatu item dalam copy pekerjaan. Jika item telah dimodifikasi secara lokal, ini mengacu pada cara item muncul tanpa modifikasi lokal tersebut.

Salinan kerja Anda berisi snapshot dari setiap file (disembunyikan di folder .svn) di revisi DASAR ini, artinya seperti saat terakhir diambil dari repositori . Ini menjelaskan mengapa copy pekerjaan membutuhkan ruang 2x dan bagaimana mungkin Anda dapat memeriksa dan bahkan mengembalikan modifikasi lokal tanpa koneksi jaringan.

Perbarui item ke Revisi mengubah revisi basis ini, menjadikan DASAR ketinggalan zaman. Ketika Anda mencoba melakukan modifikasi lokal, SVN akan melihat bahwa BASE Anda tidak cocok dengan HEAD repositori. Komit akan ditolak hingga Anda melakukan pembaruan (dan mungkin gabungan) untuk memperbaikinya.

Kembalikan ke revisi tidak mengubah DASAR. Secara konseptual hampir sama dengan mengedit file secara manual agar sesuai dengan revisi sebelumnya.

Wim Coenen
sumber
Dari jawaban yang diterima "Konten file dari kedua skenario adalah sama". Jadi mengapa repot? Jawaban ini menjelaskan perbedaan utama, dan menjelaskan mengapa "pembaruan" vs-a-vis "kembalikan" menyebabkan perilaku yang berbeda ketika mencoba untuk melakukan.
radarbob
bagaimana update todan revert to/frommemperlakukan perubahan lokal (perubahan tidak dikomit)?
BaltoStar
5

File-file dalam copy pekerjaan Anda mungkin terlihat persis sama setelah itu, tetapi mereka masih tindakan yang sangat berbeda - repositori dalam keadaan yang sama sekali berbeda, dan Anda akan memiliki opsi yang berbeda yang tersedia untuk Anda setelah mengembalikan daripada "memperbarui" ke revisi lama .

Secara singkat, "perbarui ke" hanya memengaruhi copy pekerjaan Anda, tetapi "gabungkan dan komit" akan mempengaruhi repositori.

Jika Anda "memperbarui" ke revisi lama, maka repositori tidak berubah: dalam contoh Anda, revisi HEAD masih 100. Anda tidak harus melakukan apa-apa, karena Anda hanya bermain-main dengan copy pekerjaan Anda. Jika Anda membuat modifikasi pada copy pekerjaan Anda dan mencoba melakukan, Anda akan diberitahu bahwa copy pekerjaan Anda sudah kedaluwarsa, dan Anda perlu memperbarui sebelum Anda dapat melakukan. Jika orang lain yang bekerja di repositori yang sama melakukan "pembaruan", atau jika Anda memeriksa copy pekerjaan kedua, itu akan menjadi r100.

Namun, jika Anda "membalikkan penggabungan" ke revisi lama, maka copy pekerjaan Anda masih berdasarkan pada HEAD (dengan asumsi Anda up-to-date) - tetapi Anda membuat revisi baru untuk menggantikan perubahan yang tidak diinginkan. Anda harus melakukan perubahan ini, karena Anda mengubah repositori. Setelah selesai, setiap pembaruan atau copy pekerjaan baru berdasarkan HEAD akan menunjukkan r101, dengan konten yang baru saja Anda komit.

Zac Thompson
sumber
5

Perbarui copy pekerjaan Anda ke revisi yang dipilih. Berguna jika Anda ingin memiliki copy pekerjaan Anda mencerminkan waktu di masa lalu, atau jika ada komitmen lebih lanjut ke repositori dan Anda ingin memperbarui copy pekerjaan Anda satu langkah pada suatu waktu. Yang terbaik adalah memperbarui seluruh direktori dalam copy pekerjaan Anda, bukan hanya satu file, jika tidak copy pekerjaan Anda bisa tidak konsisten. Ini digunakan untuk menguji tujuan rev tertentu, jika tes Anda telah dilakukan, Anda dapat menggunakan perintah ini untuk menguji rev lain atau menggunakan Pembaruan SVN untuk mendapatkan HEAD

Jika Anda ingin membatalkan perubahan sebelumnya secara permanen, gunakan Kembalikan ke revisi ini .

- dari TSVN help doc

Jika Anda Perbarui copy pekerjaan Anda ke rev sebelumnya, ini hanya mempengaruhi copy pekerjaan Anda sendiri, setelah Anda melakukan beberapa perubahan, dan ingin melakukan, Anda akan gagal, TSVN akan mengingatkan Anda untuk memperbarui WC Anda ke revisi terbaru terlebih dahulu Jika Anda Kembalikan ke rev, Anda dapat berkomitmen ke repositori.semua orang akan kembali ke rev setelah mereka melakukan pembaruan.

prime23
sumber
2

Teks dari referensi Kura-kura:

Perbarui item ke revisi Perbarui copy pekerjaan Anda ke revisi yang dipilih. Berguna jika Anda ingin memiliki copy pekerjaan Anda mencerminkan waktu di masa lalu, atau jika ada komitmen lebih lanjut ke repositori dan Anda ingin memperbarui copy pekerjaan Anda satu langkah pada satu waktu. Yang terbaik adalah memperbarui seluruh direktori dalam copy pekerjaan Anda, bukan hanya satu file, jika tidak copy pekerjaan Anda bisa tidak konsisten.

Jika Anda ingin membatalkan perubahan sebelumnya secara permanen, gunakan Kembalikan ke revisi ini.

Kembalikan ke revisi ini Kembalikan ke revisi sebelumnya. Jika Anda telah membuat beberapa perubahan, dan kemudian memutuskan bahwa Anda benar-benar ingin kembali ke hal-hal yang ada dalam revisi N, ini adalah perintah yang Anda butuhkan. Perubahan dibatalkan di copy pekerjaan Anda sehingga operasi ini tidak mempengaruhi repositori sampai Anda melakukan perubahan. Perhatikan bahwa ini akan membatalkan semua perubahan yang dilakukan setelah revisi yang dipilih, mengganti file / folder dengan versi sebelumnya.

Jika copy pekerjaan Anda dalam keadaan tidak dimodifikasi, setelah Anda melakukan tindakan ini copy pekerjaan Anda akan ditampilkan sebagai dimodifikasi. Jika Anda sudah memiliki perubahan lokal, perintah ini akan menggabungkan perubahan yang dibatalkan ke dalam copy pekerjaan Anda.

Apa yang terjadi secara internal adalah bahwa Subversion melakukan penggabungan terbalik dari semua perubahan yang dilakukan setelah revisi yang dipilih, membatalkan efek dari komitmen sebelumnya.

Jika setelah melakukan tindakan ini, Anda memutuskan untuk membatalkan pembatalan dan mengembalikan copy pekerjaan Anda ke keadaan yang sebelumnya tidak dimodifikasi, Anda harus menggunakan TortoiseSVN → Kembalikan dari dalam Windows Explorer, yang akan membuang modifikasi lokal yang dibuat oleh tindakan penggabungan terbalik ini.

Jika Anda hanya ingin melihat seperti apa file atau folder pada revisi sebelumnya, gunakan Perbarui untuk revisi atau Simpan revisi sebagai ... sebagai gantinya.

Liker777
sumber