Last checked October 16, 2026
Migrate from GitHub to GitLab Community Edition
GitLab can import a GitHub repo: code, issues, pull requests, and the wiki. Actions do not become pipelines.
How long: An hour for one public repo. Much longer if the repo has years of issues and pull requests.
Take it out
Step 1
Keep a Git copy
While you still have access, run git clone --bare on the repository and keep that folder. GitHub's docs say a bare clone, then git push --mirror, copies branches and tags. It does not copy issues, pull requests, or the wiki.
Step 2
Make a classic token if sign-in is not enough
GitLab can use GitHub sign-in, or a classic personal access token. The newer fine-grained token is not supported. If you use a token, create a classic one, give it the repo scope, and add read:org when you want collaborators or Git LFS files. Keep the token only until the import is done.
Put it in
Step 1
Open the GitHub importer
In GitLab, choose Create new, then New project/repository. Choose Import project, then GitHub. On GitLab.com this import is already on. On a server you run, an admin has to leave the GitHub import source on. That screen always imports from github.com. A GitHub Enterprise Server on your own network uses GitLab's import API instead.
Step 2
Pick one repo first
Choose Authorize with GitHub, or paste the classic token and choose Authenticate. You need access to the GitHub project, and the Maintainer or Owner role on the GitLab group that will hold it. You can change the GitLab name before you start. Import one repo and read the status before you import the rest.
Step 3
Turn on images if you still need them
Collaborators are included unless you turn that off. Images and files pasted into issues and pull requests are off, because they slow the import. Links to those files break after you delete them on GitHub, so turn Import Markdown attachments on when they matter. Importing collaborators needs Write or Maintain access on the GitHub project.
What you lose
Actions stay as files
The git history comes across, including files in .github/workflows. GitLab does not run those files. GitLab runs a .gitlab-ci.yml file. Secrets do not come with the repo. Add them again in GitLab. Do not paste a secret into an issue.
Organizations stay behind
The import does not create your GitHub organization inside GitLab. Make the GitLab group yourself and choose it as the destination. Stars and GitHub project boards are not in the list GitLab says it imports. Wiki pages are in that list.
Some rules and people
The GitHub rule that requires status checks before merging is not imported. Custom GitHub roles are not supported, and GitLab says they can leave an import only partly finished. GitLab puts backticks around @mentions so they do not point at the wrong person. People still sign in with GitLab accounts.
Read the status before you archive the GitHub repo. Complete means every item came across. Partially completed means some items failed. Open Details and fix those before you tell the team the move is done.
Sponsored migration guide
$299 once
A guide for one switch: what to take out, how to put it in, and what you lose. The page is labeled sponsored. It does not change which free app ranks #1.
- One pair, written from public pages
- Sponsored label on the guide
- The real top pair keeps its own guide
Opens Stripe to pay.
Free alternatives to GitHub·GitLab Community Edition
https://ditchly.co/migrate/github-to-gitlab