GitLab Primer — Differences from GitHub and the Features You'll Actually Use
GitLab at work, GitHub for personal projects — a very common combination. Both are "Git repository hosting plus development support features," and the Git operations themselves are exactly the same. What differs is the tooling on top and the vocabulary. This is a guide to keep GitHub users from getting lost in GitLab.
What is GitLab?
A "DevOps platform" that integrates issue tracking, code review, CI/CD, and deployment around Git repositories. It comes in two forms:
- GitLab.com — the SaaS version. A cloud service you use just like GitHub
- Self-Managed — you run GitLab on your own servers or cloud. The GitLab at your company is almost certainly this one. It is popular with companies that cannot put code on external services, and the free Community Edition (CE) covers most needs
If your company's GitLab URL looks like gitlab.example.co.jp on an internal domain, it is Self-Managed. Upgrades are also managed in-house, so it may lag behind GitLab.com in features.
Terminology map (GitHub → GitLab)
The concepts map almost one-to-one; many things just have different names.
| GitHub | GitLab | Notes |
|---|---|---|
| Pull Request (PR) | Merge Request (MR) | The most common vocabulary difference. Same meaning |
| Organization | Group | GitLab can nest subgroups indefinitely (great for department → team → project trees) |
| Repository | Project | GitLab calls it a "project" |
| GitHub Actions | GitLab CI/CD | See below. Config file is .gitlab-ci.yml |
| Actions runner | GitLab Runner | Self-Managed installs run their own Runners |
| Gist | Snippet | Sharing code fragments |
| GitHub Pages | GitLab Pages | Static site hosting |
| Dependabot | Dependency Scanning etc. | Security features tend to be paid-tier |
| CODEOWNERS | CODEOWNERS | Nearly identical |
| Draft PR | Draft MR (formerly WIP) | Prefix the title with Draft: |
The Merge Request workflow in practice
Same flow as a GitHub PR; just swap the words.
git switch -c feature/add-login # create a branch
# make changes and commit
git push -u origin feature/add-loginAfter the push, GitLab prints an MR-creation URL right in your terminal (a nice touch) — opening that link is the fastest way to create the MR. Then:
- Assign reviewers → review → resolve threads (GitLab's equivalent of GitHub conversations)
- Approve: the project can enforce approval-count rules (depending on settings, the merge button stays disabled until approvals are in)
- The merge method (merge commit / squash / fast-forward) is usually preselected in project settings. On squash projects, your carefully stacked commits get flattened into one
mainanddevelopare normally protected branches, so direct pushes get rejected. If you "can't push," check this first
GitLab CI/CD basics
The GitHub Actions equivalent is built in from the start. It lives in .gitlab-ci.yml at the repository root:
stages:
- test
- build
lint:
stage: test
image: node:22
script:
- npm ci
- npm run lint
build:
stage: build
image: node:22
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/Conceptual differences from GitHub Actions:
- The workflow file is basically one per repository (
.gitlab-ci.yml), not a folder of files like.github/workflows/(you can split withinclude) - Jobs are grouped into stages: jobs in the same stage run in parallel, and the next stage starts only after the previous one fully succeeds
- The Runner is the execution environment. GitLab.com offers shared Runners, but Self-Managed installs run on Runners your company provisioned. When "CI is stuck," it is usually a queue for free Runners
- Creating an MR triggers a pipeline whose results show up in the MR view. Requiring a green pipeline to merge is the standard setup
How they differ in philosophy and where each fits
- GitHub: the home of OSS and personal projects; doubles as every developer's profile and portfolio. Its surrounding services (Actions, Copilot, etc.) evolve fast
- GitLab: the "plan → develop → CI/CD → monitor" everything-in-one-product philosophy (The DevOps Platform). Self-Managed hosting is its biggest strength, which is why it thrives as internal infrastructure
- Feature-wise, both now cover "Git + review + CI + issues," and day-to-day development feels about the same. The differences show up on the admin/ops side (hosting model, permission hierarchy, auditing)
In practice, the most common split is exactly this: public personal repos on GitHub, internal company development on GitLab.
First things to check on your company's GitLab
- Register your SSH key (Profile → SSH Keys). Internal GitLabs usually favor SSH clones over HTTPS
- Your role (Guest / Reporter / Developer / Maintainer / Owner). As a Developer, being unable to push to protected branches or merge MRs is normal
- The project's MR rules (approval count, squash or not, pipeline required or not)
- Skim
.gitlab-ci.ymlso you know what runs when you push
Summary
- GitLab = Git hosting + integrated DevOps. The one at your company is almost certainly Self-Managed
- A PR is called an MR. Organization → Group, Actions → CI/CD — it is mostly a vocabulary swap, and Git usage is identical
- CI is one
.gitlab-ci.yml+ stages + Runners, integrated into the MR view - When in doubt, think "GitHub's X is GitLab's Y" with the table above and you will usually be right