repositorio - git push tag
Cómo hacer parte de un repositorio GIT existente un submódulo (2)
Hoy hay una mejor manera de hacer esto: git subtree
Ver esta respuesta
Tengo este repositorio git que contiene dos carpetas: binary-search
y poker
. Por ejemplo, http://github.com/soulnafein/code-katas
Me gustaría convertir estas carpetas en submódulos y mantener su historial de cambios.
¿Cómo puedo hacer eso?
La idea general es usar '' git filter-branch'' y los siguientes pasos:
1) Cree un submódulo utilizando - subdirectorio-filtro de filter-branch
(después de clonar su repositorio).
$ git filter-branch --subdirectory-filter ABC HEAD -- --all
Vea esta pregunta SO para más información sobre este paso.
2) Cree un superproyecto utilizando un filtro de índice de filter-branch
de filter-branch
para eliminar el submódulo.
$ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch ABC" --prune-empty HEAD
3) Confirme el submódulo con la última versión del superproyecto.
Vea el subdirectorio Separar en un repositorio git separado para ver un ejemplo práctico.
Cada submódulo conservará su historia.
Pero como se dijo en esta propuesta de parche , sería:
pierda todas las conexiones históricas entre el superproyecto y el submódulo, rompiendo herramientas como ''
git bisect
'' y dificultando la recuperación de versiones anteriores.Idealmente, cada versión del superproyecto recién creado se vincularía a la versión correcta del submódulo (y todas las entradas de .gitmodules también se configurarán correctamente a lo largo del historial del proyecto)
Si no necesita tener un historial anterior vinculado a los nuevos submódulos, puede seguir los pasos mencionados anteriormente.
Pero si necesita derivar de un punto anterior mientras tiene referencias a sus submódulos (que actualmente son subdirectorios simples), podría considerar probar el script mencionado en el parche al que me refiero. Se discute en este hilo , pero integrado a Git aún, como dice Junio C Hamano:
Desafortunadamente, no creo que hayamos diseñado un comportamiento completo (ni implementado en absoluto) para revisar diferentes puntos de la historia que tienen el mismo submódulo movido en el árbol de superproyectos.