가져오기 API
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 기능의 가용성은 기능 플래그로 제어됩니다. 이 API를 사용하여 외부 소스에서 저장소를 가져옵니다. 사용자 기여 매핑은 개인 네임스페이스로 프로젝트를 가져올 때 지원되지 않습니다. GitHub에서 GitLab으로 저장소를 가져옵니다.
히스토리
이 기능의 가용성은 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참조하세요.
이 API를 사용하여 외부 소스에서 저장소를 가져옵니다.
사용자 기여 매핑은 개인 네임스페이스로 프로젝트를 가져올 때 지원되지 않습니다. 개인 네임스페이스로 가져올 때 모든 기여는 개인 네임스페이스 소유자에게 할당되며 재할당할 수 없습니다.
GitHub에서 저장소 가져오기#
히스토리
- GitLab 16.0에서 Developer 역할 대신 Maintainer 역할이 필요하도록 변경되었으며 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 Self-Managed에서 활성화되었습니다.- 개선된 가져오기 성능이 GitLab 16.11에서 일반 공개되었습니다. 기능 플래그
github_import_extended_events가 제거되었습니다.
GitHub에서 GitLab으로 저장소를 가져옵니다.
사전 요구 사항:
- GitHub 가져오기의 사전 요구 사항.
target_namespace에 설정된 네임스페이스가 존재해야 합니다.- 네임스페이스는 사용자 네임스페이스이거나 Maintainer 또는 Owner 역할이 있는 기존 그룹일 수 있습니다.
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를 지정하지 않으면 프로젝트가 개인 사용자 네임스페이스로 가져와집니다.
사전 요구 사항:
- 자세한 내용은 Bitbucket Server 가져오기의 사전 요구 사항을 참조하세요.
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으로 저장소를 가져옵니다.
사전 요구 사항:
- Bitbucket Cloud 가져오기의 사전 요구 사항.
- 필요한 범위가 있는 Bitbucket Cloud API 토큰.
POST /import/bitbucket
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
bitbucket_api_token |
문자열 | 예 | Bitbucket Cloud API 토큰. |
bitbucket_email |
문자열 | 예 | 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_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:bitbucketread:pullrequest:bitbucketread:issue:bitbucketread:wiki:bitbucket
