it-swarm-id.com

Sebagian Berkomitmen dengan Subversi

Mengingat kasus saya membuat dua perubahan independen dalam file satu: mis. menambahkan metode baru dan mengubah metode lain.

Saya sering tidak ingin mengkomit perubahan kedua sebagai satu komit, tetapi sebagai dua independen berkomitmen.

Pada repositori git saya akan menggunakan Mode Interaktif dari git-add (1) untuk membagi hunk menjadi yang lebih kecil:

 git add --patch

Apa cara termudah untuk melakukan ini dengan Subversion? (Mungkin bahkan menggunakan plug-in Eclipse)

Perbarui:
Dalam Masalahnya Tentang Git , Ryan menyebutnya: "Masalah Salinan Pekerjaan Berputar."

96

Dengan git-svn Anda dapat membuat repositori GIT lokal dari repositori SVN jarak jauh, bekerja dengannya menggunakan set fitur GIT lengkap (termasuk sebagian komitmen) dan kemudian Dorong semuanya kembali ke repositori SVN.

git-svn (1)

32
jkramer

Tortoise SVN 1.8 sekarang mendukung ini dengan fitur "Pulihkan setelah komit". Ini memungkinkan Anda untuk mengedit file, dengan semua pengeditan dibatalkan setelah komit

Per dokumentasi:

Untuk melakukan hanya bagian-bagian file yang berhubungan dengan satu masalah spesifik:

  1. dalam dialog komit, klik kanan pada file, pilih "restore after commit"
  2. edit file di mis. TortoiseMerge: batalkan perubahan yang belum ingin Anda komit
  3. simpan file
  4. komit file
58
Casebash

Saya telah melakukan ini menggunakan TortoiseSVN .

Utilitas gabungan yang terintegrasi memungkinkan Anda untuk menunjukkan perbedaan antara versi repositori dan copy pekerjaan Anda.

Gunakan fungsi buat cadangan dari utilitas diff

  1. Pergi untuk mengkomit file Anda seolah-olah Anda akan melakukan semua perubahan Anda.
  2. Di jendela komit, klik dua kali file untuk menampilkan diff.
  3. Dalam pengaturan diff, klik opsi untuk cadangan file asli
  4. Klik kanan perubahan yang tidak Anda inginkan, dan gunakan pilih gunakan blok teks lain.
  5. Simpan diff tepat sekali. Cadangan akan ditimpa setiap kali Anda menyimpan. Inilah sebabnya mengapa Anda hanya ingin menyimpan satu kali.
  6. Lakukan perubahan.
  7. Timpa yang asli dengan file .bak yang dibuat (yang akan memiliki semua perubahan asli Anda).
  8. Komit file Anda.

Anda sekarang harus memiliki semua perubahan Anda berkomitmen, menggunakan dua komit terpisah.

42
Spike

Coba gunakan svn diff > out.patch lalu salin file out.patch ke out.patch.add dan out.patch.modify 

Hanya ketika Anda memiliki file tambalan yang berfungsi kembalikan file asli menggunakan svn revert out.c.

Edit file tambalan dengan tangan sehingga hanya berisi bakhil untuk ditambahkan atau dimodifikasi. Menerapkannya ke file asli menggunakan perintah patch, uji apakah penambahan bekerja, kemudian svn commit tambahan.

Cuci ulangi bilas untuk patch out.patch.modify.

Jika perubahan terpisah dalam file seperti pertanyaan awal Anda - tambahkan metode baru, ubah metode yang ada - ini akan berhasil

Ini adalah solusi yang sangat membosankan - walaupun saya tidak yakin Anda harus memiliki alasan untuk memisahkan komitmen Anda.

Anda juga bisa memeriksa beberapa salinan yang berfungsi dari sumber yang sama untuk menerapkan pekerjaan Anda terhadap:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Pastikan untuk svn up dan uji untuk memastikan semuanya baik-baik saja.

25
Chris

Ini dimungkinkan menggunakan TortoiseSvn (Windows) sejak v1.8.

4.4.1. Dialog Komit

Jika copy pekerjaan Anda mutakhir dan tidak ada konflik, Anda siap untuk melakukan perubahan Anda. Pilih file dan/atau folder yang ingin Anda komit, lalu TortoiseSVN → Komit ....

<snip>

4.4.3. Hanya komit sebagian file

Terkadang Anda hanya ingin melakukan bagian dari perubahan yang Anda buat pada file. Situasi seperti itu biasanya terjadi ketika Anda sedang mengerjakan sesuatu tetapi kemudian kebutuhan perbaikan mendesak. untuk dikomit, dan perbaikan itu kebetulan berada di file yang sama Anda bekerja pada. 

