インポート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を指定しない場合、プロジェクトは個人のユーザー名のネームスペースにインポートされます。
前提要件:
- 詳細については、Bitbucket Serverインポーターの前提条件を参照してください。
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"
}'