git difftool`不会在Windows上显示添加的文件

时间:2020-03-10 22:07:18

标签: git winmerge difftool

git difftool在Windows上似乎感到困惑。如果添加了新文件,则Git将“ \。\ nul”作为“左”文件发送到差异工具。

要重现此内容:

{create a new file}
git add .
git difftool --staged

现在,WinMerge(或您正在使用的任何查看器)启动,但报告左路径(“ \。\ nul”)无效。

多年来,已经在SO上多次报告了此问题。例如,这是完全相同的问题:

How to get winmerge to show diff for new file in git?

但是,上述问题(以及所有其他问题)中公认的解决方案对我来说根本行不通。现在我们到了2020年,是否有针对此问题的官方解决方法?

Mercurial从未遇到过这个问题。它会向差异查看器发送有效路径,并且可以完美运行。我很惊讶Git遇到这个问题。

1 个答案:

答案 0 :(得分:1)

Git需要提供一种方法来指示特定文件不存在。创建或删除文件时会发生这种情况。

在Unix上,指示diff中不存在的文件组件的典型方法是指定/dev/null。但是,Windows并未在特定路径中指定其设备。相反,可以从文件名为NUL的任何路径访问NUL设备。

尽管WinMerge告诉您,这确实是有效路径,并且在Windows中应该可以正常工作。 (例如,您应该能够在CMD或PowerShell提示符下编写类似git diff --no-index \.\nul foo.c的代码,其中foo.c是项目中的路径。)如果遇到此问题,也许应该将其报告给WinMerge issue tracker