Migrate through a Git URL

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

Import your existing repositories by using the Git URL. Imports performed this way do not include GitLab issues or merge requests.

Prerequisites

  • Repository by URL import source enabled. If not enabled, ask your GitLab administrator to enable it. The Repository by URL import source is enabled by default on GitLab.com.
  • The Maintainer or Owner role on the destination group to import to.
  • If importing a private repository, an access token for authenticated access to the source repository might be required instead of a password.

Import a repository through the UI

To import a repository through the UI:

  1. In the upper-right corner, select Create new ( plus ) and New project/repository.
  2. Select Import project.
  3. Select Repository by URL.
  4. Enter a Git repository URL.
  5. Complete the remaining fields. A username and password (or access token) is required for imports from private repositories.
  6. Select Create project.

Your newly created project is displayed.

Import a repository through the API

You can use the Projects API to import a Git repository:

curl --location "https://gitlab.example.com/api/v4/projects/" \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <your-token>' \
--data-raw '{
    "description": "New project description",
    "path": "new_project_path",
    "import_url": "https://username:password@example.com/group/project.git"
}'

Some providers do not allow a password and instead require an access token.

Import a timed-out repository

Imports of large repositories might time out after three hours. To import a timed-out repository:

  1. Clone the repository:

    git clone --mirror https://example.com/group/project.git

    The --mirror option ensures all branches, tags, and refs are copied.

  2. Add the new remote repository:

    cd repository.git
    git remote add new-origin https://gitlab.com/group/project.git
  3. Push everything to the new remote repository:

    git push --mirror new-origin