Pasos manuales con comandos simples de git
El plan es dividir directorios individuales en sus propios repositorios, luego fusionarlos. Los siguientes pasos manuales no empleaban scripts geek-to-use, sino comandos fáciles de entender y podían ayudar a fusionar subcarpetas N adicionales en otro repositorio único.
Dividir
Supongamos que su repositorio original es: original_repo
1 - Aplicaciones divididas:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Librerías divididas
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Continúe si tiene más de 2 carpetas. Ahora tendrá dos repositorios git nuevos y temporales.
Conquista mediante la fusión de aplicaciones y bibliotecas
3 - Prepare el nuevo repositorio:
mkdir my-desired-repo
cd my-desired-repo
git init
Y deberá realizar al menos una confirmación. Si se deben omitir las siguientes tres líneas, su primer repositorio aparecerá inmediatamente debajo de la raíz de su repositorio:
touch a_file_and_make_a_commit # see user's feedback
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
Con el archivo temporal comprometido, el merge
comando en la sección posterior se detendrá como se esperaba.
Tomando de los comentarios del usuario, en lugar de agregar un archivo aleatorio como a_file_and_make_a_commit
, puede elegir agregar un .gitignore
, o README.md
etc.
4 - Combinar repositorio de aplicaciones primero:
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master # see below note.
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
Ahora debería ver el directorio de aplicaciones dentro de su nuevo repositorio. git log
debería mostrar todos los mensajes de confirmación históricos relevantes.
Nota: como Chris señaló a continuación en los comentarios, para la versión más nueva (> = 2.9) de git, debe especificar --allow-unrelated-histories
congit merge
5 - Fusionar libs repo a continuación de la misma manera:
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master # see above note.
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
Continúe si tiene más de 2 repositorios para fusionar.
Referencia: fusionar un subdirectorio de otro repositorio con git