When it comes to version control I am more and more convinced by Git and it’s superb branching model. Lately I was confronted with the need to merge two GIT repositories. Per se this should not be difficult, but if the commit history should be preserved it might become a bit tricky! This article explains an easy way to do this without the help of any third party tools.
The setup for merging the repositories looks as follows:
- Main repository:
- Feature repository:
So the repository
feature is a subfolder in the main repository.
This is a common pattern if you’re using Git submodules.
There are a few tools out there that can handle this (
example), but I wanted to keep the main repository as-is, so this wasn’t
At least I do not know how to use/configure the tools in that manner and
the method I discovered worked without problems, so why bother?
Step by Step Guide
Step 1 - Create a bundle of the feature repository. I assume that you have all changes committed to the master branch.
cd feature git bundle create feature.bundle master
Step 2 - Import the code into a new branch of the main repository and check it out.
cd .. git fetch feature/feature.bundle master:master-feature git checkout master-feature
Step 3 - Move the files into a subdirectory called
to also move hidden ones like the
ls -la in order to
mkdir feature git mv -k * feature git mv .gitignore feature/ ls -la git commit -a -m"moving feature stuff in subfolder"
Step 4 - Merge the feature into the master branch of the main repository.
git checkout master git merge master-feature git branch -d master-feature
By following these steps you should be able to import any subrepositories back into the main repository. Of course this method will leave you with two merged history lines, this means that there are two “initial commits” of the repository.