windows - Git diff 在路径中带有下划线的文件上失败

标签 windows git filenames git-bash git-diff

我运行的是 Windows 7,并且我有最新版本的 git (2.7.2.windows.1)。我以前使用 Windows PowerShell 作为 git 操作的终端,没有任何问题。最近,我决定切换到 Git Bash,但我遇到了一个主要问题。

我的项目有一个目录(其中有许多子目录),其名称只是一个下划线。每当我尝试对该目录中的文件运行 git diff 时,我都会收到以下错误:

$ git diff _/css/templates/jquery.tag-editor.css 致命:无效的对象名称“_C”。

据我所知,下划线是文件/目录名称中完全有效的字符,制表符完成在该目录中工作正常,所以我知道终端可以“看到”其中。此外,该项目的其他贡献者,他们都运行 OSX,没有这个问题。当我运行一个简单的 git diff 时,没有指定任何单个文件,它工作正常,并且很高兴地在下划线目录中包含任何更改文件的 diff。如果我 cd 进入下划线目录并从那里运行 git diff ,它也可以工作,这样我传递给它的路径不包括下划线。

这里到底发生了什么阻止我对这些文件运行 git diff?当我尝试这样做时,错误消息中的“C”从何而来?

更新

当我运行 git checkout -- _/css/templates/jquery.tag-editor.css 以放弃对该文件的更改时,这是我看到的错误:

错误:pathspec '_C:/Program Files/Git/css/templates/jquery.tag-editor.css' 与 git 已知的任何文件都不匹配。

C:\Program Files\Git 是我的 Git 安装目录。那么显然路径的一部分被解释为指的是 Git 安装目录?再一次,是什么导致了这种情况的发生?

最佳答案

您遇到的问题是基于Posix Path conversions of MinGW/Msys2 .

  • 在 git-bash 上尝试双斜杠:git diff _//css/templates/jquery.tag-editor.css 或使用反斜杠(需要在 git-bash 中转义) : git diff _\\css\\templates\\jquery.tag-editor.css 或前缀 MSYS_NO_PATHCONV=1: MSYS_NO_PATHCONV=1 git diff _/css/templates/jquery.tag-editor.css
  • 在 CMD 上,你应该使用反斜杠而不是斜杠:git diff _\css\templates\jquery.tag-editor.css 或者像 git-bash 一样使用双斜杠

为了防止转换。

关于windows - Git diff 在路径中带有下划线的文件上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35660576/

相关文章:

c++ - 在 C++ (VC++ 2010 Express) 上,双线程应用程序比单线程应用程序慢。怎么解决?

php - Symfony2 - 创建自己的供应商包 - 项目和 git 策略

git - Visual Studio Code Git 装饰消失

git - 何时在 Git 中使用 '--no-ff' merge 选项

python - 为什么我的文件路径中出现 Unicode 转义的 SyntaxError?

python - 当前 win-64 channel 中缺少依赖项

windows - 我的程序应该如何决定安装在 "Program Files (x86)"下?

regex - 如何使用Matlab/Octave regexprep(正则表达式替换)在文件名扩展名前添加后缀

Perl函数用空格规范化路径?

windows - 将字符串回显到具有多行的 .txt 文件 - 使用 Windows 批处理文件