Background

GitHub, in depth

GitHub hosts Git repositories, but that's the least interesting thing about it. Almost everything you think of as "using GitHub" is a layer invented on top of Git โ€” and knowing which is which tells you what travels with you if you ever leave.

1 ยท What it is, and who owns it

GitHub launched in 2008. Git existed and worked, but setting up somewhere to put a repository meant renting a server and configuring it yourself, and there was no good way to discuss a change other than emailing patches to a mailing list. GitHub made hosting a repository take about four seconds, and wrapped a conversation around every change.

That combination โ€” free hosting plus a social layer โ€” is why it became the default. Not because it's the only option, and not because Git requires it.

Microsoft acquired GitHub in 2018 for around $7.5 billion in stock. It continues to run as its own product.

Worth holding onto: GitHub is a commercial company running a website. Git is free software owned by nobody. They're often spoken about as one thing, and the difference matters most on the day you'd rather not depend on a company.

2 ยท What GitHub adds that Git doesn't have

Nearly everything you interact with on the site is GitHub's invention. Git has none of it.

FeatureWhose?What it does
Commits, branches, merges, tagsGitThe version control itself. Works offline, works anywhere.
Pull requestsGitHubA proposal with a diff, a discussion, and a merge button
IssuesGitHubThreads for bugs, tasks, and ideas
Code reviewGitHubLine-level comments, approvals, requested changes
Actions / CIGitHubRunning your tests on their machines when something happens
ForksGitHubA server-side copy under your account. Git just has clones.
Stars, followers, profilesGitHubThe social layer
Permissions, teams, protected branchesGitHubWho may do what. Git has no concept of a user account at all.
ReleasesGitHubNotes and downloadable files attached to a Git tag

Read that column and the shape becomes clear: Git manages versions; GitHub manages people. Permissions, review, discussion, notifications, automation โ€” all the coordination problems that appear the moment more than one person is involved.

3 ยท The pull request is not a Git feature

This one is worth its own section, because it's the most common misconception among people who've used GitHub for years.

There is no git pull-request command. You cannot open a pull request against a repository sitting on a USB stick. A pull request is a record in GitHub's database that says: here are two branches, show me the difference, let people comment on it, and give an authorised person a button that merges one into the other.

The merge it eventually performs is an ordinary Git merge. Everything around it โ€” the diff view, the conversation, the approvals, the checks, the button โ€” is GitHub's.

Where the name comes from. Before hosting platforms, you'd email a maintainer asking them to pull your changes from your publicly readable repository. Git still ships git request-pull, which generates the summary text for exactly that email. GitHub took the concept and made it a web page.

The practical upshot: your commits are portable and your pull request discussions are not. That's covered below.

4 ยท What happens when GitHub is down

It does happen, and the answer is reassuring: most of your work carries on. Because Git is distributed, your clone is complete.

Still works

  • Committing, branching, merging
  • Reading the entire history
  • Checking out any past version
  • Resolving conflicts
  • Recovering lost work with reflog

Stops

  • Pushing and pulling
  • Pull requests and reviews
  • Issues
  • Actions and CI
  • Anything that deploys from a push

So an outage is a collaboration outage, not a work outage. Keep committing locally and push when it returns.

5 ยท The alternatives

GitHub is the largest, not the only. Everything in this guide's daily loop transfers to any of these, because the Git part is identical โ€” only the website around it differs.

GitLab
The closest competitor. Strong built-in CI/CD, and a version you can install on your own servers. Common in companies that want to self-host.
Bitbucket
Atlassian's, so it integrates tightly with Jira. Mostly found where a company already runs the rest of the Atlassian suite.
Codeberg
Run by a non-profit, no advertising, no AI training on your code. Popular with people who want a home for open source outside a large company.
Forgejo / Gitea
Lightweight and self-hostable โ€” you can run one on a machine in a cupboard. Familiar interface if you know GitHub.
sourcehut
Deliberately minimal and email-driven, closer to how the Linux kernel actually works. Fast, and an acquired taste.
A plain server
A Git repository is a folder. Given SSH access to any machine, you can push to it. No platform, no account, no web interface.

Learning GitHub is not a lock-in. The commands are the same everywhere; what changes is where the merge button lives.

6 ยท How portable your work really is

Worth knowing before a project matters to you.

WhatPortable?Why
Your code and its full history Completely Every clone already contains it. Push it somewhere else and you've moved.
Tags and releases (the tags) Yes Tags are Git objects. The release notes and attached files are GitHub's.
Issues and pull request discussions Only via export They live in GitHub's database, not your repository. Retrievable through the API or a migration tool, but they don't come with a git clone.
Actions workflows Files yes, behaviour no The YAML is in your repo, but it's written against GitHub's runners and syntax. Another platform needs it rewritten.
Stars, forks, followers No Purely GitHub's social graph.

The reassuring half: the part that matters most โ€” the code and every version of it โ€” is the part that's most portable. It's already on your laptop, in an open format, and moving it is one git push to a different address.

The part to be deliberate about: if years of design discussion accumulate in issues and pull requests, that context lives on someone else's servers. For a project you'd be genuinely upset to lose, it's worth periodically exporting โ€” or keeping the decisions that really matter in a file inside the repository, where they travel with the code.

Back to home