¿Cómo puedo mover un solo directorio de un repositorio git a un nuevo repositorio mientras mantengo el historial?

StackOverflow https://stackoverflow.com/questions/811251

  •  03-07-2019
  •  | 
  •  

Pregunta

He heredado un repositorio git que contiene varios proyectos en directorios separados. Me gustaría dividir el repositorio en nuevos repositorios individuales, uno para cada proyecto y luego hacer que el repositorio principal contenga los proyectos como submódulos. Me gustaría hacer todo esto manteniendo el historial de revisión de los proyectos individuales si es posible.

Podría clonar el repositorio de cada proyecto y eliminar todos los demás proyectos cada vez, pero ¿hay una mejor manera de evitar tener el historial clonado en cada nuevo repositorio de proyectos?

¿Fue útil?

Solución

Puede usar git filter-branch Para reescribir la historia de un proyecto. De la documentación:

  

Para volver a escribir el repositorio para que se vea como   Si foodir / hubiera sido su raíz de proyecto,   y descarta el resto del historial:

git filter-branch --subdirectory-filter foodir -- --all

Haga varias copias de su repositorio, hágalo para cada subdirectorio que desee dividir, y debería terminar con lo que está buscando.

Otros consejos

Para exportar una carpeta como un nuevo repositorio que necesita:

  1. Para clonar el repositorio donde se encuentra la carpeta que desea exportar.
  2. Para crear un repositorio vacío en su proveedor de alojamiento como GitHub, para almacenar la carpeta exportada.
  3. Abra la carpeta del repositorio clonado y ejecute este comando:

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
    

El punto de git es que el historial se encarna en cada confirmación mediante el hashing de la confirmación principal. Podrías " repetir " las confirmaciones (esto es esencialmente cómo funciona el svn-importador) en un nuevo repositorio y solo conservando cada subproyecto. Esto, sin embargo, destruiría el significado de los hashes de confirmación. Si no tienes ningún problema con eso, que así sea.

En el pasado lo cloné y seguí adelante. Esto hace las cosas más grandes, pero el espacio en disco es barato; mi tiempo es caro.

Tampoco conozco ninguna herramienta para empalmar un directorio. Supongo que podría git-log en el directorio para encontrar todos los commits en él y luego reproducir los commits con algo como git-fast-export?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top