正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

インポート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を指定しない場合、プロジェクトは個人のユーザーネームスペースにインポートされます。

前提条件:

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にリポジトリをインポートします。

前提条件:

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:bitbucket
  • read:pullrequest:bitbucket
  • read:issue:bitbucket
  • read:wiki:bitbucket