我最近将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中的错误吗?我可以采取任何其他步骤来确定潜在问题是什么吗?
答案 0 :(得分:14)
好吧,我能够重现这一点,似乎它是相同的POSIX到Windows路径转换。 ProcessMonitor显示git
(实际上perl
由git
运行)查找文件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
。我只是做出改变并按原样运行。我还会检查以确保您所做的任何更改实际上都应用于该特定文件,并且正在触摸该文件。