Fark aracını .gitconfig ile yapılandırma


159

Git'i .gitconfig dosyasıyla fark yaratmak için farklı bir araç kullanacak şekilde nasıl yapılandırabilirim?

Bu benim .gitconfig içinde var:

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

İşe yaramıyor; sadece normal komut satırını açar diff. Ben yaparken

export GIT_EXTERNAL_DIFF=git-chdiff

daha sonra git diffharici fark aracını açacaktır (bu yüzden harici fark aracı komut dosyasının iyi çalıştığını biliyorum). Diff aracı için .gitconfig yapılandırmamla ilgili bir sorunum var mı?


1
Bkz. Stackoverflow.com/questions/255202/… (muhtemelen bunu kopya olarak kapat)
Stein G. Strindhaug

Yanıtlar:


141

Git, önceden yapılandırılmış "kutudan çıkarılmış" (kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffuse, opendiff, p4merge ve araxis) gibi bir dizi difftools sunar ve ayrıca kendi belirtmek için. Önceden yapılandırılmış DiffTools birini (örneğin, "vimdiff") kullanmak için, aşağıdaki konularda aşağıdaki satırları ekleyin ~/.gitconfig:

[diff]
    tool = vimdiff

Artık "git difftool" komutunu çalıştırabilir ve tercih ettiğiniz aracı kullanabilirsiniz.

Öte yandan, kendi difftool'unuzu belirtmek biraz daha fazla iş gerektirir, bkz. 'Git diff' çıktısını tercih edilen diff aracım / görüntüleyicimle nasıl görüntülerim?


İlk bağlantı koptu. Etki değiştiğini görünüyor .comiçin .org. Jeetworks.org/software
RBT

1
Önceden yapılandırılmış "kutudan çıkarılmış" bir difftool ile ne demek istiyorsun? Listenizde olmayan bir harici fark aracı "winMerge" kurmak için, yazınızda bahsettiğiniz ayarın aynısını yapmak zorunda kaldım ve her şey ek bir yapılandırma olmadan çalışmaya başladı. Bu, git kutusunun yanı sıra "winMerge" 'i desteklediği anlamına mı geliyor, çünkü mesajınızdan anlayabildiğim kadarıyla, desteklenmeyen bir fark aracını kurmak için bazı ekstra iş / ayarlar / yapılandırma gerektirdiğini anlıyorum kutu tarafından git.
RBT

169

Bunu yapmanın ek bir yolu (komut satırından):

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

İlk iki çizgi difftool ve mergetool'u bunu tkdifftercihlerinize göre değiştirir. Üçüncü satır can sıkıcı istemi devre dışı bırakır, böylece her vurduğunuzda git difftoolotomatik olarak difftool başlatılır.


11
Ben yaptım git config --global diff.tool diffmergeama ne zaman git diff myfile.txto hala bana varsayılan unix diff verdi
amphibient

Belki başka bir fark aracını tanımlayan yerel bir yapılandırmanız var mı?
Omer Dagan

1
belki de dağıtmak
rptr

5
@amphibient: aracı kullanmak için git diff aracını myfile.txt dosyasını deneyin .
JBRWilkinson

72

Diğerleri bu konuda% 99 cevap verdiler, ancak bir adım kaldı. (Cevabım OS X'ten gelecek, bu nedenle dosya yollarını buna göre değiştirmeniz gerekecek.)

Bu değişiklikleri şu şekilde yaparsınız ~/.gitconfig:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

Bu fark aracını düzeltir. Bunu ~/.gitconfig, terminalden şu komutları girerek doğrudan düzenlemeden de düzeltebilirsiniz :

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

Herkesin bahsetmediği% 1, bunu kullanırken sadece koşamazsınız git diff myfile.txt; koşman gerek git difftool myfile.txt.


23
Bu son 1% için seçildi. Tamamen dövülmüş bir çivi kadar tatmin edici bir şey yoktur;)
Titou

1
Varsayılan araç yapmanın bir yolu var mı?
math0ne

