git difftool
在Windows上似乎很困惑。如果添加了新文件,Git会将"\.\nul"作为"左"文件发送到diff工具。
要复制此:
{create a new file}
git add .
git difftool --staged
现在,WinMerge(或您使用的任何查看器(启动,但报告左侧路径("\.\nul"(无效。
多年来,这个问题在SO上已经报道了好几次。例如,这是完全相同的问题:
如何让winmerge在git中显示新文件的diff?
然而,上述问题(以及所有其他问题(中被接受的解决方案对我来说根本不起作用。现在我们已经进入2020年,有官方的解决方案吗?
Mercurial从未遇到过这种问题。它向diff查看器发送有效路径,并且运行良好。我很惊讶在Git上遇到这个问题。
Git需要提供一种方法来指示特定文件不存在。创建或删除文件时会发生这种情况。
在Unix上,表示diff中不存在的文件组件的典型方法是指定/dev/null
。然而,Windows并没有在特定路径中指定其设备;相反,NUL
设备可以从文件名为NUL
的任何路径访问。
不管WinMerge告诉你什么,这确实是一个有效的路径,它应该在Windows中工作得很好。(例如,您应该能够在CMD或PowerShell提示符下编写类似git diff --no-index .nul foo.c
的内容,其中foo.c
是项目中的路径。(如果您看到此问题,也许您应该向WinMerge问题跟踪器报告。