インポートAPI
GitHub や Bitbucket Server からリポジトリをインポートするには、Import API を使用します。
GitHub からのリポジトリのインポート
- GitLab 15.8で導入されたGitLabは、指定された名前空間やグループ名が
target_namespace存在しないtarget_namespace場合、自動的に名前空間やグループを作成することはなくなりました。target_namespaceGitLabはまた、名前空間やグループ名が取られていたりtarget_namespace空白のtarget_namespace場合、ユーザーの個人的な名前空間を使用するようにフォールバックしなくtarget_namespaceなりました。- GitLab16.0で導入され、GitLab15.11.1とGitLab15.10.5にバックポートされたDeveloperロールの代わりにMaintainerロールの要件。
collaborators_importoptional_stagesのキーが GitLab 16.0 で導入されました。
APIを使ってGitHubからGitLabにプロジェクトをインポートします。
前提条件:
- GitHub インポーターの前提条件。
-
target_namespaceで設定した名前空間が存在すること。 - 名前空間は、ユーザー名前空間か、少なくともメンテナーのロールを持っている既存のグループにすることができます。
POST /import/github
| 属性 | 種類 | 必須 | 説明 |
|---|---|---|---|
personal_access_token | 文字列です。 | yes | GitHubパーソナルアクセストークン |
repo_id | 整数。 | yes | GitHubリポジトリID |
new_name | 文字列です。 | いいえ | 新しいリポジトリ名 |
target_namespace | 文字列です。 | yes | リポジトリをインポートする名前空間。/namespace/subgroup のようなサブグループをサポートします。GitLab 15.8 以降では、空白であってはなりません。 |
github_hostname | 文字列です。 | いいえ | GitHub Enterprise のカスタムホスト名。GitHub.comには設定しないでください。 |
optional_stages | オブジェクトを返します。 | いいえ | インポートする追加項目。GitLab 15.5で導入されました。 |
additional_access_tokens | 文字列です。 | いいえ | カンマ区切りの GitHub パーソナルアクセストークンの追加リスト。GitLab 16.2 で導入されました。 |
curl --request POST \
--url "https://gitlab.example.com/api/v4/import/github" \
--header "content-type: application/json" \
--header "PRIVATE-TOKEN: <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_issue_events_import": true,
"single_endpoint_notes_import": true,
"attachments_import": true,
"collaborators_import": true
},
"additional_access_tokens": "foo,bar"
}'
optional_stages で利用可能なキーは以下のとおりです:
-
single_endpoint_issue_events_importイシューおよびプルリクエストイベントのインポートに使用できます。 -
single_endpoint_notes_importより徹底的なコメントのインポートには , を使ってください。 -
attachments_importMarkdown添付ファイルのインポート。 -
collaborators_import外部の共同作業者でない直接のリポジトリ共同作業者のインポート。
詳細については、インポートする追加項目を選択してくださいをご覧ください。
additional_access_tokens 、異なるユーザーアカウントから複数の個人アクセストークンを提供することで、プロジェクトのインポートを高速化できます。
応答例
{
"id": 27,
"name": "my-repo",
"full_path": "/root/my-repo",
"full_name": "Administrator / my-repo"
}
複数の GitHub パーソナルアクセストークンを使用する場合
GitLab 16.2 で導入されました。
GitHub import API は、additional_access_tokens プロパティを使って複数の GitHub パーソナルアクセストークンを受け取ることができます。これにより、API はレート制限に達する前に GitHub に対してより多くの呼び出しを行うことができます。追加のGitHubパーソナルアクセストークン:
- 同じアカウントのトークンを使用することはできません。
- インポートするリポジトリに同じ権限と十分な権限が必要です。
グループアクセストークンを使用したAPIによる公開プロジェクトのインポート
GitLab 15.7で導入された、プロジェクトはいかなる状況でもボットユーザーのネームスペースにはインポートされません。ボットユーザーのネームスペースにインポートされたプロジェクトは、有効なトークンを持つユーザーによって削除することができず、セキュリティリスクがありました。
グループアクセストークンを使って GitHub から GitLab にプロジェクトを API 経由でインポートする場合:
- GitLabプロジェクトは元のプロジェクトの可視性設定を引き継ぎます。その結果、元のプロジェクトが公開されている場合、プロジェクトは公開されます。
-
pathまたはtarget_namespaceが存在しない場合、プロジェクトのインポートは失敗します。
GitHub プロジェクトのインポートのキャンセル
GitLab 15.5 で導入されました。
進行中の GitHub プロジェクトのインポートを API を使ってキャンセル。
POST /import/github/cancel
| 属性 | 種類 | 必須 | 説明 |
|---|---|---|---|
project_id | 整数。 | yes | 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 Foundproject_idに関連付けられたプロジェクトが存在しません。
GitHub gists を GitLab スニペットにインポートします。
GitLab APIを使って、個人のGitHub gist(10ファイルまで)を個人のGitLabスニペットにインポートすることができます。10ファイル以上のGitHub gistはスキップされます。これらのGitHub gistは手動でマイグレーションしてください。
インポートできなかったgistがある場合、インポートできなかったgistのリストを含むメールが送信されます。
POST /import/github/gists
| 属性 | 種類 | 必須 | 説明 |
|---|---|---|---|
personal_access_token | 文字列です。 | yes | 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 Acceptedgists インポートを開始します。 -
401 Unauthorizedユーザーの GitHub パーソナルアクセストークンが無効です。 -
422 Unprocessable Entitygists のインポートが既に進行中です。 -
429 Too Many Requestsユーザーが GitHub のレート制限を超えました。
Bitbucket サーバーからのリポジトリのインポート
API を使用して Bitbucket Server から GitLab にプロジェクトをインポートします。
Bitbucket Project Keyは、Bitbucketでリポジトリを見つけるためだけに使用されます。リポジトリをtarget_namespace GitLab グループにインポートしたい target_namespace場合は、 を指定する必要があります。target_namespace 指定しない場合 target_namespace、プロジェクトは個人のユーザーネームスペースにインポートされます。
前提条件:
- 詳細については、Bitbucket Serverインポーターの前提条件を参照してください。
POST /import/bitbucket_server
| 属性 | 種類 | 必須 | 説明 |
|---|---|---|---|
bitbucket_server_url | 文字列です。 | yes | Bitbucket サーバー URL |
bitbucket_server_username | 文字列です。 | yes | Bitbucket サーバーユーザー名 |
personal_access_token | 文字列です。 | yes | Bitbucketサーバーの個人アクセストークン/パスワード |
bitbucket_server_project | 文字列です。 | yes | Bitbucket プロジェクトキー |
bitbucket_server_repo | 文字列です。 | yes | Bitbucket リポジトリ名 |
new_name | 文字列です。 | いいえ | 新しいリポジトリ名 |
target_namespace | 文字列です。 | いいえ | リポジトリをインポートする名前空間。のようなサブグループをサポートしています。/namespace/subgroup
|
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"
}'
グループとプロジェクトのインポートを自動化
ユーザー、グループ、プロジェクトのインポートAPIコールの自動化については、グループとプロジェクトのインポートの自動化を参照してください。