example develop commands windows git filepath git-checkout

windows - develop - git checkout error: no se puede crear el archivo



git commands (5)

Al clonar un repositorio git de Linux a un sistema Windows, recibo el siguiente error en la comprobación de la fase:

$ git clone gituser @ serveraddr: /git/git_repo.git git_WA
Clonando en ''git_WA'' ...
Contraseña de gituser @ serveraddr:
remoto: contando objetos: 500846, hecho.
remoto: Compresión de objetos: 100% (118676/118676), hecho.
remoto: Total 500846 (delta 307739), reutilizado 483023 (delta 291136)
Objetos de recepción: 100% (500846/500846), 907.54 MiB | 9.04 MiB / s, hecho.
Resolución de deltas: 100% (307739/307739), hecho.

error: no se puede crear el archivo RealR ******************************************* *************************************************** *************************************************** *************************************************** ************* validation.xml (No existe tal archivo o directorio)
Salida de archivos: 100% (441329/441329)
Revisando archivos: 100% (441329/441329), hecho.
hecho.

Caso 2: clonado como repo desnudo, retirado todo del repo desnudo localmente => Mismo error.

Caso 3: Clone el repositorio en C: / directamente, el proceso de pago se realizó correctamente, No hay error.

-> Parece un problema con la limitación de longitud de nombre de archivo / ruta de archivo.

Caso 4: compra los mismos archivos del repositorio SVN. Capaz de realizar el pago en cualquier lugar sin ningún problema. Por lo tanto no hay problema desde el lado de las ventanas. (Sí, tengo datos en SVN y GIT ambos, acabo de migrar de SVN a GIT).

Por lo tanto, el problema tiene que estar dentro de msysgit, alguna limitación de longitud de ruta de archivo. ¿Se puede modificar la longitud del camino en gitclient / msysgit?

Edit1: Todas las operaciones intentadas con el cliente TortoiseGIT v1.8.0 y git-bash: git versión 1.8.0.msysgit.0 .
Edit2: Añadido el comando real utilizado durante la clonación.


Experimenté problemas similares al registrar un proyecto en un directorio de Windows que tenía una ruta de base de caracteres de 67 (Windows) o 76 (cygwin); cuando se agrega a la longitud de la ruta de los archivos extraídos, excedía la ruta de Windows límite de longitud:

git checkout -f HEAD error: unable to create file <194-character filepath> (No such file or directory) fatal: cannot create directory at ''<187-character directory path>'': No such file or directory

Resolví el problema comprobando en c: / git, que, con 6 o 15 caracteres de longitud, mantenía la longitud de ruta máxima por debajo del límite de Windows.


La única sugerencia que vi, considerando un tema similar , fue:

Solución: utilizar http://www.cygwin.com/

O al menos, compruebe si un pago en una sesión de gys -bash de msysgit funciona mejor.

Actualización de mayo de 2015 (2 años después):

Nota: las últimas 2.4.1 git-for-windows propone :

core.longpaths::

Habilite el soporte de ruta larga (> 260) para los comandos incorporados en Git para Windows.
Esto está deshabilitado de forma predeterminada, ya que el Explorador de Windows, cmd.exe y la cadena de herramientas de Git para Windows no admiten las rutas (msys, bash, tcl, perl ...).
Solo habilita esto si sabes lo que estás haciendo y estás preparado para vivir con algunas peculiaridades.


Muchas API de Windows están limitadas a 260 símbolos para el nombre de la ruta del archivo. Así que git no puede crear archivos con nombres de más de 260 símbolos. El sistema de archivos NTFS en realidad admite nombres más largos (32k), pero no hay una manera fácil de permitir nombres largos para programas.

Solución 1: mueva su proyecto a una nueva ubicación, más cerca de la raíz del disco. Ventaja:

  • Todo debería funcionar bien (suponiendo que no haya archivos con una ruta más larga de 260)

Desventaja:

  • Tienes que cambiar la ubicación del proyecto

Solución 2: cree una Junction a la carpeta de su proyecto desde una carpeta que esté más cerca de la raíz del disco y haga clones git desde la carpeta de la unión. Puede hacer esto con el comando mklink o Link Shell Extension .

Ventaja:

  • Puede tener nombres de archivo largos (más de 260)
  • Puede conservar la ubicación del proyecto
  • Puede eliminar de forma segura la unión después de la clonación inicial (si no necesita trabajar con archivos que violan el límite de 260 símbolos en la ubicación original)

Desventaja:

  • El nombre completo del archivo en el cruce todavía debe tener menos de 260 símbolos. De lo contrario, esta solución no ayudará.
  • Si quieres modificar los archivos con mucho tiempo.

Tratar:

git config --system core.longpaths true

Esto le permitirá revisar los archivos incluso con rutas de archivo más largas. El problema con esto sería cuando intentas eliminarlo, ya que Windows no permitirá eliminar una ruta más larga que su umbral permitido. La solución a esto es cambiar el nombre de las carpetas en el repositorio local, de modo que se reduzca la longitud total de la ruta. Por ejemplo, una ruta que es alpha / beta / gamma / universe.txt, puede limitarse a 1/2/3 / universe.txt, de modo que su longitud esté por debajo del umbral del tamaño de archivo de Windows.


Utilice Windows PowerShell. Trabajó para mi.