git pull abortado con un nombre de archivo de error demasiado largo

114

Estoy usando Windows como mi sistema operativo y estoy trabajando en un proyecto con un amigo que usa una Mac. Comprobó el código en nuestro Github.

Estaba intentando sacar todo lo que hizo y se abortó con errores de "nombre de archivo demasiado largo" de código de terceros.

¿Que puedo hacer?

Dave Martin
fuente
Ese problema tiene dos casos principalmente diferentes, dependiendo de su operación. Si el repositorio ya existe, puede editar su configuración. ¿Pero si no? Para la clonación / pago con la creación de un nuevo directorio, solo la respuesta de @AlexRosenfeld ayudará.
Gangnus

Respuestas:

200

Las preguntas frecuentes de msysgit en Git no pueden crear un directorio de archivos con una ruta larga no parece estar actualizado, ya que todavía se vincula al antiguo ticket de msysgit # 110 . Sin embargo, según el ticket posterior # 122, el problema se ha solucionado en msysgit 1.9, así:

  1. Actualice a msysgit 1.9 (o posterior)
  2. Lanzar Git Bash
  3. Vaya a su repositorio de Git que 'sufre' de problemas de rutas largas
  4. Habilite el soporte de rutas largas con git config core.longpaths true

Hasta ahora me ha funcionado muy bien.

Tenga en cuenta el aviso importante en el comentario sobre el boleto # 122

no regrese aquí y se queje de que rompe el Explorador de Windows, cmd.exe, bash o cualquier herramienta que esté usando.

Mloskot
fuente
Hay algunas actualizaciones, parece que hay un script adicional que debe ejecutar después de instalar mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant
18
Lo que realmente funcionó fue: git config --global core.longpaths true
Anton Andreev
@AntonAndreev Sí, si desea configurarlo en el alcance global, está bien. El alcance local por repositorio también es perfectamente válido.
mloskot
No me funcionó sin establecerlo a nivel mundial.
Anton Andreev
1
De esa forma no funcionará para la clonación / pago con la creación de un nuevo directorio. Solo la respuesta de @AlexRosenfeld ayudará.
Gangnus
69

Solución 1 : configure la configuración global, ejecutando este comando:

git config --system core.longpaths true

Solution2 - o puede editar directamente su archivo de configuración git específico como se muestra a continuación:

YourRepoFolder -> .git -> config:

[core]
    repositoryformatversion = 0
    filemode = false
    ...
    longpaths = true        <-- (add this line under core section)

Solución 3 : al clonar un nuevo repositorio: aquí .

Daniel Hári
fuente
1
De esa forma no funcionará para la clonación / pago con la creación de un nuevo directorio. Solo la respuesta de @AlexRosenfeld ayudará.
Gangnus
Actualicé la respuesta con eso, para tener en un solo lugar, gracias.
Daniel Hári
26

Unos años tarde, pero me gustaría agregar que si necesita hacer esto de una sola vez (como lo hice yo), puede establecer la configuración durante el comando de clonación. Prueba esto:

git clone -c core.longpaths=true <your.url.here>
xandermonkey
fuente
1
¡Salud! Esto ha funcionado muy bien al clonar un nuevo directorio de github.
Jay Killeen
¡No hay problema, me alegro de que haya ayudado!
xandermonkey
1
¡Si! Este, y para la clonación, ¡solo este funciona!
Gangnus
Esto no funciona, mi clonación aún se aborta. Estoy usando git version 1.8.4.msysgit.0, ¿alguna idea?
Simple-Solution
Parece que está obsoleto . ¿Quizás intente usar git-scm? ¿Qué error obtienes?
xandermonkey
12

Abra su archivo.gitconfig para agregar la propiedad longpaths. Entonces se verá así:

[core]
symlinks = false
autocrlf = true
longpaths = true
Pete
fuente
1
De esa forma no funcionará para la clonación / pago con la creación de un nuevo directorio. Solo la respuesta de @AlexRosenfeld ayudará.
Gangnus
6

Como alguien que se ha encontrado con este problema constantemente con los repositorios de Java en Windows, la mejor solución es instalar Cygwin ( https://www.cygwin.com/ ) y usar su instalación de git en all> devel> git.

La razón por la que esta es la mejor solución con la que me he encontrado es porque Cygwin administra los nombres de las rutas largas para que otros comandos proporcionados se beneficien. Ej .: encontrar, cp y rm. Créame, el verdadero problema comienza cuando tiene que eliminar nombres de ruta que son demasiado largos en Windows.

Tristan
fuente
4

Intente mantener sus archivos más cerca de la raíz del sistema de archivos. Más detalles: por razones técnicas, Git para Windows no puede crear archivos o directorios cuando la ruta absoluta tiene más de 260 caracteres .

Michael Ver
fuente
Parece que solo puede ir a 130 [tal vez Windows use caracteres Unicode de doble byte debajo] de forma predeterminada [?]
rogerdpack
5
Más personas deberían presionar a Microsoft para que cambie esta restricción (y arregle las API heredadas que rompen). No hay ninguna razón por la que debamos seguir viviendo con este remanente de días en que los nombres de archivo estaban restringidos a <8>. <3> caracteres. Al no arreglarlo de inmediato, se está cavando un agujero más grande. Fija la dirección de la barra mientras estás en ella.
cchamberlain
@cchamberlain C: / foo / bar / baz es perfectamente válido, aunque mientras \ foo \ bar \ baz también es válido (se referirá a cualquier unidad lógica en la que se encuentre el directorio de trabajo actual) / foo / bar / baz puede causar ambigüedad con banderas de la línea de comandos.
JAB
@JAB: es cierto que la barra inclinada funciona a veces, pero como señaló, no es confiable. cmd.exe reaccionará de una forma y PowerShell de otra. Autocompletar descansos. La API subyacente lo comprende, pero cmd.exe no en todos los casos y el uso más seguro de la barra invertida hace que las cadenas a veces necesiten escapar. Ya hay suficiente basura de barra invertida en la línea de comandos con la cantidad de espacios y paréntesis que existen en las rutas comunes de Windows.
cchamberlain
2
No es una solucion. La tecnología debe estar al servicio del hombre, no el hombre debe estar al servicio de la tecnología.
Daniel Hári
4

En Windows, ejecute "cmd" como administrador y ejecute el comando.

"C:\Program Files\Git\mingw64\etc>"
"git config --system core.longpaths true"

o tienes que usar chmod para la carpeta donde sea que esté instalado git.

o manullay actualice su archivo manualmente yendo a la ruta "Git \ mingw64 \ etc"

[http]
    sslBackend = schannel
[diff "astextplain"]
    textconv = astextplain
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[credential]
    helper = manager
**[core]
    longpaths = true**
Kumar Abhishek
fuente