vimdiff ve çatışmaları birleştir


14

Şubeleri kaynak kontrolü altında birleştirirken, genellikle diğer geliştiricilerle birleşme çatışması söz konusudur.

Kaynak kontrolüne karşı kod değişikliklerini farklılaştırmak için vimdiff kullanabileceğimizi biliyorum , ancak vimdiff'i birleştirme çakışmaları çakışmalarını çözmeye yardımcı olmak için kullanabileceğimiz bir yol da var.

Şahsen git ile daha fazla ilgileniyorum ama diğer kaynak kontrol araçları / sistemleri için eklentiler / teknikler olup olmadığını anlamak yararlı olacaktır.


Hiç Meld'i denedin mi?
Eric Sabelhaus

1
@EricSabelhaus: Çatışmaların çözümünde vimdiff'ten daha mı iyi? Bu site vim hakkında sorular sormak / cevaplamakla ilgilidir.
Martin York

Sanırım kullanım durumuna bağlı. Uzaktan yaşayan kod üzerinde çalışıyorsam, kesinlikle vimdiff kullanacağım. Geliştirici makinemde yerel olarak çalışıyorsam, geliştiriciye karmaşık 3 yönlü birleştirme gerçekleştirmesine yardımcı olmak için zengin özelliklere sahip bir kullanıcı arayüzü sağladığı için Meld kullanacağım.
Eric Sabelhaus

1
@EricSabelhaus: Bana göre terim feature rich UIyanıltıcı; vimdiff hoş bir UI olmayabilir kesinlikle zengin özelliklere sahiptir. Ayrıca vim'i kullandığım tüm GUI editörlerinden çok daha üretken bir ortam buluyorum (ancak bunu uzun süredir kullanıyorum ve dik bir öğrenme eğrisiydi). Meld'in vim tarafından yapılmayan herhangi bir şey yapıp yapmadığını bile bakarken daha değerli buluyorum.
Martin York

Daha sağlam bir özellik setine sahip olup olmadığını özellikle söyleyemem, ancak kesinlikle vimdiff ile aynı alanda.
Eric Sabelhaus

Yanıtlar:


18

Normalde komut satırında git kullanıyorum.

Ama bir birleşme çatışması olduğunda Vim'i bunları çözmek için kullanırım (kişisel olarak kaçak eklentiyle yaparım). Not: kaçak Vim'in içinden git manipülasyonu için iyidir. En sevdiğim özellik bir birleşme çatışmasının 3 yollu farkıdır.

git bunu vimdiff'de git mergetool aracılığıyla destekler. Kaçak yükledim ama manuel olarak ayarlayabilirsiniz (Thanks @Jay Thompson).

Elle kurulum:

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

Çıktı, aşağıda açıklananlardan biraz farklıdır (bunu şahsen kullanmadım). Ancak prensip aynıdır, ancak altta sonucu içeren dördüncü bir pencereniz vardır.

resim açıklamasını buraya girin

Fugitive ile kur

vim-fugitive Vim için bir git sarmalayıcı / entegrasyon eklentisidir; birçok şey yapabilir ve çatışmaları çözmek bunlardan biridir.

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. Görünüm 2 (solda): Şubenizdeki kod.
  2. Görünüm 1 (orta): Birleştirilmiş kod (çakışmalarla)
  3. Görünüm 3 (sağ): Kodunuzla birleştirilen kod.

Artık diğer iki görünümden metinleri merkezi görünüme çekebilir ve alabilirsiniz (bu, tüm manuel düzeltmeleri içerecektir). Tüm çatışmaları manuel olarak çözdükten sonra vimdiff'den çıkın

resim açıklamasını buraya girin

Rağmen kullanabilirsiniz :diffget <view number>ve :diffput <view number>görünümler arasında bir şeyler çekmek ve itmek için. Şahsen bunu çok yararlı bulmuyorum. Tüm kod zaten orta görünümdedir. Bu yüzden, çatışma çözülene kadar bu görünümü manuel olarak düzenlemek istiyorum. Düzenleyici penceremin her iki tarafında da kodun her iki versiyonunu da görmek son derece yararlı.

Ayrıca burada kullanımının çok iyi bir demosu


1
Herhangi bir nedenden dolayı Fugitive'ı kullanmak veya yüklemek istemiyorsanız, vim'i dif modunda başlatmak için de ayarlayıp git config --global merge.tool vimdiffçalıştırabilirsiniz git mergetool.
Jay Thompson

Bu, "birleştirilmiş ortak ataların" gösterildiği birleştirme çakışmaları "diff3" stilini destekliyor mu?
alxndr

@alxndr: diff3'ü daha önce hiç duymamıştım. Ama hızlı bir google sonra. Git'teki (ve kullandığım diğer kaynak denetiminin) bir birleştirme çakışmasının çıktısı a ile aynıdır diff3 -E. Dolayısıyla yukarıdaki resimler, içinde bu işaretleyicilerin bulunduğu dosyalardan oluşturulur.
Martin York

Şimdi yakından baktığım için, ilk ekran görüntüsü birleştirme farkını gösteriyor; orta üst bölme "BASE", sol ve sağ bölmelerin ayrıldığı ortak atadır.
alxndr

1
Bu 4 görünümün her birinin sadece bir tampon olduğunu hatırlamak önemlidir. Bu, başka bir sekme açabileceğiniz (hatta aynı pencerede kalabileceğiniz) ve yalnızca belirli bir anda bakmak istediğiniz arabellekleri seçebileceğiniz anlamına gelir. Eğer hepsini kullanmıyorsanız, 4 pencerenin tümünü aynı anda açık tutmak için hiçbir neden yoktur.
Cody Poll
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.