似乎git difftool执行外部命令时,它没有正确引用参数。

如果.gitconfig包含以下几行:

[difftool.echo]
  cmd = echo "$LOCAL" "$REMOTE"

当我尝试使用包含空格的路径运行difftool时,例如
> git difftool -t echo HEAD^ HEAD spaces\ here/test.txt

我得到以下结果:
/tmp/RL2Nyi_test.txt spaces here/test.txt

如您所见,文件名未加引号(尽管命令中有显式引号),因此参数解析失败。删除.gitconfig中的引号(编辑:以及将其转义为\")不会更改结果。

(通过用任何diff程序替换echo,您将获得一个更有意义的用例)。

如何获得正确的转义文件名?

最佳答案

您需要在.gitconfig中的命令周围转义引号:

cmd = difftoolname \"$LOCAL\" \"$REMOTE\"

09-04 01:45