Git is the most important software of a developers life. We use it to track changes in our code, check differences, log what and when and by whom it is changed and many more. We upload our code along with git history in remote repositories. GitHub, GitLab, BitBucket are some of the most popular git remote repositories where we can store our codes and projects.
What if we need to store same project into multiple remote repositories!
Well that would be a pain if we communicate over HTTPS with our remote. Easy solution would be communication over SSH communication.
Assuming we have setup different SSH public-private key pair for each remote, we will go to setting up different git profiles. If not, you can visit this blog to learn how to setup different SSH public-private key pair.
To fetch any remote files and folders, we write ssh commands like following snippet
If we apply that to our real life scene, and fetch a demo repository I recently published on GitHub,
Now let's move to the fun part
The Fun Begins
Let's assume we have created two SSH public-private key pairs naming "personal_key" and "work_key". We want personal to be on GitHub and work is also on GitHub but different profile.
Creating config file
We can create the file in two methods
- Any random text editor.
Creating the file in console
We have to navigate to the SSH root location first. To do that we can simply write the following command.
Then we need to create the file, to do that, just write the following
Now we have created the file, we can open and edit it. (Don't worry, it the file was already there, you can still write above command!)
My favourite text editor is VisualStudio Code or VSCode. So I will open it using the following
Don't worry, I know you like other editors too, so just put the name of editor instead of mine, meaning replace code with your own.
Creating the file in any text editor
Let's open our favourite code editor and create a file named "config" without any extension.
What should the file be!
Now let's write the following on the file,
Host github.com HostName github.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/personal_key Host github.com-work HostName github.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/work_key
Understanding the what we wrote
Remember we learned on basic about SSH command?
Now let's understand what we wrote in above code,
- "Host" is the Alias of "HostName"
- "HostName" is the domain of remote location
- "User" is the name of SSH user
- "PreferredAuthentications" is the secret key we want to use for authentication to remote location. "publickey" is stating that we user the public key of the "IdentityFile" key pair
- "IdentityFile" is the file of public-private key pair.
Shifting the config file
The file named config we created in above section should be moved to SSH root folder of our respective Operating System.
Apply what we understood
We have learned so much now. Let's apply in real life. Shall we?
So the final output of the url for add remote will be
- For personal profile
git remote add origin firstname.lastname@example.org:<PersonalUserName>/<RepositoryLocation>.git
- For work profile
git remote add work email@example.com:<WorkUserName>/<RepositoryLocation>.git
So here we are, learnt how to use different SSH key pair to setup different remote location and use that to setup SSH access. And after adding those remote we can simply push to our repository like this,
- For pushing with personal profile
git push origin main
- For pushing with work profile
git push work main
Thank you for reaching out to end. Hope we understood the discussion. For any confusion hit me on Twitter @TheRakiburKhan