How to migrate GitLab to GitHub without losing merge request history
You can migrate GitLab to GitHub with merge request history only partly: commits, branches and tags move with Git, while review threads, approvals and pipeline logs depend on your migration tool and often need a separate archive. Take a full backup of the old instance before decommissioning it.
Can you move GitLab to GitHub and keep merge request history?
Partly, and the gap depends on the route you pick. Git history, branches and tags move cleanly because they are plain Git. Merge request discussion, approvals, issue links and pipeline results live in GitLab's database and API, not in the repository, so they move only if your migration tool maps them, and often not completely. Treat the old instance as an archive to preserve before you decommission it.
For a fractional CTO, that last step is the one that gets skipped. The cutover date is on the project plan; "what do we keep from the old server?" is easy to leave off.
What moves easily and what tends to get lost
Check your chosen tool's current documentation for exact coverage. The pattern below is a planning aid, not a vendor guarantee.
| Item | Usually travels with a clone | Needs a migration tool | Often at risk |
|---|---|---|---|
| Commits, branches, tags | Yes | No | Low |
| Merge request title and description | No | Yes | Medium |
| Review comments and threads | No | Yes, if supported | High |
| Approvals and approver identity | No | Depends on the tool | High |
| Issues and labels | No | Yes | Medium |
| CI pipeline logs and artifacts | No | No | High: often expire |
| Wiki pages and snippets | Wiki is a separate repository | Sometimes | Medium |
| User mapping | No | Needs a mapping file | Medium: unmapped authors become placeholders |
Pipeline logs deserve special attention. Instances can be set to expire artifacts on a schedule, so by migration day the older runs may already be gone.
How to run the migration in seven steps
- Inventory the instance. List groups, projects, active versus dormant repositories, and the approximate count of merge requests per project. Interview the person who set up the instance about integrations and runners.
- Decide the fidelity target. For each project, choose: code only, code plus open merge requests, or full history of merge requests and issues.
- Freeze retention. Pause any cleanup job that deletes old pipelines, artifacts or stale branches until the archive is taken.
- Pilot one project. Migrate a mid-sized repository with a messy merge request history, then compare counts of merge requests, comments and issues on both sides.
- Build the user map. Match GitLab usernames to GitHub accounts using work email addresses, and list the departed staff who will not have accounts.
- Migrate in waves. Move low-risk projects first, keep the source read-only after each wave, and record cutover dates.
- Archive the source. Take a full backup of the old instance, including its database export, and store it where an authorized administrator can retrieve it. Only then retire the server.
Common mistakes
Most failures here are planning gaps rather than tool faults, and each one is cheap to prevent when it is caught early.
| Mistake | Why it hurts | Fix |
|---|---|---|
| Migrating code only and deleting the server | Review reasoning and decision trail disappear | Keep a complete backup before decommissioning |
| Skipping the user map | Comments are attributed to placeholders | Build the map in step 5 and test it on the pilot |
| Letting artifact retention run during the project | Old CI results expire silently | Pause cleanup jobs in step 3 |
| Assuming counts match | Silent partial imports | Compare merge request and comment counts per project |
| Moving secrets inside history | Old keys stay readable in the new home | Rotate credentials, scan history before import |
Why the old merge request history is worth keeping
This section matters only after the migration itself is safe. Do not let a licensing idea slow the cutover.
Engineering teams rarely notice how much judgment is in review threads. A merge request shows a proposed change, the objections raised, the revisions that answered them, who approved and whether the pipeline passed. That sequence of request, review and outcome is the kind of record AI developers want when they train and evaluate coding and review agents, because it shows how real engineers decide.
That makes the archive a possible licensing input for the client, in addition to a compliance and audit asset. It does not make every codebase a candidate. The company must own the code and the discussion, third-party and open-source material must be handled correctly, and any customer-confidential content has to be dealt with under rules agreed before work begins. Nothing is binding until the company agrees price and terms and signs.
Illustrative: a mid-sized engineering team
Illustrative scenario, fully fictional: a 120-person logistics software company has run a self-hosted GitLab for nine years. A fractional CTO plans a move to GitHub. In the inventory step she notices that three older products have no active development but thousands of closed merge requests. She keeps those as read-only backups and tells the CEO the archive may be worth a licensing conversation. The migration itself goes ahead exactly as planned.
What this means for a fractional CTO who refers clients
You are already in the room when systems are inventoried, which is the right time to raise it. Use this screen:
- The company has 50+ full-time employees at peak (contractors excluded).
- The instance holds several years of merge requests, issues and review threads.
- Other engineering and operations systems also hold history; the Jira Service Management brief and the Zoho CRM brief show how neighbouring systems add context.
- The company owns the code and can retrieve exports.
- An owner, CEO or CFO would consider an exclusive license for an agreed term.
For change history in business systems, the question on Salesforce field history retention shows a similar retention pattern, and the data inventory builder lists systems without describing any record. Read referral opportunities for fractional CTOs for the full role playbook.
You make the introduction only. You never export, upload or describe confidential repositories, and the who qualifies page sets the baseline.
How partner rewards work
Partners earn 25% of the eligible platform fees SourceX actually collects from the referred company's licensing deals, capped at $100,000 cumulative per referred company. The reward becomes payable only after the buyer pays and SourceX receives its fee; a lead, meeting or signed agreement alone does not trigger payment, and no reward is guaranteed. It is a share of SourceX's fee and is never deducted from what the company receives. If you advise the client under a contract that limits referral income, check it first.
Next step
Add one line to your migration plan: "preserve a full archive before decommission". Then register as a partner if a client fits, or point the CEO to sourcex.si/apply.
- Step 1Share your linkSend your personal link to a company you know.
- Step 2Company appliesThe company applies itself at /apply.
- Step 3Buyer selects and paysThe buyer selects and pays for the data and SourceX receives its fee.
- Step 4You get your rewardYour share of SourceX fees becomes payable.
Common questions
Does a GitHub import bring over GitLab review comments?
It depends on the tool and its current coverage, so verify with your own pilot rather than assuming. Commits, branches and tags move reliably because they are Git data. Review threads, approvals and linked issues are the usual gaps, which is why comparing counts after a pilot project is the safest check.
Should I keep the GitLab server after migration?
Keep at least a complete backup, including the database export, until the business confirms it no longer needs the review trail. Some teams keep the instance read-only for a defined period. The backup protects audit needs and keeps open a future option to license the engineering archive.
What happens to CI pipeline logs during a move?
They usually do not migrate, and instances can expire artifacts on a schedule. Pause cleanup jobs before you start, then decide which projects need logs preserved. Where logs are not kept, note the gap in the archive documentation so nobody assumes it exists.
Can a company license its merge request history?
Potentially, if it owns the code and discussion and has the rights to license them. Third-party code, open-source material and customer-confidential content must be handled under rules agreed with the company. SourceX reviews rights, and nothing is binding until the company signs.
Is a fractional CTO allowed to refer clients and earn a reward?
Program-wise, anyone can join. Whether you may accept a referral reward depends on your client contract and any rules that apply to you, so read them first and disclose where required. The reward is paid only after the buyer pays and SourceX receives its fee.
Related pages
- Jira Service Management export: requests, SLAs and linked issues explained
- What does a long Zoho CRM and Zoho One history signal about a client?
- How long does Salesforce keep field history, and why does depth matter?
- Build a metadata-only business data inventory
- Referral opportunities for fractional CTOs
- Which US businesses are a fit for a SourceX data licensing introduction
Free resources
- Days sales outstanding calculator — How many days customers take to pay.
- Business succession planning assessment — Ten questions on successor, transition and documentation.
- NPV calculator — Net present value with a discounted cash flow table.
- All free tools · MCP resource center
By SourceX Partnerships Team · Published 2026-10-09 · Updated 2026-10-09
Know a US company with valuable proprietary data?
Become a referral partner from anywhere we support, get your link and introduce an owner or authorized decision-maker.
Refer a company →I own a business
Explore licensing your company's data to AI developers worldwide. Start a short assessment; no uploads needed.
Start an assessment