Git Filter Repo
Welcome to 2021! This is my first blog post of the new year and I’m excited to get back to writing. Let’s dive right in.
The Task: Pulling a Frontend Repository From a Combined Frontend/Backend Project
I’ve worked on a project for some time that has one GitHub repository containing both the frontend and backend applications.
PROJECT/
.git/
BACKEND/
FRONTEND/
Recently, it finally came time to split these applications apart:
BACKEND/
.git/
APP/
FRONTEND/
.git/
APP/
Preserving Git History
One obviously problem with creating a new repository from a subfolder is preserving git history. Losing years of git history or losing current branches in development would have been a non-starter.
This post shares the exact steps I used to create a new frontend repository from the project while preserving git history. The key here was a tool called git filter-repo. The git CLI itself advised me to use git filter repo instead of the native git filter-branch command.
Instructions
- Install git-filter-repo
brew install git-filter-repo
- Change directories to the location where you would like to create the new frontend repository
cd ~
- Clone down the original PROJECT repository and change directories
git clone [email protected]:[PROJECT]
cd PROJECT
- Run git filter-repo
git filter-repo --subdirectory-filter FRONTEND/ --tag-rename '':'frontend'
-
Create FRONTEND repository in GitHub
-
Add the remote branch
cd FRONTEND
git remote add origin [email protected]:[FRONTEND]
git branch -M main
git push -u origin main
- Push all git branches to the remote
git push remote --all
And that’s it! I hope you found this post useful and thank you for reading.