
TL;DR
GitHub Enterprise Importer now supports self-serve GitLab to GitHub migrations in GA. gh gl2gh exports GitLab projects, transforms merge requests into pull requests, and stages archives in GitHub or your own blob storage. Here is what actually moves and what you rebuild.
On August 3, GitHub moved GitLab migrations in GitHub Enterprise Importer (GEI, formerly Octoshift) from preview to generally available. Teams can now self-serve a migration from gitlab.com or GitLab Self-Managed into GitHub Enterprise Cloud using the gh gl2gh CLI extension, with no professional-services engagement required.
The flow is a four-step pipeline, per the GitHub docs:
gh gl2gh exports the GitLab project to a .tar.gz archive containing the Git repository plus project metadata (issues, merge requests, labels, milestones, releases)--use-github-storage) or a storage account you own in AWS S3 or Azure Blob StorageSetup is two environment variables and one command. Create a GitLab personal access token with api and read_repository scopes, a GitHub PAT, set GITLAB_PAT and GH_PAT, then:
gh extension install github/gh-gl2gh
gh gl2gh generate-script --gitlab-server-url https://gitlab.com \
--github-org DESTINATION \
--output filename.ps1
The generated script handles single repositories or scripted bulk migrations. Targets are organizations on GitHub Enterprise Cloud, both github.com and ghe.com. GitLab to GitHub Enterprise Server is not supported.
The data fidelity map is the heart of any migration story, and the docs are unusually precise about it.
What migrates: full Git history and the repository wiki, commit comments, issues and issue comments (threaded discussions become flat comments with thread context preserved), milestones, timeline events, emoji reactions, uploads, and releases with assets. Merge requests convert to pull requests, including reviewers, approvers, and state events. Comments on merge requests migrate as review comments only when diff data is present in the export, and the export carries only the latest diff. Project members arrive as mannequins: placeholder identities you reclaim to real GitHub accounts.
What does not migrate, and this is the cost side of the ledger:
.gitlab-ci.yml has no automatic GitHub Actions equivalentLimits worth knowing before you plan: a 40 GiB source-code ceiling for the repository (public preview), 2 GiB per commit and per push, a 400 MiB per-file ceiling during migration dropping to 100 MiB after, and a 40 GB cap on GitLab's own project export archive. Code search re-indexes over a few hours after import, and org rulesets can fail a migration if existing commits do not comply.
From the archive
Aug 3, 2026 • 7 min read
Aug 3, 2026 • 7 min read
Aug 3, 2026 • 6 min read
Aug 3, 2026 • 6 min read
This is GitHub closing the loop on its platform consolidation story. GEI already covers Azure DevOps and GitHub-to-GitHub in GA, with Bitbucket Server and Data Center in public beta. GitLab was the big missing self-serve path, and the gap mattered because GitLab shops tend to be all-in: projects, CI, issues, and container registry in one place. The export pipeline and the MR-to-PR transform are what make this a real migration rather than a re-import of Git history plus a spreadsheet of issues.
The transformation semantics deserve attention before you commit to the move. Merge request approvals and reviewers survive, which is the part most teams cannot afford to lose. But the docs' note that threaded discussions flatten, and that only the latest diff rides in the export, means review history reads differently after migration. Budget for that when you communicate the move to the team.
My read: the CI/CD gap is the actual price of the move, and it is a big one. GitLab's pipeline config, variables, artifacts, and schedules are the machinery most teams have tuned for years, and none of it converts. GitHub Actions gets you to parity on pipeline runs, but rebuilding .gitlab-ci.yml as workflows, migrating secrets, and re-doing environment gates is a project in its own right. The right framing is: this GA makes the repository and issue migration turnkey, and the CI rebuild is the remaining manual work.
The storage model is also distinctive. Staging archives in your own S3 or Azure bucket, or in GitHub-owned storage, means the migration runs from a machine with network reach to both sides and to the staging bucket. For air-gapped or heavily governed self-managed installs, the access story (PATs with api and read_repository scopes) is simpler than it has been, but the archive route is still a bulk data movement, not a streamed one.
Teams that already run GitHub for most of their work and have GitLab standing as a single-tenant island. For them, the cost of the move just dropped from a paid migration engagement to a scripted CLI run plus a CI rebuild. The same is true for teams whose GitLab self-managed instance is approaching end-of-life: supported-version coverage means you need a maintained instance to migrate from, and the importer only targets Enterprise Cloud, so this does not help the GitLab-on-GitHub-Enterprise-Server crowd.
If you are weighing the move, the practical next step is a trial run on one representative repository: gh gl2gh supports it, and the docs explicitly recommend it. Check the mannequin reclaim flow, diff your CI surface against the not-migrated list, and validate that your merge trains and approval policies have Actions-based replacements before you script the fleet.
Read next
GitHub's stacked pull requests went into public preview on July 30. Stacks turn one large change into an ordered chain of small, reviewable PRs with one-click merge, plus a gh-stack skill for coding agents.
7 min readGitHub Actions added a $/ prefix that resolves a same-repository action or reusable workflow at the exact commit being run, with no checkout. It fixes the pinning trap that made enterprise SHA-pinning policies hard to satisfy for a repo's own actions.
6 min readGitHub's new model policy targeting lets enterprise admins set a baseline of Copilot models for the whole company, then grant extra models to specific teams. How the preview works, the least-restrictive evaluation rule, and what it changes for AI governance.
5 min readTechnical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.
Gives AI agents access to 250+ external tools (GitHub, Slack, Gmail, databases) with managed OAuth. Handles the auth and...
View ToolOpenAI's coding agent for terminal, cloud, IDE, GitHub, Slack, and Linear workflows. Reads repos, edits files, runs comm...
View ToolThe original AI coding assistant. 77M+ developers. Inline completions in VS Code and JetBrains. Copilot Workspace genera...
View ToolAI app builder - describe what you want, get a deployed full-stack app with React, Supabase, and auth. No coding requi...
View ToolSchedule jobs in plain English. See what ran, what broke, what's next.
View AppTrack open-source maintenance signals, release tasks, and repo follow-ups in one dashboard.
View AppSchema browser, migration planner, RLS auditor, and SQL notebook for Postgres. Built for Neon, Supabase, or bare Postgres.
View AppWhat MCP servers are, how they work, and how to build your own in 5 minutes.
AI AgentsFull GitHub CLI support for automated PR and issue workflows.
Claude CodeInteractive timeline showing what's in context at each turn.
Claude Code
In this video, we explore Rich Sutton's 'Bitter Lesson' and its implications for the future of software development, particularly as we approach 2026. We discuss the key principles from Sutton's...

Learn The Fundamentals Of Becoming An AI Engineer On Scrimba; https://v2.scrimba.com/the-ai-engineer-path-c02v?via=developersdigest OpenAI's New O1 Model and $200/Month ChatGPT Pro Tier: What's...

Learn The Fundamentals Of Becoming An AI Engineer On Scrimba; https://v2.scrimba.com/the-ai-engineer-path-c02v?via=developersdigest Introducing GitHub Spark and Exciting GitHub Copilot Updates!...

GitHub's stacked pull requests went into public preview on July 30. Stacks turn one large change into an ordered chain o...

GitHub Actions added a $/ prefix that resolves a same-repository action or reusable workflow at the exact commit being r...

GitHub's new model policy targeting lets enterprise admins set a baseline of Copilot models for the whole company, then...

We ran the same Convex to Neon migration on four apps in a week. Here is what stayed identical, what differed per app, a...

Cloudflare moved cdnjs, the open-source CDN behind ~12% of the web, entirely onto Workers, Workflows, R2, and Queues. Th...

GitHub deprecated Gemini 2.5 Pro and Gemini 3 Flash in every Copilot surface on July 31, 2026. The suggested replacement...

New tutorials, open-source projects, and deep dives on coding agents - delivered weekly.