在Windows上为Git配置diff工具

9

由于在powershell中,git diff 命令通常会产生大量无法阅读的空格或奇怪字符,因此我安装了Perforce P4Merge来处理合并和差异。

然而,我无法让 git diff 命令打开p4merge应用程序以查看差异。到目前为止,我的.gitconfig文件如下:

[diff]
    tool = p4diff

[difftool "p4diff"]
    external = 'C:/PROGRA~1/Perforce/p4merge.exe "$LOCAL" "$REMOTE"'
    prompt = false

[merge]
    keepBackup = false
    tool = p4merge

[mergetool "p4merge"]
    cmd = "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
    path = 'C:/PROGRA~1/Perforce/p4merge.exe'
    prompt = false
    keepBackup = false
    keepTemporaries = false
    trustExitCode = false

路径是正确的。但是遗憾的是,在使用“git diff”命令时,git仍然试图在PowerShell中显示差异。
那么,如何使其正常工作呢?

相关帖子 - 如何在Git中通常配置差异工具 - RBT
5个回答

12

在命令提示符中尝试: git config --global diff.tool p4diff

这对我起作用了,使用了您描述的设置的配置文件:

[diff]  
    tool = p4merge  
[difftool "p4diff"]  
    external = '"C:/Program Files/Perforce/p4merge.exe" "$LOCAL" "$REMOTE"'

运行git difftool按预期打开了p4merge。

参考:如何使用可视化差异程序查看git diff输出?


6
难道不应该是 tool = p4diff 吗?当你输入命令 git config --global diff.tool p4diff 时,也会得到这个结果。 - leo

10
我正在使用MSysGit v1.8.4,操作系统为Windows 7。
对我来说,唯一的解决方案是将p4merge添加到系统路径变量中(之后需要重新启动)。完成后,我进行了如下配置:
git config --global diff.tool p4merge
git config --global difftool.p4merge.cmd 'p4merge.exe $LOCAL $REMOTE'
git config --global difftool.prompt false

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.prompt false
git config --global mergetool.trustExitCode false
git config --global mergetool.keepBackup false

我建议您坚持使用“git config”而不是手动编辑配置文件,因为这两种方法中有时连字符等字符是不同的。


3

我个人喜欢Meld这个开源工具,用来做差异比其他工具更好用。

扩展@wengeezhang的回答,下面是将Meld配置为difftool的步骤:

  1. 将Meld.exe路径(“C:\Program Files(x86)\Meld”)添加到环境变量中
  2. 打开Windows命令提示符
  3. git config --global diff.tool meld
  4. git config --global difftool.meld.cmd“meld \”$LOCAL\”\”$REMOTE\”“

附加提示: 前往Git仓库根目录并输入以下命令以便并排查看所有差异:

git difftool --dir-diff ./

当我尝试启动Meld时,出现了一堆错误。 - Nicholas Petersen
@NicholasPetersen 是什么类型的错误?提供一个错误摘录会更清楚地说明问题。 - Sunil Shahu

2

1
  1. 将git config --global diff.tool设为p4merge
  2. 将git config --global difftool.p4merge.cmd设置为"p4merge \"$LOCAL\" \"$REMOTE\"",以便p4merge知道如何进行差异比较(本地与远程)
  3. 将p4merge.exe的路径("C:\Program Files\Perforce\p4merge.exe")添加到环境变量中

备注:

  • 在第2步中,必须添加\"$LOCAL\" \"$REMOTE\"(本地与远程比较),否则p4merge将不知道如何进行差异比较

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