如何在Visual Studio 2013中使用外部的Git差异工具?

6
我找到了这篇文章,其中解释了如何让Visual Studio 2013在Git中比较文件时使用内置的差异工具,但我现在遇到了相反的问题。现在,当我右键单击Git“提交详细信息”窗口中的文件并选择“与上一版本比较...”时,VS会在默认的Visual Studio 2013比较工具中执行差异操作,但我希望它使用一个外部的差异工具,特别是TortoiseMerge.exe。我已经在C:\Users\[我的用户名]\.gitconfig中指定了它,并且在GitBash控制台中它能正常运行,但Visual Studio忽略了这个设置并始终使用其内置工具。

以下是我在.gitconfig文件中的设置:

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = c:/Program Files (x86)/KDiff3/kdiff3.exe
[diff]
    guitool = TortoiseMerge
[difftool "TortoiseMerge"]
    path = C:/Program Files/TortoiseSVN/bin/TortoiseMerge.exe

我还检查了本地仓库的.gitconfig文件,确保它没有覆盖这个设置,但它并没有指定任何diff或difftool设置。

我也尝试在我的.gitconfig文件中使用类似的设置:

[diff]
    guitool = TortoiseMerge
[difftool "TortoiseMerge"]
    cmd = \"C:/Program Files/TortoiseSVN/bin/TortoiseMerge.exe\" /base:"$REMOTE" /local:"$MINE"

但是行为没有改变。

我认为这是由于文件路径中的空格导致的。建议将kdiffTortoiseMerge重新安装到一个新目录,以便文件路径中没有空格,而不是Program Files文件夹。 - Anshul Goyal
@mu無 尝试将TortoiseMerge安装到没有空格的文件夹路径中,但仍然遇到了相同的问题 :( - deadlydog
2个回答

6
Visual Studio使用diff.tool配置设置,而不是diff.guitool配置设置。

尝试:

[diff]
    tool = TortoiseMerge

1
最近我在使用Visual Studio 2012时遇到了同样的问题。当我搜索时,发现这是第一个相关主题,所以我会在这里发布解决方案。
我的.gitconfig文件如下:
[merge]
    tool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = true

[difftool "kdiff3"]
    path = "C:/Program Files/KDiff3/kdiff3.exe"
    keepBackup = false
    trustExitCode = true
[mergetool]
    prompt = true

[mergetool "kdiff3"]
    cmd = "C:/Program Files/KDiff3/kdiff3.exe" $BASE $LOCAL $REMOTE -o $MERGED
    keepBackup = false
    trustExitCode = true

[mergetool "vsdiffmerge"]
    cmd = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/vsdiffmerge.exe" /m $REMOTE $LOCAL $BASE $MERGED
    keepbackup = false
    trustexistcode = true

问题在于配置部分之间的换行符。

将文件更改为以下内容可以正确运行:

[merge]
    tool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = true
[difftool "kdiff3"]
    path = "C:/Program Files/KDiff3/kdiff3.exe"
    keepBackup = false
    trustExitCode = true
[mergetool]
    prompt = true
[mergetool "kdiff3"]
    cmd = "C:/Program Files/KDiff3/kdiff3.exe" $BASE $LOCAL $REMOTE -o $MERGED
    keepBackup = false
    trustExitCode = true
[mergetool "vsdiffmerge"]
    cmd = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/vsdiffmerge.exe" /m $REMOTE $LOCAL $BASE $MERGED
    keepbackup = false
    trustexistcode = true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接