# Effective Strategies for Maintaining Multiple GitHub Accounts

Managing multiple GitHub accounts can be a hassle, especially when balancing personal, work, and client projects. This guide will help you streamline the process by automating commits and pushes.

# **Step 1:** Organize Your Folders

To maintain multiple GitHub account in your system best way to do is create separate for each of them such as

```bash
mkdir -p ~/Personal
mkdir -p ~/Work
mkdir -p ~/client1
```

Here in each of folder we can create work in each folder and each folder can align to correct git credentials

# **Step 2:** Create Config Files for Each Account

```bash
nano ~/.gitconfig-personal
```

Add the following content. **Replace the email with your actual personal email.**

```ini
[user]
    name = your-personal-github-username
    email = your-personal-email@example.com
```

```bash
nano ~/.gitconfig-work
```

Add the following content. **Replace the email with your actual work email.**

```ini
[user]
    name = your-work-github-username
    email = your-work-email@example.com
```

```bash
nano ~/.gitconfig-client-1
```

Add the following content. **Replace the email with your actual client1 email.**

```ini
[user]
    name = your-client1-github-username
    email = your-client1-email@example.com
```

# **Step 3:** Update Your Main Git Config

Now, edit your main `~/.gitconfig` file to automatically use the correct config file based on the project's path.

Open `~/.gitconfig` and make it look like this. This sets your personal account as the default and creates rules for your work directory.

Usually when your are working on work laptop or system you should keep default as work username and email then Set your work account as the default on your work laptop to ensure commits use the correct credentials

```ini
# This is your default (work) user config
[user]
    name = your-work-github-username
    email = your-personal-email@example.com

# --- Automatic Profile Switching ---
# If the project is inside ~/dev/work/, use the work config
[includeIf "gitdir:~/Personal"]
    path = ~/.gitconfig-personal

[includeIf "gitdir:~/client1"]
    path = ~/.gitconfig-client1
```

With this setup, Git will automatically use the correct name and email for your commits.

# Step 4: Manage SSH Keys for Authentication

To push and pull from different accounts on the same service (like GitHub), you need separate SSH keys.

## 1\. Generate Two SSH Keys

Create a unique SSH key for each account.

```bash
# Personal key
ssh-keygen -t ed25519 -C "your-personal-email@example.com" -f ~/.ssh/id_ed25519_personal

# Work key
ssh-keygen -t ed25519 -C "your-work-email@example.com" -f ~/.ssh/id_ed25519_work

# Client key
ssh-keygen -t ed25519 -C "your-client1-email@example.com" -f ~/.ssh/id_ed25519_client1
```

If you’re thinking what that `id_ed25519`: This is the cryptographic **algorithm** used to generate the key. Ed25519 is a modern, secure, and fast choice for SSH keys.

When prompted for a passphrase, you can either enter one for extra security or press Enter to skip.

## 2\. Add Keys to Your Accounts

Copy the contents of each **public** key (`.pub` file) and add them to your corresponding GitHub accounts in **Settings &gt; SSH and GPG keys**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1752952619315/574f1283-222d-42c3-9819-591d7bbbbcb7.png align="left")

Copy the contents of each **public** key (`.pub` file) and add them to your corresponding GitHub accounts in **Settings &gt; SSH and GPG keys**.

```bash
# Copy your personal public key
pbcopy < ~/.ssh/id_ed25519_personal.pub

# Copy your work public key
pbcopy < ~/.ssh/id_ed25519_work.pub

# Copy your client public key
pbcopy < ~/.ssh/id_ed25519_client1.pub
```

## 3\. Configure SSH to Use the Correct Key

Create or edit your SSH config file at `~/.ssh/config`. This file tells your computer which key to use for which account.

```bash
nano ~/.ssh/config
```

Add the following configuration:

```bash
# Personal GitHub account
Host github.com-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

# Work GitHub account
Host github.com-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

# Client1 GitHub account
Host github.com-client1
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_client1
    IdentitiesOnly yes
```

## 4\. Clone Repos Using Custom Hosts

From now on, when you clone a repository, you must use the custom host you just defined. This ensures the correct SSH key is used.

* **To clone a personal repo:**
    
    ```bash
    git clone git@github.com-personal:your-personal-username/personal-repo.git
    ```
    
* **To clone a work repo:**
    
    ```bash
    git clone git@github.com-work:your-work-username/work-repo.git
    ```
    
* **To clone a client1 repo:**
    
    ```bash
    git clone git@github.com-work:your-client1-username/client1-repo.gitYour
    ```
    

system is now fully configured to manage both accounts automatically.

## 5\. Update Your Git Repository's Remote URL

Finally, navigate to the local repository you want to fix and tell it to use the new SSH URL.

* **For a personal repository (like your** personal project):
    
    ```bash
    cd ~/Personal/vazid
    git remote set-url origin git@github.com-personal:your-personal-usernmae/repo.git
    ```
    
* **For a work repository:**
    
    ```bash
    cd ~/Work/my-work-project
    git remote set-url origin git@github.com-work:your-work-username/work-repo.git
    ```
    
* **For a work repository:**
    
    ```bash
    cd ~/client1/my-work-project
    git remote set-url origin git@github.com-client1:your-client1-username/client1-repo.git
    ```
    

You are now fully set up to push and pull using the correct account automatically.

Thank You
