2011-02-14 17 views
10

Estoy tratando de usar git para administrar de manera más efectiva el trabajo en proyectos que usan CVS para su control de fuente, pero estoy teniendo problemas add -es un archivo que tiene una ruta muy larga- 276 caracteres.msys git y long paths

Desafortunadamente, este archivo es generado por el IDE personalizado que se entrega con la herramienta que estoy usando y se espera que esté allí por la herramienta, por lo que no se puede renombrar ni mover.

utilizando el siguiente para tratar de hacer que este semi-legible:

<projectpath> - la ruta tomarse de todos los componentes para este proyecto
<hugepath> - el camino de <projectpath> al primer archivo que estoy teniendo problemas con
<filename> - el nombre del archivo que estoy teniendo problemas con

[email protected] <projectpath> 
$ git init 
Initialized empty Git repository in <projectpath>/.git/ 

[email protected] <projectpath> (master) 
$ git add <hugepath>/<filename> 
fatal: unable to stat '<hugepath>/<filename>': No such file or directory 

[email protected] <projectpath> (master) 
$ ls -al <hugepath> 
ls: <hugepath>/<filename>: File or path name too long 
total 3 
drwxr-xr-x 3 me Administ  0 May 3 2010 . 
drwxr-xr-x 4 me Administ  4096 May 3 2010 .. 
drwxr-xr-x 2 me Administ  0 May 3 2010 CVS 

las herramientas Msys trabajan con rutas utilizando el prefijo UNC que por lo general le permite WOR k con largas filas en las ventanas, pero esto no parece moverse por la limitación de ruta:

[email protected] <projectpath> (master) 
$ git add //?/<projectpath>/<hugepath>/<filepath> 
fatal: Too long path: //?/<projectpath>/<hugep (intin - the path displayed is trimmed) 

[email protected] <projectpath> (master) 
$ ls-al //?/<projectpath>/<hugepath>/ 
ls: //?/<projectpath>/<hugepath>/.: No such file or directory 
ls: //?/<projectpath>/<hugepath>/<filepath>: No such file or directory 
total 2 
drwxr-xr-x 4 me Administ  4096 May 3 2010 .. 
drwxr-xr-x 0 me Administ  0 May 3 2010 CVS 

¿Hay alguna solución que conozco para el seguimiento de los archivos con rutas largas usando Git en Windows?

Estoy usando 1.7.4.msysgit.0 en Windows Vista Business, SP1.

+0

Me gusta el 'me @ work', ¿es ese su nombre de usuario real o lo inventó? – trysis

+2

El problema ha sido reparado en msysgit 1.9. Ver mi respuesta a "git pull aborted with error filename too long" http://stackoverflow.com/a/22831095/151641 – mloskot

Respuesta

0

Esto no es una limitación de Windows que, de hecho, admite nombres de archivo arbitrariamente largos y lo ha hecho durante tanto tiempo como puedo recordar.

Veo que estás usando //?/. De acuerdo con documentation, debe usar \\?\. Cuando se usa \\?\, la barra diagonal es no convertida en una barra invertida.

+1

En MSysGit (y otros programas POSIX portados a Win32) esta es la forma de llegar a las rutas UNC – CharlesB

+0

el problema es presumiblemente en la capa de emulación 'POSIX'. Si fuera un puerto nativo de Windows apropiado, estarías bien. –

11

El límite es de 259 caracteres, por lo que no está lejos. Si la longitud de <hugepath>/<filename> es menos de 256 caracteres a continuación, puede utilizar el "subst" truco:

Una opción es utilizar subst desde un shell de comandos de Windows:

subst P: <projectpath> 

Luego, con mysysgit:

cd /p 
<git commands> 

O si eso no funciona, a partir de un/7/2008 shell de comandos de Windows Vista (administrador EjecutarComo) se puede crear un vínculo físico:

mklink /D C:\p <projectpath> 

Luego, con mysysgit:

C: 
cd \p 
<git commands> 
+0

El comando subst funcionó perfectamente. – summerian

10

Cygwin, y por tanto su paquete git, hace apoyar tales rutas largas de forma transparente, por ellos mapear automáticamente a rutas UNC.

+1

tuvo el mismo problema con msysgit. El git de cygwin rescatado. –

0

Hay una opción de git que le permite manejar long path: core.longpaths. Está disponible desde git 1.9.0.