Git diff在path下用下划线文件失败

我正在运行Windows 7,我有最新版本的git(2.7.2.windows.1)。 我以前使用Windows PowerShell作为我的git操作terminal,没有问题。 最近,我决定切换到Git Bash,但我有一个主要问题。

我的项目有一个目录(其中有许多子目录),其名称只是一个下划线。 每当我尝试在该目录中的文件上运行git diff ,出现以下错误:

$ git diff _/css/templates/jquery.tag-editor.css fatal: Invalid object name '_C'.

据我所知,下划线是一个文件/目录名称中完全有效的字符,并且在该目录内的Tab完成工作正常,所以我知道terminal可以“看到”里面。 另外,项目的其他贡献者,都运行OSX,没有这个问题。 而当我运行一个简单的git diff ,而没有指定任何单个文件,它工作正常,并愉快地包括在下划线目录中的任何更改的文件的差异。 如果我进入下划线目录并从那里运行git diff ,那么它也可以工作,所以我传递给它的path不包括下划线。

究竟发生了什么事情,以防止我在这些文件上运行git diff ? 当我试图这样做时,错误信息中的“C”来自哪里?

更新

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

error: pathspec '_C:/Program Files/Git/css/templates/jquery.tag-editor.css' did not match any file(s) known to git.

C:\Program Files\Git是我的Git安装目录。 所以显然,部分path被解释为指Git安装目录? 再次,这是什么原因造成的呢?

Solutions Collecting From Web of "Git diff在path下用下划线文件失败"

您遇到的问题基于MinGW / Msys2的Posix路径转换 。

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

以防止转换。