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!
Daniel
Pretty neat trick. Awesome!
Ahmad Awais
Glad you liked it.
Muhammad Arslan Aslam
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!
Ahmad Awais
That would contain one too many dependencies, this however is automate-able!
Muhammad Arslan Aslam
Exactly. That was my point :) Used it once and worked perfectly in my scenario.
AhmadAwais
Glad I was able to help!
Lorenzo
Pretty cool stuff! Thanks for sharing!
Ahmad Awais
Glad you liked it! 💯
Aydın
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 “…”
Aydın
Ok, reverted it in .git/config
Abhay
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!!
Abhay
Any way we can do the same changes for all the projects at the same time?