vimdiff dan menggabungkan konflik

14

Saat menggabungkan cabang di bawah kendali sumber, sering kali ada masalah konflik gabungan dengan pengembang lain.

Saya tahu bahwa kita bisa menggunakan vimdiff untuk mengubah kode perubahan terhadap kontrol sumber , tetapi adakah juga cara kita bisa menggunakan vimdiff untuk membantu menyelesaikan konflik konflik gabungan.

Secara pribadi saya lebih tertarik pada git tetapi akan berguna untuk memahami jika ada plugin / teknik untuk alat / sistem kontrol sumber lainnya.

Martin York
sumber
Apakah Anda pernah mencoba Meld ?
Eric Sabelhaus
1
@EricSabelhaus: Apakah lebih baik daripada vimdiff dalam menyelesaikan konflik? Situs ini tentang menanyakan / menjawab pertanyaan tentang vim.
Martin York
Tergantung pada use case yang saya kira. Jika saya bekerja pada kode yang hidup dari jarak jauh, saya pasti akan menggunakan vimdiff. Jika saya bekerja secara lokal pada mesin dev saya, saya akan menggunakan Meld, karena ia menyediakan UI kaya fitur untuk membantu pengembang dalam melakukan penggabungan 3 cara yang kompleks.
Eric Sabelhaus
1
@EricSabelhaus: Bagi saya istilah feature rich UIini menyesatkan; vimdiff mungkin tidak memiliki UI yang bagus, itu pasti kaya fitur. Saya juga menemukan lingkungan yang jauh lebih produktif dari semua editor GUI yang telah saya gunakan (tapi saya sudah menggunakannya untuk waktu yang lama dan itu adalah kurva pembelajaran yang curam). Saya lebih ingin tahu apakah Meld melakukan sesuatu yang tidak dilakukan vim yang akan membuatnya berharga bahkan ketika melihat.
Martin York
Saya tidak bisa secara spesifik mengatakan apakah ia memiliki set fitur yang lebih kuat, tetapi sudah pasti di ranah yang sama dengan vimdiff.
Eric Sabelhaus

Jawaban:

18

Saya biasanya menggunakan git di baris perintah.

Tetapi ketika ada konflik gabungan saya menggunakan Vim untuk menyelesaikannya (secara pribadi saya melakukannya dengan plugin buron). Catatan: buron bagus untuk banyak manipulasi git dari dalam Vim. Fitur favorit saya adalah perbedaan 3 arah dari konflik gabungan.

git mendukung ini di vimdiff via git mergetool. Saya telah menginstal buron tetapi Anda dapat mengaturnya secara manual (Terima kasih @ Jay Thompson).

Pengaturan Manual:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

Outputnya sedikit berbeda dengan yang dijelaskan di bawah ini (saya belum menggunakan ini secara pribadi). Tetapi prinsipnya sama tetapi Anda memiliki jendela keempat di bagian bawah yang berisi hasilnya.

masukkan deskripsi gambar di sini

Diatur dengan Buronan

vim-fugitive adalah plugin git wrapper / integrasi untuk Vim; ia dapat melakukan banyak hal, dan menyelesaikan konflik adalah salah satunya.

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. Lihat 2 (kiri): Kode yang ada di cabang Anda.
  2. Lihat 1 (tengah): Kode yang digabungkan (dengan konflik)
  3. Lihat 3 (kanan): Kode yang digabungkan ke dalam kode Anda.

Anda sekarang dapat menarik dan mendapatkan teks dari dua tampilan lainnya ke tampilan tengah (yang akan berisi semua perbaikan manual). Setelah Anda menyelesaikan semua konflik secara manual cukup keluar dari vimdiff

masukkan deskripsi gambar di sini

Meskipun Anda dapat menggunakan :diffget <view number>dan :diffput <view number>untuk menarik dan mendorong hal-hal di antara tampilan. Saya pribadi tidak menemukan itu sangat berguna. Semua kode sudah ada di tampilan tengah. Jadi saya hanya ingin mengedit tampilan itu secara manual hingga konflik diselesaikan. Mampu melihat kedua versi kode di kedua sisi jendela editor saya sangat berguna.

Juga demo yang sangat bagus tentang penggunaannya di sini

Martin York
sumber
1
Jika Anda tidak ingin menggunakan atau menginstal Fugitive karena suatu alasan, Anda juga dapat dengan mudah mengatur git config --global merge.tool vimdiffdan kemudian menjalankan git mergetooluntuk memulai vim dalam mode diff.
Jay Thompson
Apakah ini mendukung gaya "dif3" konflik penggabungan, di mana "leluhur bersama digabungkan" ditampilkan?
alxndr
@alxndr: Saya belum pernah mendengar tentang diff3 sebelumnya. Tapi setelah cepat google. Output dari konflik gabungan di git (dan kontrol sumber lain yang telah saya gunakan) adalah sama dengan a diff3 -E. Jadi gambar di atas dihasilkan dari file yang memiliki penanda ini di dalamnya.
Martin York
Sekarang setelah saya perhatikan lebih dekat, tangkapan layar pertama menunjukkan gaya penggabungan dif3; panel atas tengah "BASE" adalah nenek moyang yang sama, dari mana panel kiri dan kanan menyimpang.
alxndr
1
Penting untuk diingat bahwa masing-masing dari 4 tampilan ini hanyalah buffer. Ini berarti Anda dapat membuka tab lain (atau bahkan tetap di jendela yang sama) dan hanya memilih buffer yang ingin Anda lihat pada saat tertentu. Tidak ada alasan untuk tetap membuka semua 4 jendela sekaligus jika Anda tidak menggunakan semuanya.
Polling Cody