Pregunta

Tengo este repositorio de 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 conservar su historial de cambios.

¿Cómo puedo hacer eso?

¿Fue útil?

Solución

La idea general es utilizar 'git filtro-rama' y los siguientes pasos:

1) Cree un submódulo usando --subdirectory-filter de filter-branch (después de clonar su repositorio).

$ git filter-branch --subdirectory-filter ABC HEAD -- --all

Mira esto Entonces pregunta para obtener más información sobre este paso.

2) Crear un superproyecto usando un filtro de índice 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.

Ver Separe el subdirectorio en un repositorio git separado para un ejemplo práctico.

Cada submódulo mantendrá su historial.
Pero como se dice en este propuesta de parche, sería:

perder todas las conexiones históricas entre el superproyecto y el submódulo, rompiendo herramientas como 'git bisect', y dificulta la recuperación de versiones antiguas.

Idealmente, cada versión del superproyecto recién creado estaría vinculada a la versión correcta del submódulo (y todas las entradas .gitmodules también estarían configuradas correctamente a lo largo del historial del proyecto)

Si no necesitas tener el historial previo vinculado a los nuevos submódulos, puedes seguir los pasos mencionados anteriormente.
Pero si necesita realizar una bifurcación desde 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 todavía está integrado en Git, como dice Junio ​​C Hamano:

Desafortunadamente, no creo que hayamos diseñado completamente (ni implementado en absoluto) un comportamiento para verificar diferentes puntos de la historia en los que el mismo submódulo se mueve en el árbol del superproyecto.

Otros consejos

Hoy en día hay una mejor forma de hacer esto: git subtree

esta respuesta .

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