Quick reference
| GitHub | GitLab | Bitbucket | |
|---|---|---|---|
| CI | Actions + runners | Built-in CI/CD | Pipelines, Docker |
| Issues | Issues + Projects | Issues + boards | Issues, or Jira |
| Permissions | Roles + teams | Roles + protected | Groups + branch |
| Self-hosting | Enterprise Server | Self-managed CE/EE | Data Center |
| Ecosystem | Largest marketplace | One integrated app | Atlassian stack |
| Best for | Open source, reach | All-in-one DevOps | Jira-centric teams |
How to pick
- GitHub → reach: the community and the widest integrations.
- GitLab → one application from issue to deploy.
- Bitbucket → the Atlassian shop that lives in Jira.
Explained
CI and issues
GitHub runs Actions, with hosted runners and a marketplace of reusable workflows. GitLab ships CI/CD in the same application, driven by .gitlab-ci.yml, so the pipeline needs no second product. Bitbucket uses Pipelines, a Docker-based YAML runner. For issues, GitHub pairs Issues with Projects, GitLab has issues and boards with epics on higher tiers, and Bitbucket has issues but many teams keep the real tracker in Jira.
Control and hosting
Permissions follow the same shape: GitHub has read, triage, write, maintain and admin roles plus teams and rulesets; GitLab has Guest through Owner with protected branches; Bitbucket uses groups, branch permissions and merge checks. Self-hosting is Enterprise Server, self-managed GitLab, or Bitbucket Data Center.
Ecosystem and fit
GitHub has the largest integration ecosystem and the open-source gravity. GitLab sells one application, one login and one data model. Bitbucket is the natural choice when the organisation already lives in Jira and Confluence. Best for: GitHub for reach, GitLab for consolidation, Bitbucket for the Atlassian stack.
The honest caveat: plan tiers decide the details. Merge queue, merge trains, required reviewers and included CI minutes all change with the plan, and list prices move, so check the edition you would actually buy.
The lesson: compare the migration out, not only the feature in.
In one line
Pick the forge you can leave. Migration cost is a feature; measure it before you commit.
Export the issues
gh issue list --limit 1000More notes: Git & CI/CD
Open in the notes app: search, filters, copy This note on GitHub