How to Split a Subdirectory to a New Git Repository and Keep the History

1 min read 206 words

There comes a time when you need to split out a subdirectory into it’s own git repo.

This is a very simple task if you don’t care about persisting the git history for any changes that were made in that subdirectory.

However, if you would like to keep all the history of the subdirectory only, and not of the overall entire repository itself, then you can perform the following bunch of steps:

Step 1: Clone your existing repo to a temp location

git clone https://github.com/ao/your_repo.git
cd your_repo

Step 2: Checkout the branch where the subdirectory is

git checkout your_branch_name

Step 3: Run the Git Filter-Branch Command

The git filter-branch command allows you to prune empty entries and specify a subdirectory filter to base off:

git filter-branch --prune-empty --subdirectory-filter relative/path/to/subdirectory your_current_branch_name

Step 4: Update your new Git Remote

At this stage, you can go and create a new git repository, and copy the path:

git remote set-url origin https://github.com/ao/your_new_sub_repo.git

Step 5: Push your changes

You can now push your changes to your new repository:

git push -u origin your_current_branch_name

As a runnable script

git clone https://github.com/ao/your_repo.git
cd your_repo
git checkout your_branch_name
git filter-branch --prune-empty --subdirectory-filter relative/path/to/subdirectory your_current_branch_name
git remote set-url origin https://github.com/ao/your_new_sub_repo.git
git push -u origin your_current_branch_name
Tags:
Andrew
Andrew

Andrew is a visionary software engineer and DevOps expert with a proven track record of delivering cutting-edge solutions that drive innovation at Ataiva.com. As a leader on numerous high-profile projects, Andrew brings his exceptional technical expertise and collaborative leadership skills to the table, fostering a culture of agility and excellence within the team. With a passion for architecting scalable systems, automating workflows, and empowering teams, Andrew is a sought-after authority in the field of software development and DevOps.

Tags