Git: KDiff3'ü birleştirme aracı ve fark aracı olarak yapılandırma


219

Son zamanlarda GitExtension 2.46 kullanıyordum, ancak aynı olan Git sürümü 1.9.4.msysgit.2. Yalnızca Git komutlarını kullanmak isteyen GitExtension'u kaldırdım ve Git ve KDiff3'ün en son sürümünü yükledim .

Birleştirme ve çakışmaları olduğunda, aşağıdaki komutu çalıştırın:

$ git mergetool

Sonra mesajı alıyorum:

Birleştirme aracı kdiff3 'kdiff3' olarak kullanılamaz.

Sanırım KDiff3 yolu ile olmalı.

çevre

  • İşletim Sistemi: Windows 10
  • Git 2.6.1.windows.1
  • KDiff3 0.9.98 (64 bit)

Sorular:

  • $ git mergetoolKDG3 GUI'yi çakışma dosyasının LOCAL , REMOTE , BASE ve MERGED sürümleriyle açma komutu için .gitconfig dosyasında ne yapılandırmam gerekir ?

  • Fark aracını kullanmak için nasıl yapılandırılır?


Yanıtlar:


376

Bu siteler, neredeyse, birleştirme ve difftool çok yararlı . Genel yapılandırmayı kullandım, ancak havuz tarafından sorunsuz bir şekilde kullanılabilir. Sadece aşağıdaki komutları uygulamanız gerekir:

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false

git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false

trustExitCodeSeçeneğin kullanımı, fark aracı geri döndüğünde ne yapmak istediğinize bağlıdır. Gönderen belgeler :

git-difftool her dosyada ayrı ayrı bir fark aracı çağırır. Fark aracı tarafından bildirilen hatalar varsayılan olarak yok sayılır. Çağrılan bir fark aracı sıfır dışında bir çıkış kodu döndürdüğünde git-difftool çıkışını yapmak için --trust-exit-code komutunu kullanın .


5
Yine de neden git-difftool'un kdiff3 başarısız olursa çıkmamasını isteyeyim?
David Torres

9
Fark aracını Visual Studio 2015 tarafından tanımak için, bu satırı şu şekilde değiştirmek zorunda kaldım git config --global --add diff.guitool kdiff3 : git config --global --add diff.tool kdiff3
Guillaume Raymond

2
@DavidTorres Muhtemelen kötü davranılmış Windows araçları (başarıda sıfırdan farklı kodlarla çıkan) herkes için mahveder.
Matthew Flaschen

2
Başvurulan dokümanlara göre trustExitCode öğesini false olarak ayarlamak gereksizdir, çünkü varsayılan yine de yoksaymaktır.
matt wilkie

7
AFAIK, --addbirden çok kez çağrıldığında ikinci veya üçüncü bir giriş ekleyecektir. Daha sonra düzeltmek zordur, çünkü basitçe kaldırılamaz --remove. Sadece bir değer ayarlamak --addtamam olmalıdır.
Thomas Weller

58

@ Joseph'in cevabını uzatmak için :

Bu komutları uyguladıktan sonra global .gitconfigdosyanız aşağıdaki satırlara sahip olacaktır (işlemi hızlandırmak için sadece dosyaya kopyalayabilirsiniz) :

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false

@ Alex78191, cevabım Joseph'in cevabını yansıtıyor ve orada bu ayar hakkında daha fazla ayrıntı bulabilirsiniz.
Igor Kustov

5
Bunu düzeltmem uzun sürdü. 2 şey beni saptırdı: (1) Düzenlediğim .gitconfigdosya kullanılan dosya değildi . Yüklenenleri tanımlamak için stackoverflow.com/questions/2114111/… adresine bakın . (2) Karıştırıp eşleştirmeyin cmd =ve path =gitconfig, TL'de; DR: cmd'yi silin ve sadece yolu kullanın
matt wilkie

1
Şimdi git bash üzerinde .... git difftool <filename> veya basit git difftool sadece ayarladığınız diff gui kdiff3 çalıştırmak için kullanın.
Vivek

32

Mac kullanıcıları için

İşte @ Joseph'in kabul ettiği cevap, ancak varsayılan Mac yükleme yolu konumu ile kdiff3

(Bunu kopyalayıp yapıştırabileceğinizi ve tek seferde çalıştırabileceğinizi unutmayın)

git config --global --add merge.tool kdiff3 
git config --global --add mergetool.kdiff3.path  "/Applications/kdiff3.app/Contents/MacOS/kdiff3" 
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add difftool.kdiff3.trustExitCode false

