Split large Git repositories
Recently I had to split a large application into several smaller applications. The source code of that application was in single Git repository and had well-encapsulated modules within its own sub directories such as module-a.
Since the modules where already encapsulated the main goal was to extract the modules into new dedicated Git repositories. And here is how I achieved it.
Mission: Extraction
First let's start by going into the Git repository of the large application.
cd ~/large-application
For now we concentrate on extracting module module-a and we do this by telling Git to create a subtree
of your directory and store that subtree in a new branch called feature/split-module-a
.
git subtree split -P module-a -b feature/split-module-a
After this we create a new empty Git repository for module-a.
mkdir ~/new-repo
cd ~/new-repo
git init
Alright, we are about done here. All we need to do is to move the extracted branch from the source Git repository to the target Git repository.
git pull ~/large-application feature/split-module-a
This is it. Now your new repo contains only the module-a related commits in the new Git repository.
This post is inspired by the following answer at Stackoverflow.