tipos tag remove practices etiquetas crear best windows git filenames git-add

windows - tag - No puedo usar git add con la opción--patch



git tag best practices (2)

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 archivos dentro de un directorio determinado (o sus subdirectorios) cuyo nombre es _ (un guión bajo).

git status informa correctamente que mi archivo 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 el archivo completo con un simple git add , o especificando el archivo por su nombre. Pero si trato de incluir 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 sucede con los archivos dentro del directorio _ , pero no importa si cd en ese directorio para ejecutar el comando 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 los archivos dentro del directorio _ , que pregunté aquí . Sin embargo, ese problema parece haber estado relacionado con la conversión de la ruta Posix en MinGW, mientras que este problema ocurre si uso Git Bash, Windows PowerShell o cmd.exe.

Como dije en esa pregunta anterior, creo que los guiones bajos son válidos en los nombres de archivos / directorios. Además, no soy el propietario del proyecto, por lo que no puedo cambiar el nombre del directorio ni mover el archivo.

¿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 de POSIX a Windows. ProcessMonitor muestra que git (en realidad, perl ejecutado por git ) busca un archivo C:/Program Files/Git/php/class.Menu.php .

Para solucionar este problema (al menos, eso funcionó para mí), de acuerdo con la documentation , puede establecer la variable de entorno MSYS_NO_PATHCONV temporalmente, así (en git bash):

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

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

No debe habilitar MSYS_NO_PATHCONV globalmente / permanentemente (por ejemplo, usar export en git bash o modificar las variables de entorno de usuario / sistema de Windows en la configuración del sistema), ya que puede provocar efectos no deseados y probablemente romperá muchas más cosas que " Lo arreglaré (ver este comentario SO ). En realidad, la gente de git-windows warn 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 para Windows y debería informarse como tal (podría tener algo que ver con el hecho de que git-add es un binario, pero git-add--interactive es un script de perl).

Otra solución alternativa es duplicar la primera barra, 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 correctamente a complejas conversiones de ruta intermedias, que ocurren entre la invocación de git add y el acceso real a archivos.


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