Menggunakan TortoiseSVN bagaimana cara menggabungkan perubahan dari trunk ke cabang dan sebaliknya?

132

Saya telah membaca tentang percabangan / penggabungan dengan Subversion 1.5 menggunakan Kontrol Versi yang sangat baik dan gratis dengan buku Subversion . Saya pikir saya mengerti bagaimana menggunakan klien baris perintah Subversion untuk melakukan tindakan yang paling saya butuhkan, yaitu:

Perbarui Cabang dengan Perubahan dari Batang

Dari jalankan direktori kerja cabang:

svn menggabungkan http://svn.myurl.com/proj/trunk

Gabungkan Cabang menjadi Batang

Dari jalankan direktori kerja trunk:

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

Namun, kami menggunakan TortoiseSVN 1.5 sebagai antarmuka kami untuk Subversion. Saya ingin tahu cara terbaik untuk melakukan operasi ini dengan TortoiseSVN. Dialog baru menyediakan tiga opsi berbeda pada menu utama.

  1. Gabungkan berbagai revisi
  2. Reintegrasikan cabang
  3. Gabungkan dua pohon yang berbeda

Dari apa yang saya dapat kumpulkan, TortoiseSVN selalu mengeksekusi svn dengan sintaks berikut.

svn merge [--dry-run] - memaksa From_URL @ revN To_URL @ revM PATH

Selain itu, mengintegrasikan kembali cabang sering gagal dengan pesan yang menyatakan bahwa beberapa target belum digabungkan sehingga tidak dapat melanjutkan, dan jadi saya harus menggunakan opsi # 3.

Pertanyaan saya adalah:

  1. Bagaimana cara menggunakan TortoiseSVN 1.5 untuk menggabungkan perubahan dari trunk ke cabang?
  2. Bagaimana cara menggunakan TortoiseSVN 1.5 untuk menggabungkan cabang ke trunk, dengan dan tanpa metode reintegrate?
  3. Manakah dari opsi di atas yang harus saya gunakan untuk masing-masing, dan mengapa?

EDIT

Melalui pengujian "dry run" saya telah menemukan bahwa operasi perintah baris Subversion

svn menggabungkan http://svn.myurl.com/proj/trunk

analog dengan opsi # 1 (Gabungkan Berbagai Revisi) di TortoiseSVN, selama saya membiarkan rentang revisi kosong.

Ryan Taylor
sumber
Tautan tidak ditemukan! = /
Leonardo Costa

Jawaban:

28

Perilaku ini tergantung pada versi repositori Anda. Subversion 1.5 memungkinkan 4 jenis penggabungan:

  1. menggabungkan sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. gabungkan sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. menggabungkan [-c M [, N ...] | -r N: M ...] SOURCE [@REV] [WCPATH]
  4. menggabungkan --reintegrate SOURCE [@REV] [WCPATH]

Subversi sebelum 1,5 hanya memungkinkan 2 format pertama.

Secara teknis Anda dapat melakukan semua penggabungan dengan dua metode pertama, tetapi dua penggabungan terakhir memungkinkan pelacakan penggabungan subversion 1.5.

Opsi TortoiseSVN menggabungkan rentang atau revisi peta ke metode 3 saat repositori Anda berumur 1,5+ atau ke metode satu saat repositori Anda lebih tua.

Saat menggabungkan fitur ke cabang rilis / pemeliharaan, Anda harus menggunakan perintah 'Gabungkan berbagai revisi'.

Hanya ketika Anda ingin menggabungkan semua fitur cabang kembali ke cabang induk (biasanya trunk) Anda harus melihat menggunakan 'Reintegrate a branch'.

Dan perintah terakhir -Merge dua pohon yang berbeda- hanya berguna ketika Anda ingin melangkah keluar dari perilaku percabangan normal. (Misalnya, Membandingkan rilis yang berbeda dan kemudian menggabungkan perbedaan ke cabang lain)