6
Harika, git config --global --add difftool.prompt falseyine de adımı kaçırıyorsun . ;)
Suma

36

İşte ~ / .gitconfig dosyamın fark ve birleştirme araçlarını yapılandırdığım kısmı. SourceGear tarafından dağılmayı seviyorum. (Aslında bunu çok seviyorum).

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

Gördüğünüz gibi, [difftool "diffmerge"]satırda "dağılma" adlı bir araç tanımlıyorsunuz . Sonra aracı "diffmerge" [diff] tool =bölümünde varsayılan olarak ayarlıyorum .

Açıkçası, burada benim yolumda "diffmerge" komutu var. Aksi takdirde, yürütülebilir dosya için tam bir yol vermek gerekir.


Tüm ters eğik çizgi kaçmadan:diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
Tim Lovell-Smith

1
Daha basitle gidiyorumdiffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Tim Lovell-Smith

Cygwin'den Windows versiyonunun kullanımını kolaylaştırmak için kullanışlı bir 'sgdm_cygwin.sh' komut dosyası var.
thoni56

Böylece bunu yapabilirsiniz ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmergeve yukarıdaki yapılandırmayı kullanmaya hazırsınız. Yanı sıra diffmergedoğrudan cygwin yolları ile cygwin komut satırından.
thoni56

sgdm.exeBugünlerde olurdu
kzu

22

Git için diff aracı olarak karşılaştırmanın ötesine geçmeye daha spesifik olan bu konudan cevabımı tekrar ediyorum . Paylaştığım tüm ayrıntılar, genel olarak herhangi bir fark aracı için eşit derecede yararlıdır, bu yüzden burada paylaşın:

Çalıştırdığımız ilk komut aşağıdaki gibidir:

git config --global diff.tool bc3

Yukarıdaki komut dizinde .gitconfigbulunan aşağıdaki girdiyi oluşturur %userprofile%:

[diff]
    tool = bc3

Sonra aşağıdaki komutu çalıştırın ( Bu özel durumda bu komutu çalıştırmak gereksizdir ve sadece bazı özel durumlarda gereklidir. Kısa bir süre içinde öğreneceksiniz ):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

Yukarıdaki komut .gitconfigdosyaya aşağıdaki girişi oluşturur :

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

Burada bilinmesi gereken şey anahtar bc3. Bu, piyasada bulunan iyi bilinen karşılaştırma araçlarının belirli bir sürümüne karşılık gelen git için iyi bilinen bir anahtardır ( bc3Karşılaştırma Ötesinde aracının 3. sürümüne karşılık gelir). Önceden tanımlanmış tüm tuşları görmek istiyorsanız git difftool --tool-helpgit bash komutunu çalıştırın . Aşağıdaki listeyi döndürür:

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

Yukarıdaki tuşlardan herhangi birini kullanabilir veya kendinize ait özel bir anahtar tanımlayabilirsiniz. Yukarıda listelenen tuşlardan hiçbiriyle eşleşmeyen tamamen yeni bir araç (veya iyi bilinen bir aracın yeni piyasaya sürülmüş bir sürümünü) kurmak isterseniz, yukarıda listelenen tuşlardan herhangi birine veya yeni bir kendi özel anahtar.

Bir karşılaştırma aracı ayarlamanız gerekiyorsa

  • Piyasada kesinlikle yeni

VEYA

  • Varolan iyi bilinen aracın yeni bir sürümü GIT'de herhangi önceden tanımlanmış tuşlara eşlenmedi hangi salıverilmiş etti ?

