Ketika datang ke penggabungan, setiap versi kontrol memiliki mesin untuk melakukannya. Konflik tidak dapat dihindari tetapi pertanyaannya adalah - kontrol revisi mana yang memiliki AI terbaik untuk menghindari konflik.
Apakah mungkin mengukur hal seperti itu?
Lebih khusus lagi, kami berpikir untuk pindah ke GIT karena memiliki sensasi dan rumor yang bagus yang menangani konflik dengan lebih baik ...
Setiap komentar dihargai ...
version-control
confiq
sumber
sumber
Jawaban:
Saya kira ini bukan pertanyaan yang tepat untuk ditanyakan.
Masalahnya adalah ada banyak kasus sudut, dan algoritma "pintar" untuk menggabungkan dapat menipu diri mereka sendiri dengan berpikir bahwa mereka telah melakukan penggabungan dengan benar padahal sebenarnya mereka telah benar-benar mengambil kode Anda. Jika Anda beruntung, penggabungan yang buruk menyebabkan kegagalan waktu kompilasi. Jika Anda tidak beruntung, itu mungkin memperkenalkan bug halus yang membutuhkan waktu lama untuk dilacak.
Git menggunakan algoritma penggabungan yang cukup mudah dan mengangkat tangannya dan meminta bantuan jika tidak dapat melakukan penggabungan. Menurut pendapat saya, ini persis apa yang Anda ingin sistem kontrol versi Anda lakukan. Jumlah kesedihan yang Anda hindarkan dengan ini sepadan dengan waktu yang Anda perlukan untuk memperbaiki konflik secara manual. (Juga, jika ada konflik dalam penggabungan, git mencantumkan file yang konflik dalam pesan komit yang dibuat secara otomatis untuk Anda - ini adalah hal yang sangat berguna untuk menemukan kesalahan saat Anda membuka riwayat kode Anda.)
sumber
Telah dikatakan bahwa algoritma terbaik adalah aljabar tambalan Darcs . Codeville juga memiliki algoritma yang menarik dalam pengembangan.
Namun, untuk semua alasan praktis, alat apa pun yang menggunakan penggabungan tiga arah akan dilakukan. Ini termasuk git (dengan varian), lincah, bazaar, dan banyak alat eksternal (pengecualian penting: opendiff dan kaleidoskop di Mac), jadi dengan probabilitas yang baik Anda sudah menggunakan opsi terbaik; seperti dicatat oleh @Peter, ada kasus di mana tidak ada algoritma yang dapat membantu Anda.
sumber
Saya menggunakan git dan lincah tetapi pertanyaan Anda ingat saya teori patch darcs. Anda akan membaca pekerjaan rumah untuk akhir pekan ini.
PD: Jangan tanya saya tentang teori tambalan, ini sangat kompleks untuk saya :)
sumber
Itu disebut Kontrol Revisi Manusia. (Human Merging Engine)
Kami menggunakan Seapine Surround dan sebagian besar melakukan penggabungan dengan baik, tetapi satu-satunya cara untuk memperbaiki konflik gabungan yang tidak dapat dilakukan kontrol sumber adalah melalui intervensi manusia.
Jadi, saran saya adalah:
Cobalah untuk bergabung dengan cepat. Satu mimpi buruk adalah memiliki cabang yang tidak bergabung kembali dengan jalur utama selama hampir 2 tahun. Ketika digabung, banyak konflik yang perlu diselesaikan. Satu pengembang mendapat julukan "master gabungan" setelah menghabiskan banyak waktu memperbaiki masalah penggabungan.
Berhati-hatilah dengan kode yang dibuat secara otomatis dari penyihir dll. Kadang-kadang ini bisa menyebalkan, terutama jika dua cabang di-autogenerasikan secara otomatis pada file yang sama.
Cobalah untuk mengontrol pengembangan. Jika pengembang A merobek file kode X dan Y, tidak masuk akal bagi pengembang B untuk bekerja pada X dan Y di cabang yang berbeda. Bagian dari manajemen gabungan adalah untuk mencoba dan mengendalikan apa yang sedang dimodifikasi untuk menghindari potensi konflik gabungan.
Ini bukan untuk mengatakan bahwa 2 pengembang tidak dapat bekerja pada file yang sama di 2 cabang yang berbeda. Jika 1 pengembang menambahkan metode A dan yang lain menambahkan metode B, maka penggabungan harus terjadi tanpa rasa sakit.
Pada akhirnya akan selalu ada beberapa konflik yang membutuhkan intervensi manusia. Dengan menjaga mereka ke minimum Anda akan memiliki hasil penggabungan terbaik.
sumber
Mesin penggabungan sempurna akan memahami semantik file yang sedang digabungkan: sehingga mem-parsing dan memahami kode sumber. Saya belum melihat kontrol mesin / versi gabungan seperti ...
Sebagian besar alat menggabungkan file sebagai teks. Jadi saya tidak akan pernah mengandalkan mereka secara membabi buta, itu selalu ide yang baik untuk meninjau perubahan sebelum melakukan itu ke cabang Anda.
Kami menggunakan Perforce, yang tidak bergabung secara otomatis. Setiap kali file sumber berubah relatif terhadap basis umum, itu akan mengatakan file target perlu diselesaikan bahkan jika tidak ada konflik. Jadi saya membuka alat penggabungan hanya untuk dengan cepat langkah berpikir bakhil untuk memeriksa apakah mereka cocok (dan mendapatkan gambaran kasar apa yang dilakukan rekan-rekan lain), paling sering mereka akan cocok dan menerima hasilnya.
Saya juga berlangganan notifikasi perubahan dari arus utama sehingga saya menggabungkan perubahan ke cabang saya sedini mungkin sehingga saya dapat menghindari masalah di kemudian hari.
sumber
Erm ...
Saat menggunakan mercurial (dan git juga, saya cukup yakin) Anda memilih mesin gabung Anda, secara default itu kdiff3 tetapi Anda dapat menggunakan apa pun yang Anda suka (di luar perbandingan, p4merge dll.).
AFAIK mesin gabungan dan VCS sering kali benar-benar terpisah , seperti kompiler dan editor teks Anda. Ambil XML vs kode misalnya, Anda akan ingin hal-hal yang berbeda untuk menggabungkan mereka, mereka tidak berfungsi dengan cara yang sama sehingga tidak dapat digabungkan dengan cara yang sama.
Jika Anda mengganti kontrol versi karena Anda memerlukan alat penggabungan yang lebih baik untuk melakukannya karena alasan yang salah, Anda hanya perlu mengganti kontrol versi ketika yang Anda gunakan sekarang tidak sesuai dengan proses Anda dengan baik (atau yang lain akan memungkinkan Anda menggunakan proses yang lebih baik).
sumber
Seberapa baik VCS menangani konflik dalam file ada dalam pikiran saya agak berlebihan. Untuk satu hal, cara terbaik untuk menangani konflik seperti itu adalah tidak memilikinya. Memfaktorkan perangkat lunak Anda dengan baik dan membagi tugas dengan yang diperkirakan akan sangat mengurangi konflik dalam sekelompok file (apalagi dalam file). Lakukan pekerjaan yang buruk seperti melempar di satu kelas dewa terlalu banyak, atau file konfigurasi umum yang harus digunakan setiap orang dan semua orang ingin bercampur dengan dan Anda meminta konflik tingkat file.
Untuk yang lain, mereka semua menggunakan algoritma yang hampir sama (buruk). Contoh: Rilis alpha dari proyek kami mengalami kebocoran memori minor. Itu lebih dari tetesan daripada kebocoran, dan kebocoran berhenti pada akhir waktu inisialisasi. Layak untuk diperbaiki, tidak layak untuk perbaikan. Salah satu pelanggan kami "memperbaiki" masalah, menempatkan yang gratis di tempat yang salah. Masalahnya diperbaiki pada rilis berikutnya. Pelanggan ini menggabungkan rilis baru daripada melakukan penggantian lengkap (WTF?). Tidak ada konflik dalam penggabungan tiga arah; panggilan untuk bebas terisolasi satu sama lain. Jadi sekarang perangkat lunak menjatuhkan inti karena bebas ganda.
Apa yang dilewatkan dalam diskusi adalah seberapa sulit / memakan waktu / rawan kesalahan untuk menggabungkan pekerjaan Anda kembali ke jalur utama perangkat lunak.
Di svn, kamu
Itu adalah langkah non-atom yang jauh, terlalu banyak tempat di mana kesalahan dapat terjadi (konflik pohon tidak menyenangkan), dan itu membutuhkan terlalu banyak waktu. Saya telah melihat banyak proyek yang menyerah menggunakan cabang dengan subversi berkat proses penggabungan yang begitu memakan waktu dan rawan kesalahan. Saya telah melihat lebih banyak proyek beralih dari subversi sama sekali sebagian besar karena ini.
sumber
Ada test suite kecil yang disebut merge-ini yang membandingkan sistem kontrol revisi terhadap skenario penggabungan dunia nyata. Untuk setiap skenario, itu memastikan VCS dapat melakukan hal berikut dengan benar:
Berdasarkan jumlah uji kelulusan pada penggabungan-ini, tampak bahwa ada dua tingkatan kinerja:
Bergantung pada bahasa pemrograman mana yang Anda coba gabungkan, hasil pengujian yang tepat mungkin penting. Lihat situs web proyek untuk tabel perbandingan terperinci.
sumber
Saya telah menggunakan IBM / Rational ClearCase dan penggabungan multi-cabang sangat mengagumkan. Menjalankan cincin di sekitar subversi. (Tidak ada pengalaman Git atau lincah.)
sumber