我无法让git diff使用opendiff。

7

我希望将opendiff作为git diff的默认diff工具。这曾经有效,但由于某些原因停止工作了。 我使用的是以下脚本:

echo opendiff $2 $5 > opendiff-git.sh

这是在.gitconfig文件中设置的:

[diff]
external = ~/opendiff-git.sh

最近这个对我来说不起作用了,是怎么回事?

更新: 当我克隆了一个新的存储库时,一切都正常!奇怪!


它是报错了吗?还是只是提供了一个常规的内置差异? - cxreg
不,使用 git diff 时它并不会报告错误,只是在终端中打印差异。我也可以单独使用 opendiff。 - Ida
我在Mac OS X中遇到了完全相同的问题。之前,即使没有设置这个shell脚本,opendiff也能很好地工作。但是在它停止工作后,我添加了脚本、diff.tool和diff.external选项,但仍然无法正常工作。而且它并没有给出错误提示,只是进行了终端diff。可能发生了什么事情? - Petruza
3个回答

2
我在尝试将opendiff设置为我的git差异和合并工具时发现了这个问题。 奇怪的是,当我使用echo opendiff $2 $5>opendiff-git.sh创建脚本时,脚本没有包含参数占位符$2 $5。我手动添加它们后,它开始工作!
这个命令
echo opendiff $2 $5 > opendiff-git.sh

导致 opendiff-git.sh 文件包含以下内容:
opendiff

我手动添加了两个参数占位符$2 $5。
opendiff $2 $5

按照 knittl 的建议,将 shell 脚本设为可执行。

chmod +x ~/opendiff-git.sh

它可以正常工作!


2
你必须在命令行中转义 '$' 符号,否则 shell 将尝试查找名称为 '$2' 和 '$5' 的变量,但这些变量不存在,因此将被替换为空字符串。请尝试运行以下命令:echo opendiff $2 $5 > ~/opendiff-git.sh - petrsnd

2
请确保您的opendiff-git.sh文件具有可执行权限:
chmod +x ~/opendiff-git.sh

1
现在可以使用git config指定默认工具。要使用FileMerge,即opendiff,运行:
git config --global diff.tool opendiff

如果您查看您的~/.gitconfig文件,现在应该看到:
[diff]
    tool = opendiff

现在应该可以工作了。


2
无法在_macOS Sierra_和_git版本2.10.1(Apple Git-78)上运行。 - gr4nt3d

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