2012-09-08 9 views
7

Sé que puedo crear un nuevo repositorio a partir de un directorio de un repositorio de git. Vea aquí: https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/¿Cómo puedo copiar un directorio de un repositorio git a otro, preservando el historial?

Sin embargo, ¿cómo puedo copiar un directorio de un repositorio a un nuevo directorio de otro repositorio completamente diferente, mientras mantengo el historial de ese directorio?

Actualización: ¿es posible que ese historial aparezca con el registro de git?

+0

La URL de GitHub es ahora: https://help.github.com/articles/splitting-a-subpath-out- into-a-new-repository –

Respuesta

6

Puede hacer esto con git filter-branch. Básicamente, querrá:

  1. Divida el subtrayecto en el primer proyecto en un nuevo repositorio, utilizando el enlace que ya ha encontrado.
  2. Introdúzcalo en el control remoto del segundo proyecto en una sucursal única.
  3. Fetch que se ramifican en el segundo repositorio, a continuación, utilizar git filter-branch al índice de filtro en el subdirectorio correcto:

    git filter-branch --index-filter ' 
        git ls-files -sz | 
        perl -0pe "s{\t}{\tnewsubdir/}" | 
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
         git update-index --clear -z --index-info && 
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" 
    ' HEAD 
    
  4. Por último, comprobación la rama master del segundo proyecto (o lo que sea que estés rama usando), luego se fusiona en la rama recién filtrada.

Operación realmente no demasiado horrible, en total. Como señala AlexanderGladysh en los comentarios, también puede usar un subtree merging strategy en el lugar de los pasos 3 y 4.

+0

¿No podría usar una estrategia de combinación de subárbol en lugar de los pasos 3 y 4? –

+0

@AlexanderGladysh Sí. Podrías hacerlo con una estrategia de fusión de subárbol. Edité la respuesta en consecuencia. – Christopher

+0

Hmm. Decidí ir con una estrategia de combinación de subárboles. Un problema es que el registro de git en ese directorio solo muestra la última fusión de la confirmación no toda la historia :(. ¿Eso es lo esperado? – namin

Cuestiones relacionadas