Merging Three Git Repositories Into One Repository Without Losing File History

No comments on Merging Three Git Repositories Into One Repository Without Losing File History

Written by

in

Let’s assume that we have three separate git repos named uremont-client, uremont-service, uremont-sdk. We want to create a new repo, named uremont-ios, that contains all those repos in separate folders to have one single repo.

Why do we want to do this? In my case I had two apps and one sdk for them, and it was inconvenient for me to push changes to three separate repos while I was working with these projects and sdk at the same time.

Let’s start.

Terminal setup to allow git to move all folders except one. We will need this later.

$ shopt -s extglob

Create a new folder uremont-ios and initialize git repo:

$ mkdir uremont-ios 
$ cd uremont-ios
$ git init

Add remote of first old project uremont-client that we want to merge to the new git repo and fetch it:

$ git remote add -f uremont-client git@bitbucket.org:wzbozon/uremont.git

Merge first old project uremont-client to the new repo:

$ git merge uremont-client/master --allow-unrelated-histories

Move all folders and files of that old project to the separate folder inside of our new project:

$ mkdir uremont-client
$ git mv ./!(uremont-client) ./uremont-client

Commit changes:

$ git commit -m 'Move uremont-client files into subdir'

Similarly merge second old project uremont-service to the new repo:

$ git remote add -f uremont-service git@bitbucket.org:wzbozon/uremontservice.git
$ git merge uremont-service/master --allow-unrelated-histories
$ mkdir uremont-service
$ git mv ./!(uremont-client|uremont-service) ./uremont-service
$ git commit -m 'Move uremont-service files into subdir'

And third:

$ git remote add -f uremont-sdk git@bitbucket.org:wzbozon/uremont-sdk.git
$ git merge uremont-sdk/master --allow-unrelated-histories
$ mkdir uremont-sdk
$ git mv ./!(uremont-client|uremont-service|uremont-sdk) ./uremont-sdk
$ git commit -m 'Move uremont-sdk files into subdir'

Finally, add a new remote to our new repo and push it:

$ git remote add origin git@bitbucket.org:wzbozon/uremont-ios.git
$ git push -u origin master

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *