GitHub import Rake task (FREE SELF)

Introduced in GitLab 15.9, Rake task no longer automatically creates namespaces or groups that don't exist.

To retrieve and import GitHub repositories, you need a GitHub personal access token. A username should be passed as the second argument to the Rake task, which becomes the owner of the project. You can resume an import with the same command.

Bear in mind that the syntax is very specific. Remove any spaces in the argument block and before/after the brackets. Also, some shells (for example, Zsh) can interpret the open/close brackets ([]) separately. You may want to either escape the brackets or use double quotes.

Prerequisite:

  • At least the Maintainer role on the destination group to import to. Using the Developer role for this purpose was deprecated in GitLab 15.8 and will be removed in GitLab 16.0.

Rate limit

If the GitHub rate limit is reached while importing, the importing process waits (sleep()) until it can continue importing.

Importing multiple projects

To import a project from the list of your GitHub projects available:

# Omnibus installations
sudo gitlab-rake "import:github[access_token,root,foo/bar]"

# Installations from source
bundle exec rake "import:github[access_token,root,foo/bar]" RAILS_ENV=production

In this case, access_token is your GitHub personal access token, root is your GitLab username, and foo/bar is the new GitLab namespace/project created from your GitHub project. Subgroups are also possible: foo/foo/bar.

Importing a single project

To import a specific GitHub project (named foo/github_repo here):

# Omnibus installations
sudo gitlab-rake "import:github[access_token,root,foo/bar,foo/github_repo]"

# Installations from source
bundle exec rake "import:github[access_token,root,foo/bar,foo/github_repo]" RAILS_ENV=production