2011-01-21 7 views
5

Estoy escribiendo un fast-export/fast-import para pero estoy teniendo problemas con los directorios y los archivos que contienen espacios en sus nombres.Formato y espacios de exportación rápida de git

Por ejemplo, un git fast-export de algo así como:

git mv "new directory" "second directory" 

termina siendo exportado como:

D new directory/hello.c 
M 100644 :1 second directory/hello.c 

En lugar de un "move" (R) operación. Lo mismo sucede con un archivo con espacios en el nombre.

¿Hay alguna manera de manejarlo correctamente?
¿Significa que Git no puede manejar los cambios de nombre en las rutas con espacios?

Editado con un ejemplo real a continuación:

Tengo algo como esto en una confirmación:

R src/samples/sampledata src/samples/samplebase 
* R src/samples/samplebase/Test.Workflow.xml src/samples/samplebase/new/Test.Workflow.xml 

y falla la importación diciendo

fatal: Path src/samples/samplebase/Test.Workflow.xml not in branch 

Por lo tanto, entiendo que doesn Soporta un movimiento de un directorio y luego un movimiento de un archivo dentro ... Es un poco raro, ¿no?

Respuesta

2

git fast-import menciona en la sección "Handling rename":

Al importar un archivo o directorio ha cambiado el nombre, sólo tiene que borrar el nombre (s) de edad y modificar el nuevo nombre (s) durante el correspondiente compromiso. Git realiza la detección de renombre después de los hechos, en lugar de hacerlo explícitamente durante una confirmación.

Así que su ejemplo parece seguir esa lógica.

No olvide que Git no tiene directorios de versiones, solo blob (es decir, contenido de archivos con una ruta asociada).


Para agregar a su pregunta Editado:

  • un movimiento de un directorio de los medios, si se importan en Git, que la fuente (directorio) tendrá que ser eliminado después de que todos los archivos han sido procesado (es decir, importado, renombrado o no)
  • un movimiento de un archivo, cuando se importa en Git, es un clásico git mv.

En 2011, el OP has posted a question on the old gmane list.
Y el problema es currently (2017) discussed in Git for Windows (git-for-windows/git issue 908).

+0

Esto es confuso porque la operación de "cambio de nombre" también es compatible: nombre de archivo Cambia el nombre de un archivo o subdirectorio existente a una ubicación diferente dentro de la bifurcación. El archivo o directorio existente debe existir. Si el destino existe, será reemplazado por el directorio de origen. 'R' SP SP LF – pablo

+0

@pablo: He editado mi respuesta para abordar su situación. No mueves un directorio cuando importas en Git. Simplemente lo elimina después de procesar todos los archivos. – VonC

+0

@vonc: ok, entonces, ¿básicamente significa que no puedes usar "mover" haciendo una importación de git? Eso no es lo que dice la documentación, pero lo estoy intentando en este momento y no funciona haciendo movimientos, desafortunadamente. El problema es que parece ser bastante aleatorio: un directorio se renombra de mayúscula a minúscula, luego 1000 commits más tarde falla un archivo, mientras que otros se modifican e importan correctamente entre estos dos commits. Parece que "mover" es compatible con la importación rápida de git para que otros SCM que manejan correctamente los movimientos puedan exportar fácilmente, pero (a menos que tenga algo mal aquí), realmente no funciona. – pablo

Cuestiones relacionadas