Migrate a self‑hosted GitLab repository to GitHub Enterprise — tailored plan preserving issues, merge requests and pipelines
By Kevin Marcondes · Published on · 6 min read
Need to migrate a self‑hosted GitLab repository to GitHub Enterprise while keeping issues, merge requests and CI pipelines intact? We handle full history, user mapping and MR→PR conversion. We reimplement pipelines in GitHub Actions and validate them before cutover. We plan the window, run a pilot and minimize risk—no miracle promises, just repeatable execution.
When migration makes sense and what’s at stake
Teams decide to migrate for standardization, operational cost savings, security or tool consolidation. The real challenge is keeping context: conversations, labels, links and CI automations.
After migration you expect intact repositories, preserved issues, corresponding PRs and working pipelines. Our goal is to reduce rework and operational interruptions.
What we preserve and how we handle exceptions
We prioritize end‑to‑end traceability. Some items migrate 1:1; others require careful conversion. Where there’s no direct equivalent, we record references and attach evidence for audit purposes.
For pipelines we translate GitLab CI stages and variables into GitHub Actions workflows. We review secrets, environments and protections. See practical guidance on deploys in the automatic deploy pipeline.
- Complete Git history (commits, tags and branches)
- Issues, labels, milestones and assignees where applicable
- Merge Requests converted to Pull Requests with titles, descriptions and comments
- Mentions and cross‑links preserved when possible
- Attachments downloaded and reuploaded or referenced
- Pipelines reimplemented in GitHub Actions (workflows, jobs, matrices and artifacts)
- Variables and secrets mapped by environment and repository
- Branch protection rules and environment protections adjusted
Migration approach: steps and checkpoints
We follow an incremental, reversible flow. No big‑bang without safety nets. Every step produces auditable, re‑runnable artifacts.
Security is integrated from the start. See the CI/CD security checklist to harden runners and secrets after migration.
- Discovery and inventory: projects, groups, integrations and critical pipelines
- Map users, groups and permissions (including SSO/SAML)
- Technical POC: validate APIs, limits and key mappings
- Pilot with representative projects and diff validations
- Cutover plan: freeze, communication, window and rollback
- Execution with logs and re‑runnable checkpoints
- Post‑migration validation and link fixes
- Handover: documentation, training and transition support
Common technical mappings (GitLab → GitHub)
Platforms are not identical. We anticipate differences and document decisions. Below is an overview of the most frequent mappings.
| Element | GitLab | GitHub Enterprise | Notes |
|---|---|---|---|
| Repository | Project repo | Repository | Commits and tags preserved; remotes updated |
| Issues | Issues | Issues | Labels, milestones and assignees mapped when compatible |
| Merge Request | Merge Request (MR) | Pull Request (PR) | Comments and diffs migrated; states and approvals may need notes |
| Labels | Labels per project/group | Labels per repo/org | We normalize names and colors when helpful |
| Milestones | Milestones | Milestones / Projects | Projects can complement milestones in GitHub |
| CI pipelines | .gitlab-ci.yml | .github/workflows/*.yml | Equivalence by jobs and stages; triggers adapted |
| Runners | GitLab Runners | GitHub Runners | Autoscaling plans: see auto-scale runners |
| Variables / Secrets | CI/CD Variables | Actions Secrets / Variables | Scope: repo, org and environment; rotation recommended |
| Artifacts | Job artifacts | Actions artifacts | Retention and expiry reviewed |
| Environments | Environments + approvals | Environments + branch rules | Protections and required reviewers adjusted |
Common risks and how we mitigate them
Typical risks include API limits, inter‑project references, large attachments and trigger differences. We anticipate these and create fallback paths.
For Docker‑based workloads we review caching to keep build times under control. See best practices for BuildKit and remote cache.
- Rate limits and timeouts: schedule windows and exponential backoff
- Broken references: mapping and post‑processing of links
- Large attachments: precheck and segmented reupload
- Exposed secrets: rotation and history scanning
- Manual or scheduled jobs: mapped to workflow_dispatch and schedules
- External integrations and webhooks: reconfigured and tested
What you receive at the end
We deliver the migration with traceability and handover materials. This reduces bus factor and speeds up daily operations.
- Migration plan and execution reports
- Re‑runnable scripts and playbooks to repeat or roll back steps
- Mapping matrix for users, labels and milestones
- Reviewed and documented GitHub Actions workflows
- Project validation checklist and evidence
- Guidance for runners and scaling
Signs you need this service
If one or more of the items below applies to your team, it's worth discussing a migration.
- Teams blocked by broken pipelines after manual cloning
- Loss of context in issues and comments when moving projects
- Dependency on a single CI/CD maintainer
- Need for compliance and audit trails across the move
- Pressure to consolidate platforms under tight deadlines
- Saturated CI runners and queues without autoscaling plans
How to start: preparation checklist
Good preparation reduces risk and downtime. Gather essential information and prioritize a representative pilot. During the cutover window, communicate stakeholders and success criteria.
- Inventory of projects, groups and cross‑repo dependencies
- List of external integrations: webhooks, registries and SSO/SAML
- Critical pipelines, required artifacts and internal SLAs
- Permissions matrix: owners, maintainers and reviewers per project
- Possible freeze windows and involved stakeholders
- Regulatory or audit requirements that affect migration
Frequently asked questions
Can everything be migrated 1:1 between GitLab and GitHub Enterprise?
Many items migrate directly—Git history, issues, labels and most comments. Some states, approval rules and platform‑specific features don’t have perfect equivalents. In those cases we record clear references and document impacts and validations.
What happens to GitLab CI pipelines during migration?
We convert .gitlab-ci.yml into GitHub Actions workflows. Triggers, jobs and matrices are mapped. Secrets and variables are reviewed by scope. Manual and scheduled jobs become workflow_dispatch and schedules. We revalidate artifacts, caching and environments before cutover.
Are issue comments, attachments and mentions preserved?
Comments and descriptions migrate when accessible via the API. Attachments are downloaded and reuploaded or referenced depending on size and permissions. user mentions are translated when identities are mapped. Items without equivalents receive traceable notes.
Will there be downtime during migration?
We run a pilot and plan a short cutover window to minimize impact. Typically we do a brief write freeze on GitLab during the final mirror. Duration depends on data volume, attachments and integrations. We document rollback steps and success criteria.
How are users and permissions handled?
We build a mapping matrix for users and groups, accounting for SSO/SAML when present. We adjust teams, access profiles and branch protections in GitHub Enterprise and validate access in pilot projects before cutover.
Ready to migrate with predictability and safety?
Count your repositories, integrations and critical pipelines. We’ll send a migration plan with next steps and a pilot option.
I want to discuss my migrationSee also
- DNS diagnosis and remediation service for name resolution between Docker containers and the host (bridge, overlay, systemd-resolved)
- Proactive PostgreSQL connection and pool monitoring with alerts to prevent 'too many connections' during billing peaks
- Linux Server PCI‑DSS Preparation Service (hardening, logging, network segmentation)
- Service: Implementing a Deploy Pipeline with Automatic Rollback and Smoke Tests for PHP Apps