DEV Community

K Bose
K Bose

Posted on

setup multiple git accounts on one local machine (2nd iteration)

This post is in continuation of the original post that will help you understand expected outcome if you decide to add additional git account to your local machine.

I highly suggest you to head over to original post if you are doing this for first time. This post is only helpful for second or successive addition of git account to same local machine.


1. generate SSH key

$ ssh-keygen -t ed25519 -C "your_professional_email@example.com" -f ~/.ssh/<2nd_ssh_key_name>
Enter fullscreen mode Exit fullscreen mode

I named my second key as GitHub_key.

2. add passphrase to SSH key

Running the above command will prompt for adding a passphrase.

$ ls -la ~/.ssh/
total 112
<snip>
-rw-------   1 user  staff   484 Feb 29 13:26 GitHub_key
-rw-r--r--   1 user  staff   113 Feb 29 13:26 GitHub_key.pub
<snip>
Enter fullscreen mode Exit fullscreen mode

Public - Private key pair will be generated in the .ssh folder.

3. add SSH key to ssh-agent

$ eval "$(ssh-agent -s)" && \
ssh-add -K ~/.ssh/<2nd_ssh_key_name>
Enter fullscreen mode Exit fullscreen mode

4. setup SSH config file

From the previous post, file named as config is present in the .ssh directory.

There are multiple ways to add the lines of text in this file, however I will provide with two of the easiest ways:

4.1. add text from text editor

I use sublime text as my go to text editor.

$ subl ~/.ssh/config
Enter fullscreen mode Exit fullscreen mode
  • subl followed by the path name ~/.ssh/config will open the config file in the sublime text editor.
Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/<2nd_ssh_key_name>
Enter fullscreen mode Exit fullscreen mode

Add the above lines of text as it is to the file and save it.

4.2. add text from the terminal

In case you don't know how to open config file in text editor, you can get this on the terminal itself.

$ echo "Host *" > ~/.ssh/config
$ echo "  AddKeysToAgent yes" >> ~/.ssh/config
$ echo "  UseKeychain yes" >> ~/.ssh/config
$ echo "  IdentityFile ~/.ssh/<2nd_ssh_key_name>" >> ~/.ssh/config
Enter fullscreen mode Exit fullscreen mode

Your config file should look like the below snippet

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/<ssh_key_name>

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/<2nd_ssh_key_name>
Enter fullscreen mode Exit fullscreen mode

5. copy SSH public key

You need to copy the contents of the generated public key to add the SSH key to the Git Service Provider account.

$ pbcopy < ~/.ssh/<ssh_key_name>
Enter fullscreen mode Exit fullscreen mode

6. create workspace

Below is the Folder Structure I am using as my workspace to neatly divide the multiple git service provider repos.

/~/
    |__.gitconfig
    |__/git_repos/
        |__GitHub/
            |__.gitconfig.GitHub
        |__GitLab/
            |__.gitconfig.GitLab
Enter fullscreen mode Exit fullscreen mode

You can structure your workspace in any way but remember the path for the additional .gitconfig.<name>. These git configs are going to override the global git config.

7. setup git config

$ git config -f .gitconfig.<name> --add user.email <your_github_email@example.com>
$ git config -f .gitconfig.<name> --add user.name <your_user_name>
$ git config -f .gitconfig.<name> --add github.user <your_github_user_name>
$ git config -f .gitconfig.<name> --add core.sshCommand "ssh -i ~/.ssh/<2nd_ssh_key_name>"
Enter fullscreen mode Exit fullscreen mode

After running all the git config commands your .gitconfig.<name> file should look like the below snippet.

# ~/git_repos/GitHub/.gitconfig.GitHub

[user]
    email = <your_github_email@example.com>
    name = <your_user_name>
[github]
    user = <your_github_name>
[core]
    sshCommand = ssh -i ~/.ssh/<2nd_ssh_key_name>
Enter fullscreen mode Exit fullscreen mode

Now you need to specify the additional .gitconfig.<name> file in the Global .gitconfig.

$ git config -f .gitconfig.<name> --add includeIf."gitdir:~/git_repos/GitHub/".path ~/git_repos/GitHub/.gitconfig.GitHub
Enter fullscreen mode Exit fullscreen mode

You Global .gitconfig should now look like the below snippet.

<snip>
[includeIf "gitdir:~/git_repos/GitLab/"]
    path = /Users/mac_user/git_repos/GitLab/.gitconfig.GitLab
[includeIf "gitdir:~/git_repos/GitHub/"]
    path = /Users/mac_user/git_repos/GitHub/.gitconfig.GitHub
<snip>
Enter fullscreen mode Exit fullscreen mode

I have snipped the output of what Global .gitconfig could look like to avoid confusion as your .gitconfig may have some more config (which is fine).

Top comments (0)