尝试设置 git diff 工具的各种方法都会导致“致命:无法执行 [...]:错误地址”

use*_*932 5 linux git vimdiff difftool

我使用的是 Linux Mint 17 64 位。刚刚清除git并重新安装apt。已删除~/.gitconfig。我在所谓的全新安装后所做的唯一配置是(在存储库内)

git config diff.tool vimdiff
Run Code Online (Sandbox Code Playgroud)

然后我跑

git difftool HEAD:switch-monitor.sh master:switch-monitor.sh
Run Code Online (Sandbox Code Playgroud)

并得到

fatal: cannot exec 'git-difftool--helper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.
Run Code Online (Sandbox Code Playgroud)

因此,我删除了相关行.git/config并再次尝试该命令,果然内置的基本git diff工作正常。

我还尝试了本教程中的说明:http://technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/

这会导致略有不同但相似的错误。我将以下内容放入新的~/.gitconfig

[diff]
  external = git_diff_wrapper
[pager]
  diff =
Run Code Online (Sandbox Code Playgroud)

git_diff_wrapper并在 my 上放置一个可执行文件PATH,然后运行

git diff HEAD:switch-monitor.sh master:switch-monitor.sh 
Run Code Online (Sandbox Code Playgroud)

并得到

fatal: cannot exec 'git_diff_wrapper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.
Run Code Online (Sandbox Code Playgroud)

不过好像和内容没什么关系git_diff_wrapper。我放置了

git config diff.tool vimdiff
Run Code Online (Sandbox Code Playgroud)

进入它并不会改变任何东西。但是,如果我删除该文件或重命名它,那么我确实会得到这个

error: cannot run git_diff_wrapper: No such file or directory
external diff died, stopping at HEAD:switch-monitor.sh.
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,它显示“没有这样的文件或目录”而不是“错误地址”。

我在网上搜索过,但找不到类似问题的实例。

更新

我在虚拟机上全新安装 Ubuntu 14.04 时遇到同样的问题

更新

我花了一些时间查看 git 的源代码,并且我很确定在这个函数的过程中errno被设置为(“错误地址”):EFAULT

git difftool HEAD:switch-monitor.sh master:switch-monitor.sh
Run Code Online (Sandbox Code Playgroud)

这称为:

fatal: cannot exec 'git-difftool--helper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢

小智 1

我知道这是一个旧线程,但它似乎没有被关闭......

我遇到过类似的错误(我也想使用 vimdiff 来检查两次提交之间的差异)。对我有用的: git difftool HEAD..HEAD~1 --path-to-file/file

/sf/ask/233668851/ Between-two- Different-commits-on-the-same-branch

干杯