2013-05-11 32 views
37

Sadece Git ile çalışmaya başlıyorum. TortoiseMerge'i difftool ve mergetool olarak kullanmak istiyorum.Can TortoiseMerge Windows Git Bash ile bir difftool olarak kullanılabilir mi?

Kişisel kullanıcı dizinimdeki .gtconfig dosyasında aşağıdaki bölümler var. Bu soru için kullanıcıyı ve renk bölümlerini kaldırdım.

[merge] 
    tool = tortoisemerge 
[mergetool "tortoisemerge"] 
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\" 
[diff] 
    tool = tortoisemerge 
[difftool "tortoisemerge"] 
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\" 

Git Bash isteminde tortoisemerge yazıyorsam yükler. Yolda olduğu bilinmektedir. Ancak komutu yazdığımda, aşağıdaki hatayı alıyorum.

Rich:mygittest (master *) 
$ git difftool 
error: 'tortoisemerge' can only be used to resolve merges 
merge tool candidates: kompare emerge vimdiff 
No known merge resolution program available. 
external diff died, stopping at readme.txt. 
Rich:mygittest (master *) 
$ 

Bu işi yapmak için ne anlama geliyor? Tortoisemerge, TortoiseSVN ile birlikte yüklenir.

cevap

57

Aşağıdaki ayarlar benim için iyi çalışıyor. Ancak TortoiseGit TortoiseSVN kullanmıyorum. Diff için parametrelerdeki fark dikkat edin.

[diff] 
    tool = tortoisediff 
[difftool] 
    prompt = false 
[merge] 
    tool = tortoisemerge 
[mergetool] 
    prompt = false 
    keepBackup = false 
[difftool "tortoisediff"] 
    cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -mine "$REMOTE" -base "$LOCAL" 
[mergetool "tortoisemerge"] 
    cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED" 
+2

TortoiseMerge, Git parametrelerini yönetme biçiminde bir sorun var. TortoiseMerge, parametre adını değerden ayırmak için bir iki nokta üst üste kullandığı için, Git dosya isimleriyle boşluklarla uğraşırken her ikisine de alıntı yapar. TortoiseGitMerge bir alan sağlar ve problemi giderir. –

+0

Bu msys bash tırnak işaretleri yönetir. Görünüşe göre kaplumbağa ile gitmek gerekir 1.8 – jwg

+0

[Performans kolonları ile baş edemez] (http://stackoverflow.com/a/12638596/284795). TortoiseMerge'den alternatif bir sözdizimi eklemesini rica etmeliyiz. –

6

Yani boşluklarla dosya adları doğru şekilde işlenmesini, sen

cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED" 
+0

Fark nedir? Parametrelerdeki kolonların yerini boşluklarla mı değiştirdi? Difftool için benzer bir değişiklik yapılmalı mıdır? Orijinal cevabı düzenlemeye değip değmeyeceğini veya kolonlar için bir neden olup olmadığını bilmiyorum .. – mwfearnley

+0

Kolonlar boşluklarla değiştirilir. Bağımsız değişken işleme kodu, sayıları veya boşlukları kabul edebilir. Ancak, tırnak işaretleri, "kelimeler" in başlangıcı veya bitiminde değilse, boşluk içeren bir dosya adı etrafında alıntılar doğru şekilde ele alınmaz. – jwg

+2

@jwg Tavsiyemi dikkate almak için cevabımı değiştirdim. Teşekkürler! –

0

Güzel cevap için @ Melbourn'in cevabın son satırı değişmelidir! Bana çok zaman kazandı. Tek eksiklik, deponun yeni Eklenen veya Kaldırılan dosyaları, difftool komut yürütme sırasında görünmeyecektir. Bunun üzerine yaptığım işte: (İş arkadaşımın answer'dan esinlenerek). (:/Home C)

  1. $Home dizinde empty.empty adlı bir dosya oluşturun. Ve isminden de anlaşılacağı gibi, boş kalsın. muhtevası,

aşağıdaki: (/ home/bin C):

  • $Home/bin dizinde tortoisediff.sh adlı başka bir dosya oluşturun

    #!/bin/sh 
    # $LOCAL $REMOTE seem to be swapped 
    # $1 is $LOCAL 
    # $2 is $REMOTE 
    
    difftool='/c/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe' 
    NULL="/dev/null" 
    empty="C:/home/empty.empty" 
    
    if [ "$1" == "$NULL" ]; then 
        echo "Added: " "$2" 
        "$difftool" /base:"$empty" /mine:"$2" /readonly:"$empty" 
    elif [ "$2" == "$NULL" ]; then 
        echo 'Removed: ' "$1" 
        "$difftool" /base:"$1" /readonly:"$1" /mine:"$empty" 
    else 
        echo 'Modified' "$2" 
        "$difftool" /base:"$1" /basename:"$1" /readonly:"$1" /mine:"$2" /minename:"$2" 
    fi 
    
    # Checkout https://tortoisegit.org/docs/tortoisegitmerge/tme-automation.html for more 
    
    1. senin .gitconfig değiştirin dosya (cevap Hat 11)

      cmd = tortoisediff.sh "$LOCAL" "$REMOTE"

    Bu, artık uygulamayı doğrudan açmak yerine, difftool'un tortoisediff.sh adresine başvurmasını sağlar.

      Unutmayın
    1. : Eğer git add .git difftool --staged yerine basitçe git difftool ardından koşmak zorundayız.
  • İlgili konular