可以将TortoiseMerge与Windows Git Bash一起用作difftool吗?
我刚开始使用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一起安装。
以下设置适用于我。但是,我正在使用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"
因此,与空格的文件名正确处理,你应该@墨尔本的回答的最后一行改为
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"
有什么区别? (仅)参数中的冒号是否已被空格替换?是否应该对difftool进行类似的更改?我不知道是否值得编辑原始答案,或者是否有冒号的原因。 – mwfearnley 2014-08-27 22:33:06
冒号被空格替换。参数处理代码可以接受冒号或空格。但是,如果引号不在“单词”的开始或结尾处,则引号围绕其中包含空格的文件名将无法正确处理。 – jwg 2014-08-31 07:05:27
@jwg我现在修改了我的答案,将您的建议考虑在内。谢谢! – 2015-03-26 08:19:25
伟大的答案!为我节省了很多时间。 一个缺点是,在difftool命令执行过程中,不会从存储库新增或删除文件。以下是我在此之上所做的: (受我的同事answer的启发)。
- 在
$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 difftool
git add .
。
TortoiseMerge对Git破坏参数的方式有一个问题。由于TortoiseMerge使用冒号来分隔参数名称和值,因此Git在用空格处理文件名时会加上引号。 TortoiseGitMerge允许空间并解决问题。 – 2013-05-11 10:14:22
这是msys bash,损坏报价。显然它应该与龟git 1.8 – jwg 2013-09-12 14:10:43
[Perforce无法应付冒号](http://stackoverflow.com/a/12638596/284795)。我们应该要求TortoiseMerge添加一个替代语法。 – 2014-08-15 09:13:26