インポート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文字列です。yesGitHubパーソナルアクセストークン
repo_id整数。yesGitHubリポジトリ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整数。yesGitLabプロジェクト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文字列です。yesGitHubパーソナルアクセストークン
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、プロジェクトは個人のユーザーネームスペースにインポートされます。

前提条件:

POST /import/bitbucket_server
属性種類必須説明
bitbucket_server_url文字列です。yesBitbucket サーバー URL
bitbucket_server_username文字列です。yesBitbucket サーバーユーザー名
personal_access_token文字列です。yesBitbucketサーバーの個人アクセストークン/パスワード
bitbucket_server_project文字列です。yesBitbucket プロジェクトキー
bitbucket_server_repo文字列です。yesBitbucket リポジトリ名
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コールの自動化については、グループとプロジェクトのインポートの自動化を参照してください。