Git is an indispensable tool for a developer. But what if you have a local code repository that you need to push to multiple remote repositories (e.g. GitHub and Bitbucket).
Well, one solution is to set multiple upstream for a repository and push to them separately.
Another solution is to keep both the remote repositories in sync and update both repositories with a single push command.
Let's look at the first solution.
First, let’s clone the existing remote Git repository. CD into your directory where code is located and run the following command:
git init
This will initialize the git repository. So, now we have a local git repository.
Now we need to tell the local repository to connect to a remote upstream:
git remote add origin git@github.com:[username]/[repository]
You can check all the current remotes by running the following command:
git remote -v
It should show you only one remote named origin
.
Now let’s add another remote to the current local repository:
$ git remote add remote_name remote_url
e.g.
git remote add github http://github.com/path/to/repo
Now you can push to the main remote branch as:
git push origin <branch-name>
And you can push to the new remote branch as:
git push github <branch-name>
Now let’s look at the second solution:
We can push to multiple remotes at once by setting multiple remotes. This is will allow us to push to many remotes with a single git push.
First, we need to clone our repository, or create one fresh and configure it like a single remote as origin.
git remote add origin git@github.com:[username]/[repository]
Now let’s set the multiple remote URLs including the one we already set above.
git remote set-url --add --push origin git@github.com:[username]/[repository]
git remote set-url --add --push origin git@bitbucket.org:[username]/[repository]
To check for the above changes, type:
git remote -v
It should show us something like this:
origin git@github.com:[username]/[repository] (fetch)
origin git@github.com:[username]/[repository] (push)
origin git@bitbucket.org:[username]/[repository] (push)
So, now a git fetch or git pull will fetch from the first URL in that list, and a git push will push to all push URLs. I find this a really useful solution to use if you’ve got a repository mirrored on GitHub and Bitbucket or other places and you want to keep both the upstream in sync.