Git diff在路径

时间:2016-02-26 19:56:05

标签: 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 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安装目录?是什么导致这种情况发生?

1 个答案:

答案 0 :(得分:2)

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

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

以防止转换。