Etapas manuais com comandos simples do git
O plano é dividir diretórios individuais em seus próprios repositórios e depois mesclá-los. As etapas manuais a seguir não empregaram scripts geek-to-use, mas comandos fáceis de entender e podem ajudar a mesclar N subpastas extras em outro repositório único.
Dividir
Vamos supor que seu repo original seja: original_repo
1 - Aplicativos divididos:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Bibliotecas divididas
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Continue se você tiver mais de 2 pastas. Agora você deve ter dois repositórios git novos e temporários.
Conquiste mesclando aplicativos e bibliotecas
3 - Prepare o novo repositório:
mkdir my-desired-repo
cd my-desired-repo
git init
E você precisará fazer pelo menos um commit. Se as três linhas a seguir forem ignoradas, seu primeiro repo aparecerá imediatamente abaixo da raiz do repo:
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"
Com o arquivo temporário confirmado, o merge
comando na seção posterior será interrompido conforme o esperado.
Partindo do feedback do usuário, em vez de adicionar um arquivo aleatório como a_file_and_make_a_commit
, você pode optar por adicionar um .gitignore
, ou README.md
etc.
4 - Mesclar aplicativos repo primeiro:
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"
Agora você deve ver o diretório de aplicativos dentro do seu novo repositório. git log
deve mostrar todas as mensagens de confirmação históricas relevantes.
Nota: como Chris observou abaixo nos comentários, para a versão mais recente (> = 2.9) do git, é necessário especificar --allow-unrelated-histories
comgit merge
5 - Mesclar repositório de libs a seguir da mesma maneira:
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"
Continue se você tiver mais de 2 repositórios para mesclar.
Referência: Mesclar um subdiretório de outro repositório com o git