---
title: Migrate from GitHub to Self‑Hosted GitLab: Easy Checklist
siteUrl: https://logzly.com/gitforgeinsights
author: gitforgeinsights (GitForge Insights)
date: 2026-07-08T14:00:56.738332
tags: [devops, gitlabmigration, versioncontrol]
url: https://logzly.com/gitforgeinsights/migrate-from-github-to-selfhosted-gitlab-easy-checklist
---


Tired of GitHub’s rising costs and wanting full control over your code? Follow this [step‑by‑step checklist](/gitforgeinsights/git-migration-checklist-move-selfhosted-to-cloud-saas) to **migrate from GitHub to self‑hosted GitLab** in a single afternoon—no data loss, no downtime. You’ll get exact commands, settings tweaks, and a quick validation list so your tiny team can switch without missing a beat.

This guide is built for teams of 5‑10 developers who need a reliable, low‑cost Git server. Every step was tested on a real 7‑person squad, so you can trust it works for small groups. By the end you’ll have a fully functional self‑hosted GitLab instance with all issues, wikis, and CI pipelines intact.

## Step‑by‑Step: Migrate from GitHub to Self‑Hosted GitLab

1. **Spin up a tiny VM** – Use a modest 2‑core VM with 4 GB RAM. Install Ubuntu Server (or any distro you like) and give it a static IP or DNS entry. This box will be the home for your GitLab service.

2. **Run the official GitLab installer** – The Omnibus package is the fastest route. Execute:  
   ```bash
   curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash  
   sudo EXTERNAL_URL="http://gitlab.mycompany.com" apt-get install gitlab-ee
   ```  
   Replace the URL with your own domain. The installer configures Nginx, PostgreSQL, and all dependencies automatically.

3. **Add users** – Log in as the root admin, go to *Admin → Users*, and create accounts for each teammate. Enable two‑factor authentication if you want extra security. Assign the **Developer** role so they can push code immediately.

4. **Push repos with `git push --mirror`** – On your workstation, clone each GitHub repo as a bare mirror:  
   ```bash
   git clone --mirror https://github.com/yourorg/project.git
   cd project.git
   git remote set-url --push origin http://gitlab.mycompany.com/yourgroup/project.git
   git push --mirror
   ```  
   This copies every branch, tag, and commit exactly as it is. Repeat for every repository you need to move.

5. **Update CI configs** – Replace the `.github/workflows/*.yml` files with GitLab CI `.gitlab-ci.yml` equivalents. Most syntax is similar, but rename secrets and adjust runner tags. Commit the new file and run a pipeline to confirm it works.

6. **Re‑create webhooks and integrations** – GitLab has its own webhook system. Under *Settings → Integrations* add any external services (Slack, Jira, etc.) and verify the URLs match those you used on GitHub.

7. **Migrate issues and wikis** – Use the GitHub‑to‑GitLab import tool (*New Project → Import Project*) for each repo. It pulls in issues, labels, and wikis. If the import fails, export issues to CSV from GitHub and import them via GitLab’s CSV option—works well for small issue sets.

8. **Run the checklist** – Before announcing the switch, verify:  
   - [ ] All repos pushed with `--mirror`  
   - [ ] Users added and permissions set  
   - [ ] CI pipelines green  
   - [ ] Webhooks pointing to GitLab  
   - [ ] Issues and wiki imported  
   - [ ] Old GitHub access tokens revoked  

That’s the **GitHub to GitLab migration checklist** I rely on. The whole process took me a Saturday afternoon, and the team barely noticed any downtime. The most common “gotcha” is forgetting to update the remote URL in local clones; a quick `git remote set-url origin …` fixes that for everyone.

If you’re setting up a **self‑hosted GitLab setup for 5‑10 developers**, you’ll see how lightweight the VM can be—no need for a large server farm, a single box does the job. When you hit **common issues moving repositories from GitHub to GitLab** such as protected‑branch mismatches or missing secret variables, just revisit the checklist and adjust the settings accordingly.

Switching from GitHub to a self‑hosted GitLab felt scary at first, but breaking it down into tiny, repeatable steps turned the whole thing into a smooth ride. Your tiny squad can now keep full control over your code without breaking the bank, and your CI pipelines will keep humming. Remember: a [solid checklist](/gitforgeinsights/git-migration-checklist-move-selfhosted-to-cloud-saas) and testing each step on a small repo first are the keys to success.