Setting up a seperate Github and Bitbucket account
If you want to have private repositories at Bitbucket and public repositories at Github, then this is the guide for you.
This guide assumes:
If you want to have private repositories at Bitbucket and public repositories at Github, then this is the guide for you.
This guide assumes:
mix3d asked for some help using this guide with windows so here we go. This was tested with Windows 10. Run all commands in Git Bash once it's installed.
Github will be the main account and bitbucket the secondary.
git config --global user.name "Your Name"
git config --global user.email "username@email.com"
Confirm changes: git config --global -l
Right click on desktop and choose Git Bash here
Enter cd
to get to home directory (c:/Users/[username])
ssh-keygen -t rsa -b 4096 -C "your github email"
Enter passphrase when prompted
Save keys to: ~/.ssh/id_rsa
Repeat for bitbucket: ssh-keygen -t rsa -b 4096 -C "bitbucket email"
Save bitbucket key to ~/.ssh/id_rsa_bb
Login to remote git provider and add ssh key:
clip < ~/.ssh/id_rsa.pub
clip < ~/.ssh/id_rsa_bb.pub
Obviously run each clip
command individually.
Paste into text area, under ssh settings, in your github or bitbucket account. Also give the ssh key a title like "your name" Laptop.
I am using vim, enter your editor here if different:
vim ~/.ssh/config
Create your git aliases like so:
# Github (default)
Host gh
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# Bitbucket (secondary)
Host bb
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa_bb
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_bb
Enter passphrase if prompted.
Check keys were added:
ssh-add -l
ssh -T gh
ssh -T bb
Github will be the main account and bitbucket the secondary.
Use Homebrew to install Git.
git config --global user.name "Your Name"
git config --global user.email "username@email.com"
Confirm changes: git config --global -l
ssh-keygen -t rsa -C "github email"
Enter passphrase when prompted. If you see an option to save the passphrase in your keychain, do it for an easier life.
Save keys to:
~/.ssh/id_rsa
Repeat for bitbucket:
ssh-keygen -t rsa -C "bitbucket email"
Save bitbucket key to ~/.ssh/id_rsa_bb
Login to remote repo and add ssh key:
pbcopy < ~/.ssh/id_rsa.pub
pbcopy < ~/.ssh/id_rsa_bb.pub
Obviously run each pbcopy
command individually.
Paste into text area, under ssh settings, in your github or bitbucket account. Also give the ssh key a title like "your name" Laptop.
I am using vim, enter your editor here if different:
vim ~/.ssh/config
Create your git aliases like so:
#Github (default)
Host gh
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
#Bitbucket (secondary)
Host bb
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa_bb
Note: On Mac OS Sierra onwards you have to add this to the top of the config file:
Host *
UseKeychain yes
AddKeysToAgent yes
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_bb
Enter passphrase if prompted.
Check keys were added:
ssh-add -l
ssh -T gh
ssh -T bb
This guide assumes you have followed multi-git.md
if on a Unix system or multi-git-win.md
for a Windows system and set up both accounts.
Create a repo online called testmulti (or one of your choosing), then in Terminal, create your repository:
mkdir ~/testmulti
cd ~/testmulti
touch readme.md
git init
git add .
git commit -am "first commit"
git remote add origin git@gh:username/testmulti.git
git push origin master
Add some text to readme on github.com, then:
git fetch origin master
git diff master origin/master
git merge origin/master
git push origin master
Create a repo online called testbucket and then in Terminal:
mkdir ~/testbucket
cd ~/testbucket
touch readme.md
git init
This being the secondary account, the username and email have to be overwritten, using secondary account values, at the repo level:
git config user.name "Full Name"
git config user.email email_address
This must be done once for every bitbucket (or secondary) repo, it is not needed for github (or primary) repos because the global is used in that scenario. There may be a cleaner way to do this but right now it works okay.
Just to be clear you do not need to change these values back afterwards because the global values (which apply to all future repos created) will be set.
git add .
git commit -am "first commit"
git remote add origin git@bb:username/testbucket.git
git push origin master
Add some text to readme on bitbucket.org, then:
git fetch origin master
git diff master origin/master
git merge origin/master
git push origin master
So you have a repository that already exists and you want to want to clone
it
but also you want to make sure when you push
it, the correct user, the bitbucket
user pushes. Let's say the repo is called booker
.
git clone git@bb:bb_username/booker.git
git config user.name "bitbucket user name"
git config user.email email_address
Remember, because we are using the secondary account, we have to over-ride the global configuration of username and email. The git clone command is using the ssh keyfile you set up earlier and is doing the transfer over ssh.
Now, change into the cloned directory and modify one of the files. Use git status
to check the current state, then use git add 'filename'
and git commit -m "commit message"
.
Finally push your changes using git push origin master
.
I am glad you found it helpful. Good thinking on using links provided by providers, I hadn't considered that because I usually just looked at the URL and typed it in manually. |
i forgot my private key for bitbucket account. how do i recover that????? please reply fast. |
now i can't able to push or fetch from bitbucket account. please anyone reply. how to overcome this problem. I can't remember my private key. |
Thank you for this comprehensive instruction on how to set up multiple ssh keys and run them on the same computer for Git and Bitbucket. I found it very useful. Works like a charm! |
Is it possible to do this method with heroku as well?? so i would have github, bitbucket, and heroku working this way. I tried it and im not sure if it works or not. The message I get is.... Brandons-MacBook-Pro:~ Brandon$ ssh -T h |
Man, I wish Github would mail me or something when new comments are added to gists. sigh. @robertpetras no problem, glad it helped. @progus-florian The first thing to do when trying to diagnose ssh connection problems is to run the ssh client in verbose mode. Try using the
It should be possible to run Heroku this way but it's been a while since I used Heroku. I seem to remember there being some kind of special ssh thing it does with git, to deploy your changes. If you can't fix it, post back and I will have a look. Some quick things you could try:
|
Thank you. |
This is useful, thank you! |
Thanks, Useful information. |
Latest macOS 10.12 seems to cause issue with this. Whenever my computer restarts, it prompts for SSH Key passphrase. |
@dysol I’m on 10.10 (Yosemite) so I can’t test. Based on some limited searches there seems to be an issue with macos sierra not saving keys into the keychain. There is a possible workaround with the usual if something breaks, hey I warned ya disclaimer. Inside your
You may need to add a path to each of your identities as well, like Ref:
|
Thank you. I found it very useful |
Saved my life! Thank you :) |
Good job. |
When trying to push to bitbucket, I'm getting this error: Anyone know a fix or have encountered this? |
@nachomacaso - Replace ~/.ssh/id_rsa with the full path to your key. |
Your post is really useful. May I put this content in an article at medium? sure, with all references for this repository. |
@LucasCaixeta Yes that is fine, thanks for asking. |
Any suggestions for the same, but on Windows? |
@mix3d I updated the guide with a Windows section |
Wonderful, thanks @rosswd for this clear writeup. Got up and running with Bitbucket for the first time (for a free private repo) in 10 minutes using this |
Awesome writeup, a big thanks to you. |
Thank you!!!! works awesome! |
This is a life saver! Thank you. |
Amazing guide, thank you. |
Thanks a miilion!! |
love it! |
Hi, Just one question will it work if I am using same email address for bitbucket and github ? |
I think so as long as the remote is destined |
This was awesome thanks! |
This was very helpful! Thanks a lot! |
This comment has been minimized.
Very clear and informative. Thank You.
Quick additional tip
In
~/.ssh/config
, if you name your host like the hostname......you can directly use the links provided by Github or Bitbucket !