导入 API
使用导入 API 从 GitHub 或 Bitbucket Server 导入仓库。
从 GitHub 导入仓库
使用 API 将您的项目从 GitHub 导入到极狐GitLab。
先决条件:
- GitHub 导入先决条件。
-
target_namespace
中设置的命名空间必须存在。 - 命名空间可以是您的命名空间,也可以是您在其中至少具有维护者角色的现存群组。
POST /import/github
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
personal_access_token |
string | 是 | GitHub 个人访问令牌 |
repo_id |
integer | 是 | GitHub 仓库 ID |
new_name |
string | 否 | 新仓库名称 |
target_namespace |
string | 是 | 导入仓库的命名空间。支持子群组,比如 /namespace/subgroup 。在极狐GitLab 15.8 及更高版本中,不可为空 |
github_hostname |
string | 否 | 企业定制的 GitHub 访问地址。如果是 GitHub.com,则无需设置 |
optional_stages |
object | 否 | 要导入的其他项目。引入于 15.5 |
timeout_strategy |
string | no | 处理导入超时的策略。有效值为 optimistic (继续导入的下一步骤) 或 pessimistic (立即失败)。默认为 pessimistic 。引入于 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
}
}'
以下 key 可用于 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",
"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 导入公共项目
- 引入于极狐GitLab 15.7,项目在任何情况下都不会导入到 bot 用户的命名空间中。导入到 bot 用户命名空间的项目无法被具有有效令牌的用户删除,这存在安全风险。
当您使用群组访问令牌通过 API 将项目从 GitHub 导入到极狐GitLab 时:
- 极狐GitLab 项目继承了原项目的可见性设置。因此,如果原项目是公开的,则可以公开访问该项目。
- 如果
path
或target_namespace
不存在,项目导入会失败。
取消 GitHub 项目导入
- 引入于极狐GitLab 15.5。
使用 API 取消正在进行的 GitHub 项目导入。
POST /import/github/cancel
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
project_id |
integer | 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 15.8,功能标志为
github_import_gists
。默认禁用。在 JihuLab.com 上启用。- 在私有化部署版本上启用于极狐GitLab 15.10。
- 广泛可用于极狐GitLab 15.11。移除
github_import_gists
功能标志。
您可以使用极狐GitLab API 将个人 GitHub gist(最多 10 个文件)导入到个人极狐GitLab 代码片段。 超过 10 个文件的 GitHub gist 将被跳过。您应该手动迁移这些 GitHub gist。
如果无法导入任何 gist,则会发送一封电子邮件,其中包含未导入的 gist 列表。
POST /import/github/gists
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
personal_access_token |
string | 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
:开始 gist 导入。 -
401 Unauthorized
:用户的 GitHub 个人访问令牌无效。 -
422 Unprocessable Entity
:gist 导入已经在进行中。 -
429 Too Many Requests
:用户已超出 GitHub 的速率限制。
从 Bitbucket 服务器导入仓库
使用 API 将项目从 Bitbucket 服务器导入极狐GitLab。
Bitbucket 项目密钥仅被用来在 Bitbucket 中查找仓库。如果你想将仓库导入极狐GitLab 群组,那么您必须要指定
target_namespace
。如果您没有指定 target_namespace
,项目将会被导入您个人的用户命名空间下。先决条件:
- 更多信息请参见Bitbucket Server importer 先决条件。
POST /import/bitbucket_server
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
bitbucket_server_url |
string | 是 | Bitbucket 服务器连接 |
bitbucket_server_username |
string | 是 | Bitbucket 服务器用户名 |
personal_access_token |
string | 是 | Bitbucket 服务器个人访问令牌/密码 |
bitbucket_server_project |
string | 是 | Bitbucket 项目密钥 |
bitbucket_server_repo |
string | 是 | Bitbucket 仓库名称 |
new_name |
string | 否 | 新仓库名称 |
target_namespace |
string | 否 | 项目导入的命名空间。支持子群组,比如 /namespace/subgroup
|
timeout_strategy |
string | no | 处理导入超时的策略。有效值为 optimistic (继续导入的下一步骤) 或 pessimistic (立即失败)。默认为 pessimistic 。引入于 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 导入仓库
- 引入于 17.0。
使用 API 将项目从 Bitbucket Cloud 导入极狐GitLab。
先决条件:
POST /import/bitbucket
属性 | 类型 | 是否必需 | 描述 |
---|---|---|---|
bitbucket_username |
string | yes | Bitbucket Cloud 用户名 |
bitbucket_app_password |
string | yes | Bitbucket Cloud 应用程序密码 |
repo_path |
string | yes | 仓库路径 |
target_namespace |
string | yes | 仓库要导入的命名空间。支持子群组,诸如 /namespace/subgroup
|
new_name |
string | no | 新项目名称。也会作为新路径,因此必须不能以特殊字符开头或结尾,也不能包含连续的特殊字符。 |
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_username": "bitbucket_username",
"bitbucket_app_password": "bitbucket_app_password",
"repo_path": "username/my_project",
"target_namespace": "my_group/my_subgroup",
"new_name": "new_project_name"
}'