2013-05-11 108 views
37

我剛開始使用Git。我想使用TortoiseMerge作爲difftool和mergetool。可以將TortoiseMerge與Windows Git Bash一起用作difftool嗎?

在我個人用戶目錄中的.gtconfig中,我有以下部分。我已經刪除了這個問題的用戶和顏色部分。

[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提示符下鍵入tortoisemerge,它會加載。已知道在路上。但是,如果我輸入命令,我會得到以下錯誤。

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 *) 
$ 

什麼我不理解,使這項工作? Tortoisemerge與TortoiseSVN一起安裝。

回答

57

以下設置適用於我。但是,我正在使用TortoiseGit而不是TortoiseSVN。注意差異參數的差異。

[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破壞參數的方式有一個問題。由於TortoiseMerge使用冒號來分隔參數名稱和值,因此Git在用空格處理文件名時會加上引號。 TortoiseGitMerge允許空間並解決問題。 – 2013-05-11 10:14:22

+0

這是msys bash,損壞報價。顯然它應該與龜git 1.8 – jwg 2013-09-12 14:10:43

+0

[Perforce無法應付冒號](http://stackoverflow.com/a/12638596/284795)。我們應該要求TortoiseMerge添加一個替代語法。 – 2014-08-15 09:13:26

6

因此,與空格的文件名正確處理,你應該@墨爾本的回答的最後一行改爲

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

有什麼區別? (僅)參數中的冒號是否已被空格替換?是否應該對difftool進行類似的更改?我不知道是否值得編輯原始答案,或者是否有冒號的原因。 – mwfearnley 2014-08-27 22:33:06

+0

冒號被空格替換。參數處理代碼可以接受冒號或空格。但是,如果引號不在「單詞」的開始或結尾處,則引號圍繞其中包含空格的文件名將無法正確處理。 – jwg 2014-08-31 07:05:27

+2

@jwg我現在修改了我的答案,將您的建議考慮在內。謝謝! – 2015-03-26 08:19:25

0

偉大的答案!爲我節省了很多時間。 一個缺點是,在difftool命令執行過程中,不會從存儲庫新增或刪除文件。以下是我在此之上所做的: (受我的同事answer的啓發)。

  1. $Home目錄(C:/ home)中創建一個名爲empty.empty的文件。顧名思義,保持空白。與以下內容

:(/家/箱C):

  • 創建$Home/bin目錄中名爲tortoisediff.sh另一個文件

    #!/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 
    
  • 修改您的.gitconfig文件(答案的第11行)

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

  • 這會使difftool引用tortoisediff.sh而不是直接打開應用程序。

  • 請記住:你必須運行之後git difftool --staged而不是簡單地git difftoolgit add .
  • 相關問題