2012-05-21 18 views
6

Para caracteres no ASCII en nombres de archivo, Git los generará en nota octal. Por ejemplo:Git: cómo especificar nombres de archivos que contienen notación octal en la línea de comandos

> git ls-files 
"\337.txt" 

Si tal secuencia de bytes no representa una codificación legal (para la codificación actual de la línea de comandos), no soy capaz de entrar en la cadena correspondiente en la línea de comandos. ¿Cómo puedo invocar los comandos de Git en estos archivos? Obviamente, el uso de la cadena que se muestra por git ls-files no funciona:

> git rm "\337.txt" 
fatal: pathspec '337.txt' did not match any files 

probado en Windows, con msysgit 1.7.10 (versión git 1.7.10.msysgit.1)

+0

Consulte [Cómo hacer que Git muestre correctamente las rutas de acceso codificadas en UTF-8 en la ventana de la consola?] (Https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8 -encoded-pathnames-in-the-console-window). 'git config --global core.quotepath off' –

Respuesta

9

En Bash, puede printf utilizar para este tipo de propósito:

$ echo `printf "\337.txt"` 
▒.txt 

$ git rm `printf "\337.txt"` # this would pass the awkward filename to git 

el problema es, obviamente, que la cáscara no realiza escape octal, tampoco git. Pero printf lo hace.


También, podemos hacer echo -e escape octal:

$ echo -e '\0337.txt' 
▒.txt 

Pero ese uso es un poco desanimado, se debe preferir printf donde se puede.

+0

¿Cómo usaría eso en combinación con los comandos de Git? ¿Qué sucede si tengo msysgit instalado? – mstrap

+0

@mstrap Espero que msys proporcione una utilidad 'printf', porque es una posix estándar. Deberías probar si está disponible para ti. Ver también editar. – ulidtko

+1

La versión de impresión funciona perfectamente desde dentro de bash de msysgit. ¡Gracias! – mstrap

Cuestiones relacionadas