Mengingat kasus saya membuat dua perubahan independen dalam satu file: mis. menambahkan metode baru dan mengubah metode lain.
Saya sering tidak ingin melakukan kedua perubahan sebagai satu komitmen, tetapi sebagai dua komitmen independen.
Pada repositori git saya akan menggunakan Interaktif Mode dari git-add (1) untuk membagi sepotong menjadi lebih kecil:
git add --patch
Apa cara termudah untuk melakukan ini dengan Subversion? (Bahkan mungkin menggunakan plug-in Eclipse)
Pembaruan:
Dalam Hal Tentang Git , Ryan menyebutnya: "Masalah Salinan Pekerjaan yang Kusut."
Jawaban:
Dengan git-svn Anda dapat membuat repositori GIT lokal dari repositori SVN jarak jauh, bekerja dengannya menggunakan set fitur GIT lengkap (termasuk komit parsial) dan kemudian mendorong semuanya kembali ke repositori SVN.
git-svn (1)
sumber
Tortoise SVN 1.8 sekarang mendukung ini dengan fitur "Pulihkan setelah komit". Ini memungkinkan Anda untuk mengedit file, dengan semua pengeditan dibatalkan setelah komit
Sesuai dokumentasi:
sumber
Saya telah melakukan ini menggunakan TortoiseSVN .
Utilitas gabungan bawaan memungkinkan Anda menampilkan perbedaan antara versi repositori dan copy pekerjaan Anda.
Gunakan fungsi buat cadangan dari utilitas diff
Anda sekarang harus memiliki semua perubahan Anda yang dikomit, menggunakan dua komit terpisah.
sumber
Coba gunakan,
svn diff > out.patch
lalu salinout.patch
file keout.patch.add
danout.patch.modify
Hanya ketika Anda memiliki file patch yang berfungsi, kembalikan file asli menggunakan
svn revert out.c
.Edit file patch dengan tangan sehingga file tersebut hanya berisi hunks untuk ditambahkan atau dimodifikasi. Terapkan ke file asli menggunakan
patch
perintah, uji apakah penambahan berhasil, lalusvn commit
penambahan.Cuci bilas ulangi untuk
out.patch.modify
tambalan.Jika perubahan terpisah dalam file seperti yang dinyatakan pertanyaan awal Anda - menambahkan metode baru, mengubah metode yang ada - ini akan berhasil
Ini adalah solusi yang sangat membosankan - meskipun saya tidak yakin Anda harus memiliki alasan untuk memisahkan komitmen Anda.
Anda juga bisa memeriksa beberapa copy pekerjaan dari sumber yang sama untuk menerapkan pekerjaan Anda terhadap:
Pastikan
svn up
dan uji untuk memastikan semuanya baik-baik saja.sumber
Ini dimungkinkan menggunakan TortoiseSvn (Windows) sejak v1.8.
Di Linux, saya akan mencoba http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNP PartialCommit.php. Belum mencobanya sendiri.
sumber
Saya biasa melakukan ini:
Ini adalah pendekatan sederhana yang mengasumsikan satu set perubahan cukup mudah untuk dibatalkan. Untuk situasi yang lebih kompleks, saya akan menyerah dan melakukan kedua perubahan tersebut tanpa mengkhawatirkannya.
Sekarang saya menggunakan git, ini adalah sesuatu yang saya harap tidak akan pernah saya lakukan lagi!
sumber
Saya menggunakan repo darcs lokal, atau hanya menggabungkan perubahan secara bertahap. Dengan penggabungan (opendiff membuka FileMerge, program penggabungan yang disertakan dengan Xcode; ganti dengan alat penggabung favorit Anda):
menggabungkan perubahan terkait, menyimpan gabungan, keluar dari program gabungan
jika ada lebih dari satu bagian yang tidak terkait dalam file tersebut, bilas dan ulangi (tetapi mengapa Anda menunggu begitu lama sebelum melakukannya ?!)
Selain itu, jika Anda mengetahui git, Anda dapat menggunakan git-svn untuk memelihara repo git lokal dan menyinkronkan komit Anda ke server master svn; bekerja dengan baik dalam pengalaman saya yang terbatas.
sumber
Coba VisualSVN untuk Visual Studio . The 6.1 Rilis terbaru memperkenalkan fitur QuickCommit. Anda dapat melakukan sebagian perubahan yang dipilih dalam file menggunakan perintah menu konteks Seleksi Komit ini dan Seleksi Komit baru di editor Visual Studio.
sumber
Ini sedikit lebih berisiko daripada saran lengkap Spike, tetapi bisa lebih mudah dilakukan. Juga pastikan Anda mencobanya pada hal lain terlebih dahulu karena beberapa editor akan menolak untuk menyimpan file yang telah berubah dari bawah mereka kecuali Anda memuat ulang file itu (kehilangan semua perubahan Anda)
sumber
Saya pikir opsi yang lebih mudah daripada menghasilkan file diff, mengembalikan, dll, akan memiliki dua salinan repositori yang diperiksa, dan menggunakan alat visual diff seperti DeltaWalker untuk menyalin bongkahan dari satu ke yang lain.
Salinan pertama akan menjadi salah satu yang benar-benar Anda kerjakan, dan yang kedua hanya untuk tujuan ini. Setelah Anda membuat banyak perubahan pada yang pertama, Anda dapat menyalin satu bagian ke yang kedua, mengkomitnya, menyalin bagian lain, mengkomitnya, dll.
sumber
svn diff
.svn revert
.patch
alat, atau dengan pengeditan manual, atau apa pun.diff
setelah itu untuk membandingkan copy pekerjaan Anda dengan cadangan Anda untuk memastikan Anda menerapkan bagian tambalan dengan benar.sumber