Import your project from Bitbucket Cloud to GitLab

note
The Bitbucket Cloud importer works only with Bitbucket.org, not with Bitbucket Server (aka Stash). If you are trying to import projects from Bitbucket Server, use the Bitbucket Server importer.

Import your projects from Bitbucket Cloud to GitLab with minimal effort.

The Bitbucket importer can import:

  • Repository description
  • Git repository data
  • Issues
  • Issue comments
  • Pull requests
  • Pull request comments
  • Milestones
  • Wiki

When importing:

  • References to pull requests and issues are preserved.
  • Repository public access is retained. If a repository is private in Bitbucket, it’s created as private in GitLab as well.

Prerequisites

Requirement for Maintainer role instead of Developer role introduced in GitLab 16.0 and backported to GitLab 15.11.1 and GitLab 15.10.5.

  • Bitbucket Cloud integration must be enabled. If that integration is not enabled, ask your GitLab administrator to enable it. The Bitbucket Cloud integration is enabled by default on GitLab.com.
  • Bitbucket Cloud import source must be enabled. If not enabled, ask your GitLab administrator to enable it. The Bitbucket Cloud import source is enabled by default on GitLab.com.
  • At least the Maintainer role on the destination group to import to.

How it works

When issues/pull requests are being imported, the Bitbucket importer uses the Bitbucket nickname of the author/assignee and tries to find the same Bitbucket identity in GitLab. If they don’t match or the user is not found in the GitLab database, the project creator (most of the times the current user that started the import process) is set as the author, but a reference on the issue about the original Bitbucket author is kept.

The importer creates any new namespaces (groups) if they don’t exist or in the case the namespace is taken, the repository is imported under the user’s namespace that started the import process.

Requirements for user-mapped contributions

For user contributions to be mapped, each user must complete the following before the project import:

  1. Verify that the username in the Bitbucket account settings matches the public name in the Atlassian account settings. If they don’t match, modify the public name in the Atlassian account settings to match the username in the Bitbucket account settings.

  2. Connect your Bitbucket account in GitLab profile service sign-in.

  3. Set your public email.

Import your Bitbucket repositories

Ability to re-import projects introduced in GitLab 15.9.

  1. Sign in to GitLab.
  2. On the left sidebar, at the top, select Create new () and New project/repository.
  3. Select Import project.
  4. Select Bitbucket Cloud.
  5. Log in to Bitbucket and grant GitLab access to your Bitbucket account.

    Grant access

  6. Select the projects that you’d like to import or import all projects. You can filter projects by name and select the namespace each project is imported for.

  7. To import a project:
    • For the first time: Select Import.
    • Again: Select Re-import. Specify a new name and select Re-import again. Re-importing creates a new copy of the source project.

Troubleshooting

If you have more than one Bitbucket account

Be sure to sign in to the correct account.

If you’ve accidentally started the import process with the wrong account, follow these steps:

  1. Revoke GitLab access to your Bitbucket account, essentially reversing the process in the following procedure: Import your Bitbucket repositories.

  2. Sign out of the Bitbucket account. Follow the procedure linked from the previous step.

User mapping fails despite matching names

For user mapping to work, the username in the Bitbucket account settings must match the public name in the Atlassian account settings. If these names match but user mapping still fails, the user may have modified their Bitbucket username after connecting their Bitbucket account in the GitLab profile service sign-in.

To fix this, the user must verify that their Bitbucket external UID in the GitLab database matches their current Bitbucket public name, and reconnect if there’s a mismatch:

  1. Use the API to get the currently authenticated user.

  2. In the API response, the identities attribute contains the Bitbucket account that exists in the GitLab database. If the extern_uid doesn’t match the current Bitbucket public name, the user should reconnect their Bitbucket account in the GitLab profile service sign-in.

  3. Following reconnection, the user should use the API again to verify that their extern_uid in the GitLab database now matches their current Bitbucket public name.

The importer must then delete the imported project and import again.