Vimdiff ile tüm "git diffs" görüntüleniyor


209

Ben git diffvimdiff sarmak için kurulum, " Git Diff Vimdiff ile " bir kılavuz olarak kullanarak ve değişiklik çok dosya olmadığı sürece beklendiği gibi çalışıyor.

Değişikliklere sahip birden fazla dosya olduğunda ve çalıştırdığımda git diff, ilk dosyayı açar ve vimdiff'in ilk örneğinden çıktıktan sonra aşağıdaki mesajla karşılaşırım:

external diff died, stopping at filename

Bu alıştığımdan tamamen farklı bir davranış. Geçmişte SVN ile benzer bir kurulum yaptım ve birden fazla dosyaya göre farklılaştığında, ilk dosyayı inceleyip sonra yazmayı ve kullanmayı bıraktım :wqve farklılıkları olan bir sonraki dosya açılacaktı.

Git için durum böyle değil. Denedim :n[ext], ancak bunu yaptığınızda sol pencereyi orijinal dosya ile doldurmaz, böylece değiştirilmiş sürüme göre farklılık gösterebilir.

Yanıtlar:


337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

Yazma git d, beklenen davranışı verir, değişiklik :wqkümesindeki bir sonraki dosyaya vim döngüleri yazarak .


22
Sadece iki sentim: dfTakma ad verdim diffve dttakma ad verdim difftool. Ayrıca, :qaVim yazdığınızda hiçbir şey kaydetmeden bir sonraki değişiklik kümesine geçilir.
JC Yamokoski

2
Bu çözüm, değişiklikleri kaydederken ": w!" yerine: w
Asenar

2
@jonyamo Diğer ad ayarlama, her zaman bazı komutları ne sıklıkta kullandığımıza bağlı olmalıdır. Sık sık kullanıyorum git diffdaha git difftool. Bu yüzden d'diff' ve 'dt' to difftool'a takma ad verdim. Kullanılabilirlik desenli takma adlar oluşturmaktan önemlidir.
Habeeb Perwad

"Git diff" vimdiff nasıl kullanılır ?, bu cevap bana bir takma ad kullanmamı sağlar. Eğer "diff" için takma ad işe yaramazsa.
Rombus

6
@Asenar "Bu çözüm, değişiklikleri kaydederken :w!bunun yerine yazmak zorunda olmanız dışında mükemmeldir :w". Yani git çağrıları nedeni vimdiffile -Rseçeneği. İle geçersiz kılabilirsiniz git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. Vimdiff yazılabilir modda açılacaktır.
wisbucky

103

Deneyebilirsiniz git difftool, bu şeyleri yapmak için tasarlanmıştır.

İlk olarak, vimdiff için diff aracını yapılandırmanız gerekir

git config diff.tool vimdiff

Sonra, fark etmek istediğinizde, git difftoolyerine kullanın git diff. Beklediğiniz gibi çalışır.


1
Neredeyse! Biraz değiştirdim tam olarak aradığım şey. +1 olsa!
chuckg

1
Vimdiff birleştirme aracı yakın zamanda güncellendi: git.kernel.org/?p=git/… (ve diğer birkaç taahhüt var, ama en büyüğü bu). Bir sonraki bakım sürümünün ne zaman olacağından emin değilim, ama git.git'ten inşa etmek istiyorsanız, yükseltmeler sizin olacak!
Cascabel

21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge

3
Diftool için değil, birleştirme için cevap verirsiniz. Ama yine de faydalı bir cevap. +1.
dotancohen

@dotancohen Gerçekten Teşekkürler aptal hata şimdi ben cevabımı düzenleyebilirsiniz fark etmedim.
Nanhe Kumar

1
@NanheKumar, @dotancohen değiştirilmesi mergeile diff, hile olacaktır yukarıdaki cevapları yani git config --global diff.tool vimdiff .
Will

2

Git'te listelenmeyen başka bir fark aracını kullanmak isteyenler için ile söyleyin nvim. İşte ben kullanarak sona erdi:

git config --global alias.d difftool -x <tool name>

Benim durumumda, ben ayarlamak <tool name>için nvim -dve diff komutuyla çağırmak

git d <file>
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.