Soru Git mergetool neden vimdiff'te 4 pencere açar? (Beklerim 3)


Bir çatışmayla karşılaştığımda, kullanmaya çalıştım git-mergetool çözmek için. Yazdım:

>git mergetool -t vimdiff

Açıldı vimdiff 4-yollu, 3-yollu değil. Vimdiff'teki split pencerelerim şöyle görünür:

:ls
  1 #a   "Gemfile.lock"                 line 1
  2 %a   "Gemfile.lock.LOCAL.4828.lock" line 1
  3  a   "Gemfile.lock.BASE.4828.lock"  line 0
  4  a   "Gemfile.lock.REMOTE.4828.lock" line 0

Onlar neler? 3 yönlü bir fark istiyorum: hedef dosya, birleştirme dosyası ve çalışma dosyası. Git veya vimdiff'i nasıl yapılandırmalıyım?


25
2017-09-05 14:53


Menşei


Hiç kimse bunu size göstermiş gibi görünmüyor: Eğer birleştirme sonucu penceresinin gösterilmesini istiyorsanız, 3 yollu bir farkı gerçekleştirmek için dört pencereye ihtiyacınız var. Başka bir deyişle, BASE, LOCAL ve REMOTE (3 pencere) arasında bir fark ve ortaya çıkan birleştirme (4. pencere) düzenleme olanağı elde edersiniz. - Magnus


Cevaplar:


Alternatif olarak, kullanmayı düşündünüz mü? firari?

Sana yalan söylemeyeceğim; fugitive.vim çok iyi olabilir   Tüm zamanların Git sarmalayıcısı.

Mükemmel bir vimcast var, Fugitive.vim - vimdiff ile birleştirme çakışmaları çözmeDrew Neil tarafından. Bu kaçak bir dizi bir parçası.

Vimcasts web sitesi vim hakkında daha fazla bilgi edinmek için iyi bir yerdir.

Kaçıncıyı mergetool olarak kullanmak için aşağıdakileri kullanabilirsiniz.

git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive

Not: değiştirmek isteyebilirsiniz vim için mvim veya gvim.

Fugitive, birleştirme aracı betiği olmaktan çok daha fazlasını sunar, bu yüzden belgeleri okuduğunuzdan ve / veya vimcast'leri kontrol ettiğinizden emin olun.


32
2017-09-06 00:46



İle kullanabilir miyim git-mergetool?? Çakışma dosyasını açmamı ve çağırmamı söylüyor. :Gdiff. - Lai Yu-Hsuan
@Lai Yu-Hsuan: Bazı mergetool yapılandırma seçeneklerini eklemek için gönderimi düzenledim - Peter Rincker
Harika. Sorumu en iyi şekilde çözdüm. - Lai Yu-Hsuan
Belki bu benim için BeyondCompare ihtiyacını ortadan kaldırır, teşekkürler - dashesy


Vimdiff ve sadece 3 pencere ile mergetool ihraç için çok araştırma sonra, ben 3 pencere veya varsayılan 4 pencere istediğimde seçmeme izin bu yapılandırma ile geldi:

git config --global merge.tool vimdiff
git config --global alias.mt mergetool

git config --global mergetool.merge3.cmd 'vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
git config --global alias.m3 'mergetool -t merge3'

Şimdi sadece yazarak 3 pencere başlayabilirsiniz:

git m3

Ve varsayılan (4 pencere) hala beklendiği gibi çalışır:

git mt

Ayrıca, muhtemelen bu satırları sonuna eklemek istersiniz. ~/.vimrc veya /etc/vim/vimrc

 " shortcuts to vimdiff
 let mapleader=','
 let g:mapleader=','

 if &diff
    map <leader>1 :diffget LOCAL<CR>
    map <leader>2 :diffget BASE<CR>
    map <leader>3 :diffget REMOTE<CR>
 endif

Bu gibi kısayollar oluşturacak ,1 soldan almak, ,3 sağdan (her iki modda) ve ayrıca ,2 4 pencere modunda tabandan (orta pencere) almak için.

