インポートAPI
GitHub や Bitbucket Server からリポジトリをインポートするには、Import API を使用します。
GitHub からのリポジトリのインポート
- GitLab 15.8で導入されたGitLabは、指定された名前空間やグループ名が
target_namespace
存在しないtarget_namespace
場合、自動的に名前空間やグループを作成することはなくなりました。target_namespace
GitLabはまた、名前空間やグループ名が取られていたりtarget_namespace
空白のtarget_namespace
場合、ユーザーの個人的な名前空間を使用するようにフォールバックしなくtarget_namespace
なりました。- GitLab16.0で導入され、GitLab15.11.1とGitLab15.10.5にバックポートされたDeveloperロールの代わりにMaintainerロールの要件。
collaborators_import
optional_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_import
Markdown添付ファイルのインポート。 -
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 Found
project_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 Accepted
gists インポートを開始します。 -
401 Unauthorized
ユーザーの GitHub パーソナルアクセストークンが無効です。 -
422 Unprocessable Entity
gists のインポートが既に進行中です。 -
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コールの自動化については、グループとプロジェクトのインポートの自動化を参照してください。