Benim durumumda olduğu gibi, karşılaştırma 4'ün ötesine yükledim. Karşılaştırmanın ötesinde git için iyi bilinen bir araçtır, ancak sürüm 4 sürümü varsayılan olarak mevcut anahtarların hiçbiriyle eşlenmez. Böylece aşağıdaki yaklaşımlardan herhangi birini takip edebilirsiniz:

  1. Ben 4 karşılaştırmak ötesinde mevcut bc33 zaten karşılaştırmak karşılık gelen mevcut anahtar eşleyebilirsiniz . Bilgisayarımda sürüm 3 karşılaştırmak ötesinde yoktu bu yüzden umursamadı. İsteseydim, yukarıdaki listede de önceden tanımlanmış tuşlardan herhangi birine eşlemiş olabilirim examdiff.

    Araçların iyi bilinen sürümünü zaten var olan / iyi bilinen uygun anahtarla eşlerseniz, yükleme yolunun zaten gittiği bilindiğinden ikinci komutu çalıştırmanız gerekmez .

    Örneğin, kutumdaki sürüm 3'ü karşılaştırmanın ötesine yüklediysem, dosyamda aşağıdaki yapılandırmaya sahip .gitconfigolmak, devam etmek için yeterli olurdu:

    [diff]
    tool = bc3
    

    Ancak, varsayılan ilişkilendirilmiş aracı değiştirmek isterseniz, pathözniteliğinden ayrı olarak bahsedersiniz, böylece git yeni aracınızın exe'sinin başlatılması gereken yolu öğrenir. Tilki karşılaştırmak ötesine başlatmak için gitmek giriş İşte 4 yerine. Exe'nin yolunu not edin:

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. En temiz yaklaşım , yeni karşılaştırma aracı veya iyi bilinen bir aracın yeni bir sürümü için tamamen yeni bir anahtar tanımlamaktır. Benim durumumda bc4olduğu gibi hatırlaması kolay yeni bir anahtar tanımladım . Böyle bir durumda, toplamda iki komut çalıştırmanız gerekir, ancak ikinci komutunuz yeni aracınızın yürütülebilir dosyasının yolunu ayarlamayacaktır. Bunun yerine cmd, yeni aracınız için özniteliği aşağıda gösterildiği gibi ayarlamanız gerekir:

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
    

    Yukarıdaki komutların çalıştırılması .gitconfigdosyanızda aşağıdaki girişleri oluşturur :

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    

Gelecekte kendinizle ilgili herhangi bir karışıklığı önlemek için # 2 yaklaşımını izlemenizi şiddetle tavsiye ederim.


16

Aşağıdaki bloklardan birini eklemek, Windows ve Linux geliştirme ortamlarım için KDiff3'ü kullanmamı sağlıyor . Güzel bir tutarlı platformlar arası fark ve birleştirme aracı sağlar.

Linux

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

pencereler

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

Linux ve pencereler için koşullu olarak doğru yolları belirten tek bir çapraz platform .gitconfig dosyası oluşturmanın bir yolunu buldunuz mu?
Jerry Asher

1
Dürüst olmak gerekirse, her yerde kaynaşmaya başladım ve işe yarıyor gibi görünüyor.
moodboom

TrustExitCode = false değerini ayarlamak için bir neden var mı? Yanlış ayarlandıysa, git, aracınızdan sıfır olmayan çıkış kodunu yok sayar. Yani alet ezmek git yanlışlıkla birleştirme başarılı olduğunu düşünürdüm. Ama yanlış yapmanın bir nedeni olabilir, lütfen açıklayın.
apollo

trustExitCode = falseGit'in, aracın doğru veya yanlış bir durumla çıkıp çıkmadığına güvenmek yerine birleştirmenin başarılı olup olmadığını sormasına neden olacağına inanıyorum .
09:22

4

Birden çok fark aracını kullanma seçeneğiniz varsa .gitconfig dosyasına bir takma ad ekleyin

[alias]
    kdiff = difftool --tool kdiff3

--toolseçenek bahsetmek için . Teşekkürler
itMaxence


0

Windows'ta $git difftool --tool-helpaşağıdaki gibi çeşitli seçenekleri görmek için komut çalıştırmamız gerekir :

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

ve bunlardan herhangi birini (örneğin winmerge)

$  git difftool --tool=winmerge

Notepad ++ 'ı taahhütte bulunmadan önce dosyaları görecek şekilde yapılandırmak için:

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

ve kullanma işlem $ git commitbilgilerini notepad ++ ile açar

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.