No se puede usar git add con la opción –patch

Recientemente actualicé Git a la versión 2.7.2.windows.1 (estoy ejecutando Windows 7 de 64 bits). Desde la actualización, no he podido ejecutar git add con la opción -p en files dentro de un directory determinado (o sus subdirectorys) cuyo nombre es _ (un guión bajo).

git status informa correctamente que mi file tiene cambios:

 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 

Y puedo agregar todo el file con un simple git add o especificando el file por nombre. Pero si trato de include la opción -p o --patch (ambas variaciones producen los mismos resultados), Git informa que no hay cambios:

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

Esto solo ocurre con los files dentro del directory _ , pero no importa si hago un cd en ese directory para ejecutar el command git add sin tener que especificar explícitamente una ruta con un guión bajo; todavía no funciona:

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

Inicialmente pensé que este problema estaba relacionado con uno similar que encontré recientemente en files dentro del directory _ , que pregunté aquí . Sin embargo, ese problema parece haber estado relacionado con la conversión de ruta de Posix en MinGW, mientras que este problema ocurre si utilizo Git Bash, Windows PowerShell o cmd.exe.

Como dije en la pregunta anterior, creo que es válido en los nombres de files / directorys. Además, no soy el propietario del proyecto, así que no puedo cambiar el nombre del directory ni mover el file.

¿Es esto un error en Git? ¿Hay algún paso adicional que pueda tomar para determinar cuál es el problema subyacente?

Bueno, pude reproducir esto y parece que es la misma conversión de ruta POSIX a Windows. ProcessMonitor muestra que git (en realidad, perl ejecutado por git ) busca un file C:\Program Files\Git\php\class.Menu.php .

Para solucionar esto (al less, eso funcionó para mí), de acuerdo con la documentation , puede establecer la variable de entorno MSYS_NO_PATHCONV temporalmente, como tal (en git bash):

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

(No sé cómo configurar variables de env en cmd / powershell de Windows, pero eso debería ser posible también).

No debe habilitar MSYS_NO_PATHCONV global / permanente (por ejemplo, utilizando export en git bash o modificar las variables de entorno de usuario / sistema de Windows en la configuration del sistema), porque eso puede provocar efectos no deseados y probablemente rompa muchas más cosas de las que arreglaré (mira este comentario ). En realidad, las personas de git-windows advierten contra incluso la habilitación temporal de MSYS_NO_PATHCONV .
Habiendo dicho eso, estoy empezando a pensar que el problema de OP es un error de git-for-windows y debería informarse como tal (podría tener algo que ver con el hecho de que git-add es un binary, pero git-add--interactive es un script de Perl).

Otra solución listda es doblar la primera barra inclinada, como git add -p _//php/class.Menu.php (¿o eso significa que el parámetro debe comenzar con una barra doble?), Pero eso no parece funcionar debido para complejas conversiones de routes intermedias, que ocurren entre la invocación de git add y el acceso real a files.

Lo intentaría sin eso . . Además, nunca he pasado un nombre de file a git add -p . Solo hago mi cambio y lo corro como está. También verificaría para asegurarse de que los cambios que está realizando se apliquen a ese file específico y se toque el file.