4
--addKomutu iki kez çalıştırırsanız 2 yapılandırma girdisine neden olabileceğinden kullanmayın . Bunu temizlemek bir karmaşa, çünkü artık tek bir girişi silemezsiniz. Bkz. Git-scm.com/docs/git-config : "Bir seçeneğe birden fazla satır eklenebilir"
Thomas Weller

11

Sorun, Git'in% PATH% içinde KDiff3'ü bulamamasıdır.

Tipik bir UNIX kurulumda tüm yürütülebilir çok iyi bilinen yerlerde (ikamet /bin/, /usr/bin/, /usr/local/bin/vs.), ve bir basit (örneğin bir kabuk işlemcide adını yazarak bir program çağırabileceği cmd.exe:)).

Microsoft Windows'ta, programlar genellikle özel yollara yüklenir, böylece kdiff3bir cmdoturum yazamaz ve KDiff3'ü çalıştıramazsınız.

Zor çözüm: Git'e tam yolu belirterek KDiff3'ü nerede bulacağınızı söylemelisiniz kdiff3.exe. Ne yazık ki Git, yapılandırmasındaki yol belirtimindeki boşluklardan hoşlanmıyor, bu yüzden buna en son ne zaman ihtiyacım vardı, o eski "C: \ Progra ~ 1 ... \ kdiff3.exe" ile geç kalmıştım 1990'lar :)

Basit çözüm: Bilgisayar ayarlarınızı düzenleyin ve% PATH% içine kdiff3.exe içeren dizini ekleyin. Sonra cmd.exe'den adıyla çağırıp çağıramayacağınızı test edin ve Git'i çalıştırın.


8

Komut satırı parametrelerini eklemem gerekiyordu ya da KDiff3 sadece dosyalar olmadan açılacak ve baz, yerel ve uzak için beni isteyecekti. TortoiseHg ile birlikte verilen sürümü kullandım .

Ayrıca, iyi eski DOS 8.3 dosya adlarına başvurmak gerekiyordu.

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED

Ancak, şimdi doğru çalışıyor.


6

Değiştirme kris ' cevabını Git 2.20 (Q4 2018), için uygun komutu ile başlayan git mergetoololacaktır

git config --global merge.guitool kdiff3 

Çünkü " git mergetool", " --[no-]gui" gibi , " " seçeneğini almayı öğrendi git difftool.

Bkz. Taahhüt c217b93 , taahhüt 57ba181 , taahhüt 063f2bd (24 Ekim 2018) Denton Liu ( Denton-L) .
(Tarafından Birleştirilmiş - Junio C Hamano gitster- içinde 87c15d1 taahhüt 2018, 30 Eki)

mergetool: -g/--[no-]guiargüman olarak kabul et

difftoolBir -g/--[no-]guiseçeneği nasıl kabul ettiğine uygun olarak mergetool, merge.guitooldeğişkeni kullanmak yerine varsayılan birleştirme aracını bulmak için aynı seçeneği kabul edin merge.tool.


5

(WSL git'ten kdiff3'ü nasıl kullanacağımı öğrenmeye çalışırken buraya geldim ve son parçaları aldım, bu yüzden bu cevabı bulmaya çalışırken burada da tökezleyen herkes için çözümümü göndereceğim)

WSL git için kdiff3 fark / birleştirme aracı olarak nasıl kullanılır

Windows 1903 güncellemesi ile çok daha kolay; sadece wslpath kullanın ve Windows tarafı artık WSL dosya sistemine \ wsl $ üzerinden erişebildiğinden TMP'yi Windows'tan WSL'ye paylaşmaya gerek yoktur:

[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    # Unix style paths must be converted to windows path style
    cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false

Windows güncellemesi 1903'ten önce

WSL'de git için Windows 10'da diff / merge aracı olarak yüklenen kdiff3 kullanma adımları:

  1. Kdiff3 kurulum dizinini Windows Yoluna ekleyin.
  2. WSLENV Windows ortam değişkenine TMP ekleyin (WSLENV = TMP / up). TMP dizini git tarafından dosyaların daha önceki revizyonları gibi geçici dosyalar için kullanılacaktır, bu nedenle bunun çalışması için yolun Windows dosya sisteminde olması gerekir.
  3. TMPDIR'ı .bashrc'de TMP olarak ayarlayın:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
  1. Kdiff3 çağrılırken unix yolunu windows yoluna dönüştürün. .Gitconfig örneğim:
[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    #path = kdiff3.exe
    # Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
    cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false
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.