There may come a point in your life where you will have to manage multiple git profiles, one for work and one for personal reasons. You will only encounter this problem if you say you have your personal projects and work projects with the same Git hosting, commonly GitHub. But the same applies to GitLab or Bitbucket or for any other hosting companies.
If this is the case, then it can be a bit of a nightmare when it comes to swapping credentials depending on the repository.
There is of course a quick workaround. Use a single GitHub account, and use them for both work and personal. This works and it's a personal choice. For those that want to keep things clean and use them separately, then read on.
In this post, I will outline out how to create two Git profiles for GitHub (the same applies for GitLab or Bitbucket or whatever really) so you can separate your personal and work profiles.
Create SSH Keys
The first step will be to create SSH keys. We'll need to create two SSH keys. One for work and one for personal. For now, let's create one for work. The steps to create an SSH key for personal purposes are identical. The only difference is when we come to name the stored SSH key, which is in step 5.
1. Launch a terminal
For Windows users, launch Git Bash, for Mac, launch terminal.
2. Navigate to the
3. Generate an SSH key
In the terminal, enter the
ssh-keygen command to generate a new ssh key.
Now, you may have already registered with GitHub, or GitLab with an email address, such as [email protected]. This will be your username.
ssh-keygen -t rsa -b 4096 -C "[email protected]"
4. Enter a file name
When it prompts to "Enter a file", something like this:
Enter file in which to save the key (/c/Users/[you-username]/.ssh/id_rsa):
Enter a filename of your choice. This is so that you can name your ssh keys for personal and work purposes.
For example, you can name it:
id_rsa_github_work for work and
id_rsa_github_personal for personal. Something like this:
Enter file in which to save the key (/c/Users/[you-username]/.ssh/id_rsa): id_rsa_github_work
5. Enter a passphrase
Now, it will prompt you to enter a passphrase. Something like this:
Enter passphrase (empty for no passphrase): Enter same passphrase again:
This is optional. You can skip this step and just hit enter key to continue. But feel free to enter a password here.
You can either stop here or repeat steps 1 -5 to create another SSH key for say your personal account, and you may want to call the file
Verify the SSH key is generated
It should have created two new files in the default
.ssh directory. For Windows it will be
C:\Users\[YOUR-WINDOWS-USERNAME]\.ssh, for Mac it will be
Add the SSH key to GitHub or GitLab
Now that we have a SSH key, we need to copy the contents of the *.pub file into the clipboard. In the example above, this will be the
1. Copy the SSH key
Open the file and copy the entire contents of the file. A little Ctrl+A and Ctrl+C.
2. Add the SSH Key to GitHub or GitLab
Depending on if it's GitHub or GitLab, you can visit the GitHub page of adding a new ssh key, or for GitLab, you can visit the GitLab page for adding new ssh key.
Just follow the steps of how to add the SSH key, and you can ignore the steps of generating the SSH key as we have done this in the previous steps.
As we have two SSH keys, we will need to upload both. One for work and the other for personal.
Modify the Git config to handle multiple profiles
1. Edit the Git config file
There should be a file called
config located in the
For Windows, its located in
For Mac, its located in
If there isn't one, create one in an editor of your choice.
2. Add profiles
config file add the following configuration.
# GitHub (work) Host work #<----------- take note of this Host value. HostName github.com User git IdentityFile ~/.ssh/id_rsa_github_work
Take note of the second line where it says
Host xxx. In the above, it's
Host work. You can name this anything such as
Host xyz. Just make a note of what this is as it will be needed in Testing it Out section.
If you are also adding a personal profile, then it will something like this:
# GitHub (personal) Host personal HostName github.com User git IdentityFile ~/.ssh/id_rsa_github_personal # GitHub (work) Host work HostName github.com User git IdentityFile ~/.ssh/id_rsa_github_work
Ensure SSH identities are loaded
To ensure the SSH keys generated are loaded into the terminal, we verify this with a very simple command.
This command will list all SSH keys loaded. For Windows, you can have a couple of options. One is enabling
ssh-agent in using this StackOverflow link. Alternatively, you can use cmdr which makes life way more simple.
For Mac, you've got it easy, just type the following in the terminal:
If the identities are not listed we can add them using the following command.
Testing it out
Now, let's say you have a new repository that you wish to clone for work, the SSH path may look something like this:
To clone it, we will need to use the profiles we created in Modify the Git config to handle multiple profiles section. We have to replace the
[email protected] with
work part is what we called it as part of the Git config file
Host work. If I had said
Host CompanyA, then I would need to replace
[email protected] with
So it will something like this:
git clone git@work:companyA/my-repo.git
If you have an existing repo, you can switch the remote URLs using githubs.
That's it. That's how you can have multiple Git profiles and multiple Git repositories with specific profiles depending on whether it's for work or personal purposes.
I hope that has helped as it has caused me much grief and pain and rabbit holes when trying to juggle with multiple profiles.