Saya memiliki cabang fitur dari bagasi saya dan menggabungkan perubahan dari bagasi saya ke cabang saya secara berkala dan semuanya bekerja dengan baik. Hari ini saya pergi untuk menggabungkan cabang kembali ke bagasi dan salah satu file yang ditambahkan ke bagasi saya setelah penciptaan cabang saya ditandai sebagai "konflik pohon". Apakah ada cara untuk menghindari ini di masa depan?
Saya tidak berpikir ini ditandai dengan benar.
svn
merge
tree-conflict
Greg
sumber
sumber
Jawaban:
Saya menemukan solusi membaca tautan yang diberikan Gary (dan saya sarankan untuk mengikuti cara ini).
Meringkas untuk menyelesaikan konflik pohon melakukan direktori kerja Anda dengan klien SVN 1.6.x Anda dapat menggunakan:
di mana
.
direktori dalam konflik.PERINGATAN : "Komit direktori kerja Anda" berarti bahwa struktur kotak pasir Anda akan menjadi yang Anda komit, jadi jika, misalnya, Anda menghapus beberapa file dari kotak pasir Anda, mereka akan dihapus dari repositori juga. Ini hanya berlaku untuk direktori yang konflik.
Dengan cara ini, kami menyarankan SVN untuk menyelesaikan konflik (
--resolve
), menerima copy pekerjaan di dalam kotak pasir Anda (--accept working
), secara rekursif (-R
), mulai dari direktori saat ini (.
).Di TortoiseSVN, memilih "Terselesaikan" pada klik kanan, sebenarnya menyelesaikan masalah ini.
sumber
svn rm'd
direktori yang Anda pikir tidak lagi diperlukan, tetapi orang lain menambahkan file baru yang diperlukan. Ketika Anda memperbarui copy pekerjaan Anda, Anda harus mendapatkan konflik pohon. Jika Anda hanya menerima solusi Anda secara membabi buta (menghapus direktori) maka Anda akan menghapus file orang itu. Tidak ada tombol ajaib "lakukan hal yang benar". Anda harus memahami apa yang sedang Anda lakukan, mengapa itu bertentangan dengan versi terbaru, dan bagaimana cara mengatasinya dengan benar.git
. Karena itu kemungkinan besar bukan pilihan praktis bagi penanya, maka berurusan dengan situasi seperti yang dijabarkan oleh jawaban ini adalah pilihan terbaik.Subversion 1.6 menambahkan Pohon Konflik untuk meliput konflik di tingkat direktori. Contoh yang baik adalah ketika Anda secara lokal menghapus file maka pembaruan mencoba membawa perubahan teks pada file itu. Lain adalah ketika Anda memiliki subversi Ubah nama file yang Anda edit karena itu adalah tindakan Tambah / Hapus.
Blog Subversion CollabNet memiliki artikel hebat tentang Konflik Pohon .
sumber
Dalam pengalaman saya, SVN menciptakan konflik pohon SETIAP AKU menghapus folder. Tampaknya tidak ada alasan.
Saya satu-satunya yang mengerjakan kode saya -> hapus direktori -> komit -> konflik!
Saya tidak sabar untuk beralih ke Git .
Saya harus mengklarifikasi - Saya menggunakan Subclipse . Mungkin itu masalahnya! Sekali lagi, saya tidak sabar untuk beralih ...
sumber
Saya tidak tahu apakah ini terjadi pada Anda, tetapi kadang-kadang saya memilih direktori yang salah untuk digabung dan saya mendapatkan kesalahan ini meskipun semua file tampak benar-benar baik-baik saja.
Contoh:
Gabungkan / svn / Proyek / cabang / beberapa cabang / Sumber ke / svn / Proyek / trunk ---> Konflik pohon
Gabungkan / svn / Proyek / cabang / beberapa cabang ke / svn / Proyek / trunk ---> OK
Ini mungkin kesalahan yang bodoh, tetapi itu tidak selalu jelas karena Anda pikir itu sesuatu yang lebih rumit.
sumber
Apa yang terjadi di sini adalah sebagai berikut: Anda membuat file baru di bagasi Anda, kemudian Anda menggabungkannya ke cabang Anda. Dalam gabungan, file ini juga akan dibuat di cabang Anda.
Ketika Anda menggabungkan cabang Anda kembali ke bagasi, SVN mencoba melakukan hal yang sama lagi: Ia melihat bahwa file dibuat di cabang Anda, dan mencoba membuatnya di bagasi Anda di komit gabungan, tetapi sudah ada! Ini menciptakan konflik pohon.
Cara untuk menghindari ini, adalah dengan melakukan penggabungan khusus, reintegrasi . Anda dapat mencapai ini dengan
--reintegrate
saklar.Anda dapat membaca tentang ini di dokumentasi: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
Setelah mengintegrasikan kembali cabang, sangat disarankan untuk menghapusnya, jika tidak, Anda akan terus mendapatkan treeconflicts setiap kali Anda bergabung ke arah lain: dari batang ke cabang Anda. (Untuk alasan yang persis sama seperti yang dijelaskan sebelumnya.)
Ada cara untuk mengatasi hal ini, tetapi saya tidak pernah mencobanya. Anda dapat membacanya di posting ini: Reintegrasi cabang subversi di v1.6
sumber
--reintegrate
pilihan telah ditinggalkan dalam Subversion 1.8. Dimulai dengan SVN 1.8 penggabungan semacam itu otomatis!Ini dapat disebabkan oleh tidak menggunakan klien versi yang sama di seluruh.
Menggunakan klien versi 1.5 dan klien versi 1.6 menuju repositori yang sama dapat menciptakan masalah semacam ini. (Aku hanya digigit sendiri.)
sumber
Jika Anda menemukan konflik pohon yang tidak masuk akal karena Anda tidak mengedit / menghapus / mendekati file, ada juga kemungkinan besar bahwa ada kesalahan dalam perintah penggabungan.
Apa yang bisa terjadi adalah Anda sebelumnya sudah menggabungkan banyak perubahan yang Anda sertakan dalam penggabungan saat ini. Misalnya, di trunk seseorang mengedit file, dan kemudian mengganti namanya. Jika dalam gabungan pertama Anda menyertakan sunting, dan kemudian dalam gabungan kedua sertakan sunting dan ganti nama (pada dasarnya menghapus), itu juga akan memberi Anda konflik pohon. Alasan untuk ini adalah bahwa edit yang sebelumnya digabungkan kemudian muncul sebagai milik Anda, dan karenanya penghapusan tidak akan dilakukan secara otomatis.
Ini bisa terjadi pada 1,4 repositori setidaknya, saya tidak yakin apakah mergetracking yang diperkenalkan pada 1.5 membantu di sini.
sumber
Hingga hari ini, setidaknya sejak 3 bulan yang lalu, saya secara teratur menemui ratusan konflik pohon ketika mencoba untuk menggabungkan cabang kembali ke batang (menggunakan TortoiseSVN 1.11 ). Apakah rebased atau tidak, BTW. Saya telah menggunakan TortoiseSVN sejak v1, kembali pada tahun 2004, dan saya biasa mengintegrasikan kembali cabang sepanjang waktu. Pasti ada sesuatu yang terjadi baru-baru ini?
Jadi hari ini saya menjalankan eksperimen sederhana ini, dan saya menemukan apa yang menciptakan konflik gila ini:
Diskusi: (lihat lampiran)
semua revisi ... apa? Sedikit yang saya tahu bahwa klien pasti merujuk pada " semua revisi target! (Trunk)", seperti, dalam proses reintegrasi cabang itu, saya melihat menyebutkan "Menggabungkan revisi 1-KEPALA"! OH TUHAN. Iblis yang malang, Anda jatuh ke kematian Anda di sini. Cabang itu lahir @ 393, tidak bisakah Anda membaca akta kelahirannya, demi Tuhan?
Resolusi:
Moral: Saya tidak dapat memahami mengapa mereka masih belum memperbaiki bug itu, karena bug itu salah, saya minta maaf. Saya harus meluangkan waktu untuk melaporkan ini dengan mereka.
sumber
Saya menemukan masalah ini hari ini juga, meskipun masalah khusus saya mungkin tidak terkait dengan masalah Anda. Setelah memeriksa daftar file, saya menyadari apa yang telah saya lakukan - saya sementara menggunakan file dalam satu rakitan dari rakitan lain. Saya telah membuat banyak perubahan dan tidak ingin menjadi yatim sejarah SVN, jadi di cabang saya, saya telah memindahkan file dari folder majelis lain. Ini tidak dilacak oleh SVN, jadi sepertinya file tersebut dihapus dan kemudian ditambahkan kembali. Ini akhirnya menyebabkan konflik pohon.
Saya menyelesaikan masalah dengan memindahkan file kembali, melakukan, dan kemudian menggabungkan cabang saya. Kemudian saya memindahkan file itu kembali sesudahnya. :) Sepertinya ini akan berhasil.
sumber
Saya punya masalah serupa. Satu-satunya hal yang benar-benar berfungsi untuk saya adalah menghapus subdirektori yang konflik dengan:
Kemudian salin lagi dari direktori root lain di copy pekerjaan yang memilikinya:
Lalu lakukan
dan
Anda mungkin mendapatkan peringatan dengan yang terakhir, tetapi abaikan saja dan akhirnya
sumber
Saya memiliki masalah yang sama, dan menyelesaikannya dengan melakukan penggabungan ulang menggunakan instruksi ini . Pada dasarnya, ini menggunakan "2-URL penggabungan" SVN untuk memperbarui
trunk
ke keadaan cabang Anda saat ini, tanpa terlalu peduli tentang sejarah dan konflik pohon. Menyelamatkan saya dari memperbaiki secara manual 114 pohon konflik.Saya tidak yakin apakah itu melestarikan sejarah seperti yang diinginkan, tetapi itu layak untuk saya.
sumber
Skenario yang terkadang saya temui:
Asumsikan Anda memiliki bagasi, dari mana Anda membuat cabang rilis. Setelah beberapa perubahan pada trunk (khususnya membuat direktori "some-dir"), Anda membuat cabang fitur / fix yang kemudian Anda inginkan juga bergabung ke dalam cabang rilis (karena perubahannya cukup kecil dan fitur / perbaikan penting untuk rilis) .
Jika Anda kemudian mencoba untuk menggabungkan cabang fitur / perbaiki langsung ke cabang rilis Anda akan mendapatkan konflik pohon (meskipun direktori bahkan tidak ada di cabang fitur / perbaiki):
Jadi, Anda perlu secara eksplisit menggabungkan komit yang dilakukan pada trunk sebelum membuat cabang fitur / fix yang membuat direktori "some-dir" sebelum menggabungkan cabang fitur / perbaiki.
Saya sering lupa bahwa itu tidak perlu di git.
sumber