不能使用git add –patch选项

我最近更新Git 2.7.2.windows.1 (我正在运行Windows 7 64位)。 自从更新以来,我一直无法使用-p选项对名称为_ (下划线)的特定目录(或其子目录)中的文件运行git add

git status正确地报告我的文件有变化:

 PS C:\Users\Carl\www\dl> git status On branch develop Your branch is up-to-date with 'origin/develop'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: _/php/class.Menu.php 

我可以用一个简单的git add来添加整个文件,或者通过名字来指定文件。 但是如果我尝试包含-p--patch选项(两个变体产生相同的结果),Git报告没有变化:

 PS C:\Users\Carl\www\dl> git add -p .\_\php\class.Menu.php No changes. 

这只发生在_目录中的文件,但不pipe是否进入该目录运行git add命令,而不必明确指定一个具有下划线的path; 它仍然不起作用:

 PS C:\Users\Carl\www\dl\_\php> git add -p .\class.Menu.php No changes. 

我最初以为这个问题和我最近在_目录下遇到的一个类似的问题有关系,我在这里询问了这个问题 。 但是,该问题似乎与MinGW中的Posixpath转换相关,而无论使用Git Bash,Windows PowerShell还是cmd.exe,都会出现此问题。

正如我在前面的问题中所说的,我认为下划线在文件/目录名称中是有效的。 此外,我不是项目的所有者,所以我不能重命名目录或移动文件。

这是Git中的错误吗? 是否有任何额外的步骤可以确定潜在的问题是什么?

那么,我能够重现这一点,似乎它是相同的POSIX到Windows路径转换。 ProcessMonitor显示git (实际上, perlgit运行)查找文件C:\Program Files\Git\php\class.Menu.php

为了解决这个问题(至少这对我MSYS_NO_PATHCONV ),根据文档 ,你可以暂时设置环境变量MSYS_NO_PATHCONV ,像这样(在git bash中):

 MSYS_NO_PATHCONV=1 git add -p _/php/class.Menu.php 

(我不知道如何在Windows的cmd / powershell中设置env变量,但这也应该是可能的。)

你不应该全局/永久地启用MSYS_NO_PATHCONV (例如在git bash中使用export或者在系统设置中修改windows的用户/系统环境变量),因为这可能会导致不必要的效果,而且它可能会打破更多的东西,会修复(见这个评论 )。 其实,git-windows人们甚至会临时启用MSYS_NO_PATHCONV
话虽如此,我开始认为,OP的问题是一个git-for-windows的bug,应该这样报道(可能与git-add是一个二进制的事实有关,但是git-add--interactive是一个perl脚本)。

另一个列出的解决方法是将第一个斜线加倍,如git add -p _//php/class.Menu.php (或者是否意味着该参数必须以双斜线开头?),但这似乎不起作用复杂的中间路径转换,这发生在调用git add和真正的文件访问之间。

我会尝试没有. 。 另外我从来没有通过一个文件名git add -p 。 我只是做我的改变,并按原样运行。 我也会检查,确保你所做的任何更改实际上都被应用到特定的文件,并且文件正在被触摸。