가져오기 API
Import API를 사용하여 GitHub 또는 Bitbucket Server에서 레파지토리를 가져옵니다.
GitHub에서 레포지토리 가져오기
- 도입됨 GitLab 15.8에서 GitLab은 더 이상
target_namespace
에 지정된 네임스페이스 또는 그룹 이름이 존재하지 않으면 자동으로 네임스페이스 또는 그룹을 생성하지 않습니다. 또한 네임스페이스 또는 그룹 이름이 이미 사용 중이거나target_namespace
가 비어 있는 경우 사용자의 개인 네임스페이스로 되돌아가지 않습니다.- GitLab 16.0에서 도입된 유지 관리자의 역할 요구 사항, GitLab 15.11.1 및 GitLab 15.10.5에 백포트됨.
optional_stages
의collaborators_import
키가 GitLab 16.0에서 도입됨.- 기능 플래그
github_import_extended_events
가 GitLab 16.8에서 도입되었습니다. 기본적으로 비활성화되어 있습니다. 이 플래그는 가져오기 성능을 개선하지만single_endpoint_issue_events_import
선택적 단계를 비활성화합니다.- 기능 플래그
github_import_extended_events
가 GitLab 16.9에서 GitLab.com 및 셀프 관리에서 활성화됨.- 개선된 가져오기 성능이 GitLab 16.11에서 일반적으로 사용 가능해졌습니다. 기능 플래그
github_import_extended_events
가 제거되었습니다.
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 Enterprise 호스트 이름. GitHub.com의 경우 설정하지 마십시오. GitLab 16.5에서 GitLab 17.1까지 /api/v3 경로를 포함해야 합니다. |
optional_stages |
object | 아니오 | 가져올 추가 항목. GitLab 15.5에서 도입됨 |
timeout_strategy |
string | 아니오 | 가져오기 시간 초과를 처리하는 전략. 유효한 값은 optimistic (가져오기 다음 단계로 계속 진행) 또는 pessimistic (즉시 실패)입니다. 기본값은 pessimistic 입니다. 도입됨 In 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
에 사용할 수 있는 키는 다음과 같습니다:
-
single_endpoint_issue_events_import
, 문제 및 풀 요청 이벤트 가져기를 위한 것입니다. 이 선택적 단계는 GitLab 16.9에서 제거되었습니다. -
single_endpoint_notes_import
, 대체 및 보다 철저한 주석 가져기를 위한 것입니다. -
attachments_import
, Markdown 첨부파일 가져기를 위한 것입니다. -
collaborators_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 프로젝트 가져오기 취소
- GitLab 15.5에서 도입됨.
API를 사용하여 진행 중인 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 스니펫으로 가져오기
- GitLab 15.8에서 도입됨
github_import_gists
라는 플래그와 함께. 기본적으로 비활성화되어 있습니다. GitLab.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 |
문자열 | 예 | 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에서 리포지토리 가져오기
API를 사용하여 Bitbucket Server의 프로젝트를 GitLab으로 가져옵니다.
Bitbucket 프로젝트 키는 Bitbucket에서 리포지토리를 찾는 데만 사용됩니다.
GitLab 그룹으로 리포지토리를 가져오려면 target_namespace
를 지정해야 합니다.
target_namespace
를 지정하지 않으면 프로젝트가 개인 사용자 네임스페이스로 가져옵니다.
사전 요구 사항:
- 추가 정보는 Bitbucket Server 가져오기 도구에 대한 요구 사항을 참조하세요.
POST /import/bitbucket_server
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
bitbucket_server_url |
문자열 | 예 | Bitbucket Server URL |
bitbucket_server_username |
문자열 | 예 | Bitbucket Server 사용자 이름 |
personal_access_token |
문자열 | 예 | Bitbucket Server 개인 액세스 토큰/비밀번호 |
bitbucket_server_project |
문자열 | 예 | Bitbucket 프로젝트 키 |
bitbucket_server_repo |
문자열 | 예 | Bitbucket 리포지토리 이름 |
new_name |
문자열 | 아니오 | 새 프로젝트의 이름. 새 경로로도 사용되며 특수 문자로 시작하거나 끝나지 않아야 하며, 연속된 특수 문자를 포함하지 않아야 합니다. GitLab 15.1과 GitLab 16.9 사이에 프로젝트 경로가 복사되었습니다 . 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에서 리포지토리 가져오기
- GitLab 17.0에서 도입됨 .
API를 사용하여 Bitbucket Cloud의 프로젝트를 GitLab으로 가져옵니다.
사전 요구 사항:
POST /import/bitbucket
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
bitbucket_username |
문자열 | 예 | Bitbucket Cloud 사용자 이름 |
bitbucket_app_password |
문자열 | 예 | Bitbucket Cloud 앱 비밀번호 |
repo_path |
문자열 | 예 | 리포지토리 경로 |
target_namespace |
문자열 | 예 | 리포지토리를 가져올 네임스페이스. /namespace/subgroup 과 같은 하위 그룹을 지원합니다. |
new_name |
문자열 | 아니오 | 새 프로젝트의 이름. 새 경로로도 사용되며 특수 문자로 시작하거나 끝나지 않아야 하며, 연속된 특수 문자를 포함하지 않아야 합니다. |
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"
}'