git filter-repo
es una operación común cuando un proyecto crece tanto que un subdirectorio merece convertirse en un repositorio propio.
Esta es la herramienta oficial recomendada por Git actualmente. Si no la tienes, puedes instalarla (suele requerir Python: `pip install git-filter-repo` o 'apt install git-filter-repo).
aplicar
- Clona una copia limpia del repositorio original (por seguridad, no trabajes sobre tu carpeta actual):
git clone --no-local /ruta/al/repo_original repo-subdirectorio cd repo-subdirectorio
- Filtra el directorio que quieres separar:
git filter-repo --path nombre-del-directorio/
- ¿Qué hace esto? Borra todo lo que no esté en esa carpeta, mueve el contenido de la carpeta a la raíz del repositorio y reescribe todo el historial para que parezca que los demás archivos nunca existieron.
- Añade el nuevo remoto de Gitea y sube el contenido:
git remote add origin ssh://git@git.fidmag.org:2222/usuario/nuevo-repo.git git push -u origin main
consideraciones
- LFS: Si el directorio que separas contiene archivos LFS, asegúrate de que los objetos LFS también se migren. Al usar `git-filter-repo`, el historial de LFS suele mantenerse, pero tendrás que hacer un `git lfs push –all` al nuevo Gitea.
- Limpieza en el origen: Una vez que el nuevo repositorio sea independiente y funcione bien, recuerda borrar ese directorio del repositorio original para no mantener código duplicado:
git rm -r nombre-del-directorio git commit -m "Eliminado directorio migrado a repositorio independiente" git push
- Tags: Ambos métodos intentan preservar los *tags* (etiquetas) que hacían referencia a archivos en ese directorio, lo cual es ideal para mantener las versiones históricas.