0

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

要重现这一点:

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

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

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

如何让winmerge在git中显示新文件的差异?

但是,上述问题(以及所有其他问题)中公认的解决方案对我来说根本不起作用。现在我们已经到了 2020 年,是否有官方的解决方法来解决这个问题?

Mercurial 从来没有遇到过这个问题。它向差异查看器发送有效路径并完美运行。我很惊讶在 Git 上遇到这个问题。

4

1 回答 1

1

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

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

不管 WinMerge 告诉你什么,这确实是一条有效的路径,它在 Windows 中应该可以正常工作。(例如,您应该能够在 CMD 或 PowerShell 提示符下编写类似git diff --no-index \.\nul foo.c, where foo.cis a path in your project 之类的内容。)如果您遇到此问题,也许您应该将其报告给WinMerge 问题跟踪器

于 2020-03-10T22:52:16.953 回答