Bert Huijben
sumber
dapat seseorang tolong bantu saya dengan stackoverflow.com/questions/51657636/… . Ini adalah pertanyaan penting bagi tim kami, kami membutuhkan beberapa ide di sekitarnya.
ankur
249

Saya tidak bisa mengikuti jawaban lain dengan benar, berikut ini lebih banyak panduan boneka ...

Anda dapat melakukan ini dengan cara apa pun untuk pergi trunk -> branchatau branch -> trunk. Saya selalu trunk -> branchmemperbaiki konflik di sana dan kemudian bergabung branch -> trunk.

Gabungkan trunk menjadi cabang / tag

  1. Periksa cabang / tag
  2. Klik kanan pada akar cabang | Kura-kura SVN | Menggabungkan ...
  3. Jenis Penggabungan: Menggabungkan berbagai revisi | Klik 'Selanjutnya' masukkan deskripsi gambar di sini
  4. Gabungkan rentang revisi: Pilih URL direktori trunk yang Anda salin ke cabang / tag. Masukkan revisi untuk digabung atau biarkan bidang kosong untuk menggabungkan semua revisi | klik 'Selanjutnya' masukkan deskripsi gambar di sini
  5. Opsi gabung: Saya baru saja meninggalkan ini sebagai default | klik 'Gabung' masukkan deskripsi gambar di sini
  6. Ini akan menggabungkan revisi ke cabang / tag yang diperiksa
  7. Kemudian komit perubahan yang digabungkan ke cabang / tag
icc97
sumber
4
Saya meninggalkan "Rentang revisi untuk menggabungkan" dan melakukan "Gabung Uji". Itu yang saya butuhkan: kisaran secara otomatis ditetapkan untuk saya (dari saat cabang dilakukan hingga revisi terakhir di cabang)
Lian
Jawaban yang bagus - ringkas dan mudah diikuti. Itu bekerja untuk saya, tetapi ketika saya hanya ingin menggabungkan satu file konfigurasi, untuk beberapa alasan saya harus melakukannya dua kali. Semuanya baik sekarang. Cheers
Winger
@Lian Saya melakukan hal yang sama untuk menggabungkan dari trunk menjadi cabang; biarkan rentang revisi kosong jika Anda ingin versi terbaru file dari trunk untuk digabung dengan file cabang.
Pemain sayap
2
Versi Tortoise SVN saat ini sekarang memiliki opsi untuk menggabungkan semua revisi alih-alih membiarkan rentang Revisi kosong di langkah 4.
The Unknown Dev
1
@Onkar Beberapa konflik hampir selalu terjadi. Jika Anda memiliki dua cabang, mis trunkdan branch, maka pastikan bahwa Anda menggabungkan perubahan dari trunkmenjadi branchsesegera mungkin akan menghindari konflik sebanyak mungkin. Ini berarti bahwa ketika Anda bergabung branchke trunksana seharusnya tidak ada konflik.
icc97
1

Lihatlah svnmerge.py . Ini adalah command-line, tidak dapat dipanggil oleh TortoiseSVN, tetapi lebih kuat. Dari FAQ :

Subversi tradisional akan membiarkan Anda menggabungkan perubahan, tetapi itu tidak "mengingat" apa yang sudah Anda gabungkan. Itu juga tidak menyediakan cara yang nyaman untuk mengecualikan set perubahan agar tidak digabungkan. svnmerge.py mengotomatiskan beberapa pekerjaan, dan menyederhanakannya. Svnmerge juga membuat pesan komit dengan pesan log dari semua hal yang digabungkan.

Liudvikas Bukys
sumber
6
svnmerge.py dikembangkan pada Subversion 1.4 dan sebelumnya. Subversion 1.5 memperkenalkan pelacakan gabungan pada produk inti.
Bert Huijben
0

Shift-Klik kanan pada folder dan pilih TortoiseSVN -> Gabungkan Semua

Denis
sumber