Git Remote
Any machine can act as a git remote. Generally git remote will have a daemon which handles communication, user management. Git is commonly installed on all nodes.
Git Remote can be installed on servers (self-hosting.)
Tool
Type
Highlights
Official Website
Plain Git over SSH
Lightweight
No UI, simple git init --bare setup, push/pull over SSH.
Git SCM
Gitolite
Lightweight
Access control + SSH key management on top of bare repos.
Gitolite
Gitea
Web-based
Lightweight, GitHub-like UI, issues, wiki, CI/CD integration.
Gitea
Forgejo (Gitea fork)
Web-based
Community-driven fork of Gitea, long-term support.
Forgejo
GitLab CE (Community Edition)
Web-based / Enterprise
Full DevOps: CI/CD, project mgmt, code review, pipelines.
GitLab CE
Phabricator (archived)
Web-based
Code review, tasks, wiki. Archived but still usable.
Phabricator (archived)
SourceHut
Web-based
Minimalist, email workflows, CI. Scriptable.
SourceHut
GitHub Enterprise Server
Enterprise
On-prem GitHub with enterprise features.
GitHub Enterprise
Bitbucket Data Center
Enterprise
Atlassian’s self-hosted Git solution, integrates with Jira.
Bitbucket Data Center
Popular remotes of Git are cloud hosted or Git as a service.
Provider
Type
Highlights
Official Website
GitHub
Cloud SaaS
Most popular; public/private repos, Actions (CI/CD), marketplace, huge community.
GitHub
GitLab.com
Cloud SaaS
Full DevOps suite: repos, CI/CD, project mgmt, Kubernetes integration.
GitLab
Bitbucket Cloud
Cloud SaaS
By Atlassian; integrates tightly with Jira/Trello.
Bitbucket
SourceHut (Hosted)
Cloud SaaS
Minimalist; email workflows, CI, issue tracking.
SourceHut
AWS CodeCommit
Cloud (AWS)
Fully managed private Git repos on AWS, integrates with CodePipeline & IAM.
AWS CodeCommit
Azure Repos
Cloud (Azure DevOps)
Unlimited private repos, tight integration with Azure DevOps services.
Azure Repos
Google Cloud Source Repositories
Cloud (GCP)
Private Git repos with Google Cloud integration.
Cloud Source Repositories
Lets create our first git remote repo
Direction: First we will create a local repo then remote repo
We have created a local repo and created a commit
Lets use github: The largest and most popular git remote repo which gives unlimited public and private repos for free.
Github allows to communicate over
To add a connection between local and remote
git remote add <conn-name> <url>
Generally the default connection name used is origin
git remote add origin https://github.com/dummyrepos/first_from_local.git
git remote -v
git config --list
We have one commit in main branch locally, lets send those commits to remote (push)
git push <connection-name> <branch-name>
Direction: First we will create a remote repo then local
Create a remote repo
Clone refers to an operation where you have remote but no equivalent local repo on your system.
git clone <url>
# it creates a new folder
Clone create a new folder with working tree and local repo. It also sets the upstream for default branch and default connection will be origin.
Set up ssh keys on github
If you dont have keys already execute ssh-keygen this generates two keys in ~/.ssh
id_ed25519: this is private key
id_ed25519.pub: this is public key
Now lets upload this public key to github (Watch video for screenshots)
Underlying concept
Every remote branch has a local representation generally branches will be created with names remotes/<conn-name>/<branch>
When you are sending changes (pushing) to remote the actual remotes latest commit id of the branch should be matching your remote representation
To get the latest changes the command is
git pull <connection-name> <branch>
To avoid unneceassary merge commits
git pull <connection-name> <branch> --rebase
git pull => fetch + merge
Exercise:
setup ssh keys on github gitlab, bitbucket
Create a local repo and push it
github private repo
gitlab private repo
bitbucket repo
Create a remote repo and clone the changes locally