我运行的是 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/