AV
HomeAboutProjectBlog

© 2026 Ave syah Shina. All rights reserved.

  1. Home
  2. Blog
  3. 06 — Repo Hosting: The Social and Automation Shell Around Git

06 — Repo Hosting: The Social and Automation Shell Around Git

August 12, 20267 min read
Download as Markdown

I quietly confused repository hosting with Git itself, which made every host's differences feel arbitrary. The untangling: Git is the engine, and a repo host is the social and automation shell wrapped around it. Git does one job — track history as a graph of commits. The host takes that local graph and turns it into shared, reviewable, CI-able project infrastructure [1]. Once I could see those two layers separately, the differences between GitHub and GitLab stopped feeling arbitrary and started looking like different bets on which shell matters more.

Here's the picture I keep in my head — the engine on the left, the shell on the right:

Git — the engine tracks history as a graph commits & branches — works offline git push / git fetch the only thing that crosses Repo host — the shell collaboration + automation layer Pull requests · code review Issues · project tracking CI/CD · automation the host adds the shell — Git underneath is unchanged

What the host adds that Git alone doesn't

Git, on its own, is a local concern. I can commit, branch, and merge forever on my laptop and nobody else ever sees it. The thing that turns that private history into a team artifact is a remote — another Git repository, reachable over the network, that I push to and fetch from. A repo host is, at its core, one of those remotes that other people also push to and fetch from, plus a web UI and a set of collaboration tools built on top [1].

The shell layer is where most of what I actually recognize as "working on a project" lives:

  • Pull / merge requests — a proposed change, scoped to a branch, with diff view, line-by-line review, required approvals. This is not a Git concept; it's a host concept. Git merges branches. The host stages the conversation around whether to merge them.
  • Issues and project boards — a shared to-do list and tracker tied to the repository.
  • Forks and permissions — a model for who can push directly and who works through a copy.
  • CI/CD pipelines — automation that runs tests, builds, and deploys on events like a push or a PR, defined in a file committed to the repo itself.
  • Webhooks and integrations — the host notifies other services when things happen.

The mental shift: none of that is Git. It's a product layer that speaks Git underneath. Which is why two hosts can share the exact same engine and still feel completely different — they're different shells.

GitHub: the network

GitHub is the largest repository host and the de facto home of open source [2]. Microsoft acquired it in 2018 [2]. The thing I had to understand about GitHub is that its dominant feature isn't any single tool — it's network effect. When a library lives on GitHub, its issues, its pull requests, its contributors, its dependabot alerts, its Actions marketplace, and its visibility in search all compound. For an open-source project, being somewhere a contributor can find it and file a PR in under a minute is worth more than any feature checkbox.

GitHub's automation is GitHub Actions — workflow YAML files that run jobs on runners, triggered by repo events [3]. To be clear: GitHub is end-to-end today. Actions for CI/CD, Packages for registries, Projects for issue tracking, Codespaces for dev environments, and a full security stack (CodeQL, secret scanning, Dependabot) are all first-class [2]. The honest caveat is timing — these arrived later, layered onto the social graph. The network was the product first; the toolchain grew out of it.

GitLab: the platform

GitLab takes a different bet — not because GitHub lacks the toolchain (it doesn't anymore), but because GitLab built the whole delivery pipeline as one integrated product from day one, not assembled in stages [4]. Its signature is built-in CI/CD — defined by a single .gitlab-ci.yml at the repo root, run on GitLab Runners — and it predates and arguably out-matures GitHub Actions [5]. Issue tracking, merge requests, container registry, package registry, security scanning, environments, and deployments were all there from the start, in one application.

The other thing GitLab is known for is being self-hostable. The entire platform is open-core — I can run it on my own infrastructure, behind my own firewall, with the same UI as the SaaS version [4]. For teams that can't or won't put their code on someone else's cloud (regulated industries, on-prem mandates, air-gapped networks), that's the deciding factor, not a preference.

The comparison I actually use

The model collapses the choice into one trade-off:

GitHub

GitLab

Betting on

the network — where OSS already is

the self-hostable, integrated platform

CI/CD

GitHub Actions (added 2019)

GitLab CI/CD (built-in, mature)

Hosting

cloud only (GitHub Enterprise on dedicated infra)

cloud and self-hosted (open-core)

Open-source reach

largest

smaller, but strong in enterprise/DevOps

Neither is "better." Both are end-to-end these days; the real fork is cloud-first network versus self-hostable platform. For an open-source side project where I want strangers to find and contribute to my work, GitHub is the default because that's where the contributors are. For a team that must run the whole platform on its own hardware — regulated, on-prem, air-gapped — GitLab is the more coherent shape. Bitbucket exists in this same layer too — Atlassian's entry, tightly bound to Jira — but for frontend work the GitHub/GitLab split is what I actually encounter.

How I use this

The habit these notes left me with is a single separation: when something breaks or behaves oddly, I ask is this Git, or is this the host? A rebase conflict, a detached HEAD, a botched merge — that's the engine, and the answer is the same on any host. A missing CI run, a permissions error on a branch, a PR that won't auto-merge, a stale webhook — that's the shell, and the answer is product-specific. Naming which layer I'm actually in saves me from grepping the wrong docs every time.

References

[1] Git, "Git - Distributed Git - Distributed Workflows," Git Documentation. [Online]. Available: https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows

[2] GitHub, "About GitHub," GitHub Docs. [Online]. Available: https://docs.github.com/en/get-started/quickstart/hello-world

[3] GitHub, "Understanding GitHub Actions," GitHub Docs. [Online]. Available: https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions

[4] GitLab, "What is GitLab?," GitLab Documentation. [Online]. Available: https://about.gitlab.com/what-is-gitlab/

[5] GitLab, "GitLab CI/CD," GitLab Documentation. [Online]. Available: https://docs.gitlab.com/ee/ci/

Knowledge check · Question 1 of 5

A pull request is fundamentally a feature of…

Comments

Leave a Comment

You must be signed in to comment

0 Comments

No comments yet. Be the first to comment!