我正在运行Windows 7,我有最新版本的git(2.7.2.windows.1)。我之前使用Windows PowerShell作为git操作的终端,没有任何问题。最近,我决定改用Git Bash,但我遇到了一个重大问题。
我的项目有一个目录(其中有许多子目录),其名称只是一个下划线。每当我尝试在该目录中的文件上运行git diff
时,我都会收到以下错误:
$ git diff _/css/templates/jquery.tag-editor.css
fatal: Invalid object name '_C'.
据我所知,下划线是文件/目录名中完全有效的字符,并且该目录中的制表符完成正常,所以我知道终端可以在其中“看到”。此外,该项目的其他贡献者,他们都运行OSX,没有这个问题。当我运行一个简单的git diff
时,没有指定任何单个文件,它工作正常,并愉快地包含下划线目录中任何已更改文件的差异。如果我cd
进入下划线目录并从那里运行git diff
,它也有效,因此我传递给它的路径不包括下划线。
这是为了阻止我在这些文件上运行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安装目录。显然,部分路径被解释为引用Git安装目录?是什么导致这种情况发生?
答案 0 :(得分:2)
您遇到的问题基于Posix Path conversions of MinGW/Msys2。
git diff _//css/templates/jquery.tag-editor.css
或使用反斜杠(需要在git-bash中转义):git diff _\\css\\templates\\jquery.tag-editor.css
或前置MSYS_NO_PATHCONV=1
:{{1} } MSYS_NO_PATHCONV=1 git diff _/css/templates/jquery.tag-editor.css
或者加一个斜杠,就像git-bash一样以防止转换。