我刚开始使用Git。我想将TortoiseMerge用作difftool和mergetool。
在我的个人用户目录的.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一起安装。
以下设置对我来说很好用。但是,我使用的是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"
为了正确处理带空格的文件名,您应该将@melbourn答案的最后一行更改为
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"
Klas Mellbourn的好答案!节省了我很多时间。一个缺点是,在difftool命令执行期间,存储库中的新Added
或Removed
文件将不会显示。没有什么可与它们进行比较!这是我在此之上所做的:(受到我同事的answer的启发。)>
empty.empty
目录中创建一个名为$Home
的文件(在bash中执行start ~
)。顾名思义,将其保留为空。tortoisediff.sh
目录中创建另一个名为$Home/bin
的文件:
#!/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 add .
,然后运行git difftool --staged
,而不是简单地运行git difftool
。[diff]
tool = tortoisediff
[difftool]
prompt = false
[merge]
tool = tortoisemerge
[mergetool]
prompt = false
keepBackup = false
[difftool "tortoisediff"]
cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[mergetool "tortoisemerge"]
cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
重新定基时,我强烈建议切换$theirs
和$mine
,因为在合并和重新合并时它是不同的。检查这里:
[与Windows中现有的TortoiseSVN安装一起使用TortoiseMerge: