正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

インポートAPI

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。

このAPIを使用して、外部ソースからリポジトリをインポートすることができます。

プロジェクトを個人ネームスペースにインポートする場合、ユーザーコントリビュートマッピングはサポートされていません。パーソナルネームスペースにインポートし、user_mapping_to_personal_namespace_owner機能フラグが有効になっている場合、すべてのコントリビュートはパーソナルネームスペースのオーナーに割り当てられ、再割り当てできません。user_mapping_to_personal_namespace_owner機能フラグが無効になっている場合、すべてのコントリビュートはImport Userという単一の非機能ユーザー名に割り当てられ、再割り当てできません。

GitHubからリポジトリをインポート

APIを使用して、GitHubからGitLabへプロジェクトをインポートします。

前提要件:

  • GitHubインポーターの前提条件
  • target_namespaceで設定されたネームスペースが存在する必要があります。
  • ネームスペースは、ユーザー名のネームスペースまたは、少なくともメンテナーロールを持つ既存のグループにすることができます。
POST /import/github
属性必須説明
personal_access_token文字列はいGitHubのパーソナルアクセストークン。
repo_id整数はいGitHubリポジトリID。
target_namespace文字列はいリポジトリのインポート先のネームスペース。/namespace/subgroupのようなサブグループをサポートします。空白にすることはできません。
github_hostname文字列いいえカスタムGitHub Enterpriseホスト名。GitHub.comには設定しないでください。GitLab 16.5からGitLab 17.1までは、パス/api/v3を含める必要があります。
new_name文字列いいえ新しいプロジェクトの名前。新しいパスとしても使用されるため、特殊文字で始めたり終わったりすることはできず、連続した特殊文字を含めることもできません。
optional_stagesオブジェクトいいえインポートする追加アイテム
pagination_limit整数いいえGitHubへのAPIリクエストごとに取得されるアイテム数。デフォルト値は、ページあたり100アイテムです。大規模なリポジトリからのプロジェクトインポートの場合、数値を小さくすると、GitHub APIエンドポイントから500または502エラーが返されるリスクを軽減できます。ただし、ページサイズを小さくすると、移行時間が増加します。
timeout_strategy文字列いいえインポートのタイムアウトを処理するためのストラテジー。有効な値は、optimistic(インポートの次のステージングに進む)またはpessimistic(すぐに失敗する)です。pessimisticがデフォルトです。GitLab 16.5で導入されました。
curl --request POST \
  --url "https://gitlab.example.com/api/v4/import/github" \
  --header "content-type: application/json" \
  --header "Authorization: Bearer <your_access_token>" \
  --data '{
    "personal_access_token": "aBc123abC12aBc123abC12abC123+_A/c123",
    "repo_id": "12345",
    "target_namespace": "group/subgroup",
    "new_name": "NEW-NAME",
    "github_hostname": "https://github.example.com",
    "optional_stages": {
      "single_endpoint_notes_import": true,
      "attachments_import": true,
      "collaborators_import": true
    }
}'

次のキーは、optional_stagesで使用できます:

  • attachments_import、Markdownの添付ファイルをインポートします。
  • collaborators_import、外部コラボレーターではない直接リポジトリコラボレーターをインポートします。
  • single_endpoint_issue_events_import、イシューとプルリクエストイベントをインポートします。このオプションのステージングは、GitLab 16.9で削除されました。
  • single_endpoint_notes_import、代替的でより徹底的なコメントをインポートします。

詳細については、追加のアイテムのインポートの選択を参照してください。

レスポンス例:

{
    "id": 27,
    "name": "my-repo",
    "full_path": "/root/my-repo",
    "full_name": "Administrator / my-repo",
    "refs_url": "/root/my-repo/refs",
    "import_source": "my-github/repo",
    "import_status": "scheduled",
    "human_import_status_name": "scheduled",
    "provider_link": "/my-github/repo",
    "relation_type": null,
    "import_warning": null
}

グループアクセストークンを使用してAPI経由でパブリックプロジェクトをインポート

グループアクセストークンを使用してGitHubからGitLabにプロジェクトをAPI経由でインポートすると、次のようになります:

  • GitLabプロジェクトは、元のプロジェクトの表示レベル設定を継承します。その結果、元のプロジェクトがパブリックの場合、プロジェクトはパブリックにアクセスできます。
  • pathまたはtarget_namespaceが存在しない場合、プロジェクトのインポートは失敗します。

GitHubプロジェクトのインポートのキャンセル

APIを使用して、進行中のGitHubプロジェクトのインポートをキャンセルします。

POST /import/github/cancel
属性必須説明
project_id整数はいGitLabのプロジェクトID。
curl --request POST \
  --url "https://gitlab.example.com/api/v4/import/github/cancel" \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --data '{
    "project_id": 12345
}'

レスポンス例:

{
    "id": 160,
    "name": "my-repo",
    "full_path": "/root/my-repo",
    "full_name": "Administrator / my-repo",
    "import_source": "source/source-repo",
    "import_status": "canceled",
    "human_import_status_name": "canceled",
    "provider_link": "/source/source-repo"
}

次のステータスコードを返します:

  • 200 OK: プロジェクトのインポートがキャンセルされます。
  • 400 Bad Request: プロジェクトのインポートをキャンセルできません。
  • 404 Not Found: project_idに関連付けられたプロジェクトが存在しません。

GitHubジストをGitLabスニペットにインポート

GitLab APIを使用して、(最大10個のファイルを含む)個人用GitHubジストを個人用GitLabスニペットにインポートできます。ファイル数が10を超えるGitHubジストはスキップされます。これらのGitHubジストは手動で移行する必要があります。

ジストをインポートできなかった場合、インポートされなかったジストのリストが記載されたメールが送信されます。

POST /import/github/gists
属性必須説明
personal_access_token文字列はいGitHubのパーソナルアクセストークン。
curl --request POST \
  --url "https://gitlab.example.com/api/v4/import/github/gists" \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_gitlab_access_token>" \
  --data '{
    "personal_access_token": "<your_github_personal_access_token>"
}'

次のステータスコードを返します:

  • 202 Accepted: ジストのインポートが開始されています。
  • 401 Unauthorized: ユーザー名のGitHubパーソナルアクセストークンが無効です。
  • 422 Unprocessable Entity: ジストのインポートはすでに進行中です。
  • 429 Too Many Requests: ユーザー名がGitHubのレート制限を超過しました。

Bitbucket Serverからリポジトリをインポート

APIを使用して、Bitbucket ServerからGitLabへプロジェクトをインポートします。

Bitbucketプロジェクトキーは、Bitbucketでリポジトリを検索するためだけに使用されます。リポジトリをGitLabグループにインポートする場合は、target_namespaceを指定する必要があります。target_namespaceを指定しない場合、プロジェクトは個人のユーザー名のネームスペースにインポートされます。

前提要件:

POST /import/bitbucket_server
属性必須説明
bitbucket_server_project文字列はいBitbucketプロジェクトキー。
bitbucket_server_repo文字列はいBitbucketリポジトリ名。
bitbucket_server_url文字列はいBitbucket ServerのURL。
bitbucket_server_username文字列はいBitbucket Serverのユーザー名。
personal_access_token文字列はいBitbucket Serverのパーソナルアクセストークンまたはパスワード。
new_name文字列いいえ新しいプロジェクトの名前。新しいパスとしても使用されるため、特殊文字で始めたり終わったりすることはできず、連続した特殊文字を含めることもできません。GitLab 16.9以前は、プロジェクトパスは代わりにBitbucketからコピーされました。GitLab 16.10では、動作が元の動作に戻されました
target_namespace文字列いいえリポジトリのインポート先のネームスペース。/namespace/subgroupのようなサブグループをサポートします。
timeout_strategy文字列いいえインポートのタイムアウトを処理するためのストラテジー。有効な値は、optimistic(インポートの次のステージングに進む)またはpessimistic(すぐに失敗する)です。pessimisticがデフォルトです。GitLab 16.5で導入されました。
curl --request POST \
  --url "https://gitlab.example.com/api/v4/import/bitbucket_server" \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --data '{
    "bitbucket_server_url": "http://bitbucket.example.com",
    "bitbucket_server_username": "root",
    "personal_access_token": "Nzk4MDcxODY4MDAyOiP8y410zF3tGAyLnHRv/E0+3xYs",
    "bitbucket_server_project": "NEW",
    "bitbucket_server_repo": "my-repo",
    "new_name": "NEW-NAME"
}'

Bitbucket Cloudからリポジトリをインポート

APIを使用して、Bitbucket CloudからGitLabへプロジェクトをインポートします。

前提要件:

POST /import/bitbucket
属性必須説明
bitbucket_username文字列はいBitbucket Cloudのユーザー名。
bitbucket_app_password文字列はいBitbucket Cloudアプリのパスワード。
repo_path文字列はいリポジトリへのパス。
target_namespace文字列はいリポジトリのインポート先のネームスペース。/namespace/subgroupのようなサブグループをサポートします。
new_name文字列いいえ新しいプロジェクトの名前。新しいパスとしても使用されるため、特殊文字で始めたり終わったりすることはできず、連続した特殊文字を含めることもできません。
curl --request POST \
  --url "https://gitlab.example.com/api/v4/import/bitbucket" \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --data '{
    "bitbucket_username": "bitbucket_username",
    "bitbucket_app_password": "bitbucket_app_password",
    "repo_path": "username/my_project",
    "target_namespace": "my_group/my_subgroup",
    "new_name": "new_project_name"
}'