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.
large-application
├── module-a
├── module-b
└── module-cSince 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-applicationFor 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-aAfter this we create a new empty Git repository for module-a.
mkdir ~/new-repo
cd ~/new-repo
git initAlright, 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-aThis 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.