Say your git repo consists of a subdirectory “app” and a subdirectory “database” (or “frontend” and “backend” or “team-a” and “team-b”) and you realize each directories content should be in its own repository. Here is how to split the repo.
To create a repo that consists of the content of the “database” dir and its history, execute
1 |
git filter-branch --prune-empty --tag-name-filter cat --subdirectory-filter database -- --all |
and then push it to a new remote:
1 2 3 4 |
git remote rename origin old-origin git remote add origin <new-remote> git push -u origin --all git push -u origin --tags |
This is what Gitlab states on a newly created project page. However in git push -u origin --all “-all” should be replaced with “–mirror” because “-all” pushes all local branches only so you would need to checkout all branches you want to keep. “–mirror” pushes remote branches, too.
In the same fashion apply “filter-branches” to the “app” directory.