klik kanan pada file dan gunakan Menu Konteks → Pulihkan setelah komit . Ini akan membuat salinan file apa adanya. Kemudian Anda dapat mengedit file, mis. di TortoiseMerge dan batalkan semua perubahan yang tidak Anda inginkan melakukan. Setelah menyimpan perubahan itu, Anda dapat mengkomit file. 

Setelah komit selesai, salinan file dikembalikan secara otomatis, dan Anda memiliki file dengan semua modifikasi Anda itu. tidak berkomitmen kembali.

Di Linux, saya akan memberikan http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php a try. Aku belum mencobanya sendiri.

10
parvus

Saya biasa melakukan ini:

  • Di editor saya (saya menggunakan vim), edit file sehingga hanya satu dari perubahan yang muncul
  • Simpan file (tapi jangan keluar dari editor)
  • Komit file yang diubah ke svn
  • Tekan "batalkan" di editor cukup banyak untuk perubahan perubahan kedua muncul kembali
  • Simpan file lagi
  • Komit set perubahan kedua.

Ini adalah pendekatan sederhana yang mengasumsikan satu set perubahan cukup mudah untuk diurungkan. Untuk situasi yang lebih kompleks, saya akan menyerah dan melakukan kedua perubahan tanpa khawatir.

Sekarang saya menggunakan git, ini adalah sesuatu yang saya harap tidak akan pernah saya lakukan lagi!

8
Greg Hewgill

Saya menggunakan repo darcs lokal, atau hanya menggabungkan perubahan secara bertahap. Dengan penggabungan (opendiff membuka FileMerge, program penggabungan yang dilengkapi dengan Xcode; ganti dengan alat penggabung favorit Anda):

cp file file.new
svn revert file
opendiff file.new file -merge file

menggabungkan perubahan terkait, menyimpan gabungan, keluar dari program gabungan

svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file

jika lebih dari satu bingkah yang tidak terkait dalam file, bilas dan ulangi (tetapi mengapa Anda menunggu begitu lama sebelum melakukan ?!)

Juga, jika Anda tahu git, Anda dapat menggunakan git-svn untuk memelihara repo git lokal dan menyinkronkan komit Anda ke server master svn; bekerja sangat baik dalam pengalaman saya yang terbatas.

5
Aeon

Coba VisualSVN untuk Visual Studio . Rilis terbaru 6.1 memperkenalkan fitur QuickCommit. Anda dapat melakukan sebagian perubahan yang dipilih dalam file menggunakan perintah menu konteks Komit Blok dan Komit Pilihan baru dalam editor Visual Studio.

 enter image description here

3
bahrep
  1. Buka semua file yang ingin Anda bagi dalam editor pilihan
  2. Menggunakan set alat yang berbeda (pada Win, gunakan saran Spike (versi lama)) mundur dari set kedua
  3. Melakukan
  4. kembali ke editor pilihan Anda dan simpan semua file

Ini sedikit lebih berisiko daripada saran penuh Spike tetapi bisa lebih mudah dilakukan. Pastikan juga Anda mencobanya pada sesuatu yang lain terlebih dahulu karena beberapa editor akan menolak untuk menyimpan lebih dari satu file yang telah berubah dari bawah kecuali Anda memuat ulang file itu (kehilangan semua perubahan Anda)

2
BCS

Saya pikir pilihan yang lebih mudah daripada menghasilkan file diff, reverting, dll, akan memiliki dua salinan repositori yang sudah diperiksa, dan menggunakan alat diff visual seperti DeltaWalker untuk menyalin bakhil dari satu ke yang lain.

Salinan pertama adalah yang benar-benar Anda kerjakan, dan yang kedua hanya untuk tujuan ini. Setelah Anda membuat banyak perubahan pada bagian pertama, Anda dapat menyalin satu bagian ke bagian kedua, mengkomitnya, menyalin bagian lain, mengkomitnya, dll.

0
Ian Dunn
  1. Salin semua file yang dimodifikasi terkait untuk membuat salinan cadangan.
  2. Buat tambalan status kerja menggunakan svn diff.
  3. Kembalikan file menggunakan svn revert.
  4. Terapkan kembali bagian-bagian tambalan yang ingin Anda komit, baik menggunakan alat patch, atau dengan pengeditan manual, atau apa pun.
  5. Jalankan diff sesudahnya untuk membandingkan copy pekerjaan Anda dengan cadangan Anda untuk memastikan Anda telah menerapkan patch-parts dengan benar.
  6. Bangun dan uji.
  7. Melakukan.
  8. Salin salinan cadangan Anda kembali ke check-out repositori Anda.
  9. Ulangi pada 2. (bukan pada 1.!) Sampai selesai.
0
michaeljt