Skip to content

Instantly share code, notes, and snippets.

@Rendiere
Forked from rosswd/multi-git-win.md
Last active December 19, 2019 07:30
Show Gist options
  • Save Rendiere/916856be274c9de63fa25eb1f95ed194 to your computer and use it in GitHub Desktop.
Save Rendiere/916856be274c9de63fa25eb1f95ed194 to your computer and use it in GitHub Desktop.
Setting up a Github and Bitbucket account on the same computer on Mac OS. Now with a guide for Windows 10.

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:

  • The computer is running Mac OS Sierra or greater
  • You already have an account at Github and another at Bitbucket

Setting up github and bitbucket on the same computer (Mac OS)

Github will be the main account and bitbucket the secondary.

Intall Git

Use Homebrew to install Git.

Configure Git

  • git config --global user.name "Your Name"
  • git config --global user.email "username@email.com"

Confirm changes: git config --global -l

Create SSH Keys

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" -f ~/.ssh/id_rsa_bb

Saves bitbucket key to ~/.ssh/id_rsa_bb

Attach Keys

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.

Create Config file

I am using vim, enter your editor here if different:

vim ~/.ssh/config

Create your git aliases like so:

Note: On Mac OS Sierra onwards you have to add the Host bit to the top of the config file:*

Host *
  UseKeychain yes
  AddKeysToAgent yes

#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

Add the identities to SSH:

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_bb

Enter passphrase if prompted.

Check keys were added:

ssh-add -l

Check that repo recognizes keys:

ssh -T gh
ssh -T bb

Using new dual setup

This guide assumes you have followed multi-git.md

Github (default)

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

Bitbucket (secondary)

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

Use case: Repo already exists on secondary remote repo (bitbucket)

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.

bitcoin:bc1q95kxs25a6d7fp8prqdmgm6sstjxav8q959t30u

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment