I had a repository for which I needed the remote to be hosted both at BitBucket and GitHub. So, I figured out a few easy solutions to deal with it.
A few EASY solutions.
I had a repository for which I needed the remote to be hosted both at BitBucket and GitHub. So, I figured out a few easy solutions to deal with it.
A few EASY solutions.
This is the easiest to get your head around, but the most effort to maintain.
We start out by adding our new remote:
$ cd myproject
$ git remote add bitbucket ssh://[email protected]/user/myproject.git
$ git push bitbucket master
Straight forward no? Except of course every time we commit any changes, we need to push to both our original “origin” and our new remote “bitbucket”:
$ git push origin master
$ git push bitbucket master
Not a massive overhead, but I’m sure it will grate over time. Or you can create an alias alias gpob="git push origin master && git push bitbucket master"
. That goes in your bash or zsh profile.
With this method, we are going to add an additional URL to our existing remote “origin”:
$ cd myproject
$ git remote set-url --add origin ssh://[email protected]/user/myproject.git
$ git push origin master
Everything up-to-date
Everything up-to-date
Of course silver lining has a cloud, and in this case, it is that while we can push to multiple URLs simultaneously, we can only fetch from the original origin
(you can change this, but that is out of scope for this post).
Finally, to see which remote will be fetched from:
$ git remote -v show
Stay ahead in the web dev community with Ahmad's expert insights on open-source, developer relations, dev-tools, and side-hustles. Insider-email-only-content. Don't miss out - subscirbe for a dose of professional advice and a dash of humor. No spam, pinky-promise!
Pretty neat trick. Awesome!
Glad you liked it.
Or the origin can only be on bitbucket and you can use post web hooks on bitbucket to send a custom URL every time a push request is made. That URL can host a file containing instructions to make a pull on your repo on github. Not sure this is a good idea. Would be happy to hear what you think!
That would contain one too many dependencies, this however is automate-able!
Exactly. That was my point :) Used it once and worked perfectly in my scenario.
Glad I was able to help!
Pretty cool stuff! Thanks for sharing!
Glad you liked it! 💯
Hi Ahmad,
Is it possible to revert it. I’m getting the error below:
warning: remote.origin.url has multiple values
fatal: could not set ‘remote.origin.url’ to “…”
Ok, reverted it in .git/config
Thanks for the article…do we have to this remote add for all the repos separately or is there a way to do this for all the repos simultaneously? I am trying to clone repos in Bitbucket and gitlab but I have more than 25 repos, so it would be really great if i can do this in all the repos in a single or very few steps instead of adding it individually for all the repos….Thanks!!
Any way we can do the same changes for all the projects at the same time?