不能使用git add with --patch选项

时间:2016-03-08 22:20:35

标签: windows git filenames git-add

我最近将Git更新为版本2.7.2.windows.1(我正在运行Windows 7 64位)。自更新以来,我无法在名称为git add(下划线)的特定目录(或其子目录)中的文件上运行-p {/ 1}}。

_正确报告我的文件有变化:

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选项(两种变体产生相同的结果),Git会报告没有变化:

--patch

这仅适用于PS C:\Users\Carl\www\dl> git add -p .\_\php\class.Menu.php No changes. 目录中的文件,但无论我是_进入该目录运行cd命令而无需明确指定路径其中的下划线;它仍然不起作用:

git add

我最初认为此问题与我最近在PS C:\Users\Carl\www\dl\_\php> git add -p .\class.Menu.php No changes. 目录which I asked about here中的文件中遇到的类似问题有关。但是,该问题似乎与MinGW中的Posix路径转换有关,而无论是使用Git Bash,Windows PowerShell还是cmd.exe都会出现此问题。

正如我在上一个问题中所说,我认为强调在文件/目录名称中有效。另外,我不是项目的所有者,因此我无法重命名目录或移动文件。

这是Git中的错误吗?我可以采取任何其他步骤来确定潜在问题是什么吗?

2 个答案:

答案 0 :(得分:14)

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

要解决这个问题(至少对我有用),根据documentation,你可以暂时设置环境变量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的用户/系统环境变量),因为可能导致不必要的影响,它可能会破坏比它修复的更多的东西(见this SO comment)。实际上,git-windows人员warn甚至可以暂时启用MSYS_NO_PATHCONV 话虽如此,我开始认为OP的问题是一个git-for-windows错误,应该如此报告(可能与git-add是二进制的事实有关,但是git-add--interactive是一个perl脚本。)

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

答案 1 :(得分:2)

我试试没有.。我也从未将文件名传递给git add -p。我只是做出改变并按原样运行。我还会检查以确保您所做的任何更改实际上都应用于该特定文件,并且正在触摸该文件。