Bu çok yardımcı olur!

Benim ~/.gitconfig dosya böyle görünüyor:

[user]
        name = Dr Beco
        email = my@email
[merge]
        tool = vimdiff
[mergetool "merge3"]
        cmd = vim -d -c \"wincmd l\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"
[alias]
        lo = log --pretty=format:\"%h %ce %cd %s\" --graph
        co = checkout
        ci = commit
        cm = commit -a -m
        st = status
        br = branch
        m3 = mergetool -t merge3
        mt = mergetool
[diff]
        tool = vimdiff

Umarım bu size yardımcı olur (ve buraya gelenler).


9
2017-11-05 01:42





Komutları biraz değiştirerek bu sayfa:

git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
  • 'Birleştirilmiş' çalışma kopyanız olurdu.
  • "Yerel" daldaki dosyada değişiklik yapmaya çalışıyorsunuz
  • Dosyayı birleştirmeye çalıştığınız daldan 'Uzak'.

Ve sonra şu komutu çalıştırırsın: git mergetool.

Not: Kullanırım firari ayrıca ve kesinlikle tavsiye ederim.


5
2017-09-06 14:43





Kaçak tavsiyeye geçeceğim.

Ayrıca deneyebilirsiniz splice.vim. Git veya mercurial bir mergetool drop-in yerine geçmek üzere tasarlanmış bir Vim eklentisi. Çatışmanın çeşitli görünümlerini kolayca karıştırmanızı sağlar. Ayrıca çok hızlı, basit ve daha sezgisel birleştirme yapmak için iyi bir iş. İşte bir screencast.

Listelediğiniz dosyalar:

  1. Çakışmayı içeren yerel dosya.
  2. Birleştiğiniz daldaki dosya.
  3. Birleştirdiğiniz şubedeki dosya.
  4. Dosya hem şube acesestor düğümünde olduğu gibi. Bu dosya ne olup bittiğini anlamak için çok yararlı!

Bu yardımcı olur umarım.


4
2017-09-06 08:34



Üçlü şimdi splice.vim olarak adlandırılıyor - lkraav


Not: açıklandığı gibi sadece 3 Windows kullanabilirsiniz Dr Beco'ler Cevap
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'),
4-pencere modu git 2.8 ile geliştirilmiştir (Mart 2016)

Görmek 2300328 işlemek (29 Ocak 2016) tarafından Dickson Wongdiwo).
(Birleştirilmiş Junio ​​C Hamano - gitster - içinde 82c17b7 işlemek, 17 Şub 2016) 

vimdiff "için arka uçgit mergetool"düzenlemek için ayarlandı   ve beklenti ile eşleşecek sıradaki tamponlar   soldan sağa okuyanların büyük çoğunluğu, ardından aşağıya ve atama   Tamponlar 1 2 3 4 "Zihinsel" yerel baz uzaktan birleştirme windows tabanlı   bu sırayla.

Dahili olarak git şimdi kullanacak:

"$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
            "$LOCAL" "$BASE" "$REMOTE" "$MERGED"

yerine:

"$merge_tool_path" -f -d -c 'wincmd J' \
        "$MERGED" "$LOCAL" "$BASE" "$REMOTE"

mergetool: Üç yollu farklarda vim / gvim tamponlarını yeniden sırala

Varsayılanı çağırırken (g)vimdiff üç yönlü birleştirme, birleştirilmiş dosya   İlk arabellek olarak yüklendi ancak dördüncü pencere olarak tabana taşındı.
  Bu bir kopukluğa neden olur vim pencerede çalışan komutlar   pozisyonlar (ör. CTRL-W_w) ve tampon indeksinde çalışanlar (ör. yap/dp).

Bu değişiklik, arabellekleri pencerelerle aynı dizine sahip olacak şekilde yeniden sıralar.   imleci varsayılan olarak alt pencere olarak birleştirilmiş sonuca tutmak.


4
2018-02-18 13:02