インポートAPI
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
このAPIを使用して、外部ソースからリポジトリをインポートする。
GitHubからリポジトリをインポート
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経由でパブリックプロジェクトをインポート
グループアクセストークンを使用して、API経由でGitHubからGitLabにプロジェクトをインポートする場合:
- そのGitLabプロジェクトは、元のプロジェクトの表示レベル設定を継承します。その結果、元のプロジェクトがパブリックの場合、そのプロジェクトは公開されます。
pathまたはtarget_namespaceが存在しない場合、プロジェクトのインポートは失敗します。
GitHubプロジェクトのインポートをキャンセル
進行中の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 GistをGitLabスニペットにインポート
個人のGitHub GistをGitLabスニペットにインポートします。最大10個のファイルでGistをインポートできます。10個を超えるファイルを含むGitHub Gistはスキップされます。これらのGitHub Gistは手動で移行する必要があります。
Gistをインポートできなかった場合、インポートされなかったGistのリストが記載されたメールが送信されます。
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: Gistのインポートが開始されています。401 Unauthorized: ユーザーのGitHubのパーソナルアクセストークンが無効です。422 Unprocessable Entity: Gistのインポートはすでに進行中です。429 Too Many Requests: ユーザーがGitHubのレート制限を超えました。
Bitbucket Serverからリポジトリをインポート
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からリポジトリをインポート
Bitbucket CloudからGitLabにリポジトリをインポートします。
前提条件:
- のBitbucket Cloudインポーターの前提条件。
- 次のいずれか。
- Bitbucket Cloudアプリのパスワード。Bitbucket Cloudアプリのパスワードは非推奨です。
- 必要なスコープを持つBitbucket Cloud APIトークン。
POST /import/bitbucket| 属性 | 型 | 必須 | 説明 |
|---|---|---|---|
bitbucket_api_token | 文字列 | いいえ | Bitbucket Cloud APIトークン。APIトークン認証を使用する場合に必要です。 |
bitbucket_email | 文字列 | いいえ | Bitbucket Cloudのメール。APIトークン認証を使用する場合に必要です。 |
bitbucket_username | 文字列 | いいえ | 非推奨。Bitbucket Cloudのユーザー名。アプリのパスワード認証を使用する場合に必要です。 |
bitbucket_app_password | 文字列 | いいえ | 非推奨。Bitbucket Cloudアプリのパスワード。アプリのパスワード認証を使用する場合に必要です。 |
repo_path | 文字列 | はい | リポジトリへのパス。 |
target_namespace | 文字列 | はい | リポジトリのインポート先のネームスペース。/namespace/subgroupのようなサブグループをサポートします。 |
new_name | 文字列 | いいえ | 新しいプロジェクトの名前。新しいパスとしても使用されるため、特殊文字で開始または終了したり、連続した特殊文字を含めたりすることはできません。 |
APIトークンを使用した例:
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_email": "email@example.com",
"bitbucket_api_token": "your_bitbucket_api_token",
"repo_path": "username/my_project",
"target_namespace": "my_group/my_subgroup",
"new_name": "new_project_name"
}'Bitbucket Cloud APIトークンのスコープ
認証にBitbucket Cloud APIトークンを使用している場合、そのトークンには次のスコープが必要です:
read:repository:bitbucketread:pullrequest:bitbucketread:issue:bitbucketread:wiki:bitbucket