Import API
GitHub 또는 Bitbucket Server에서 리포지토리를 가져오기 위해 Import API를 사용합니다.
GitHub에서 리포지토리 가져오기
- GitLab 15.8에서 도입. GitLab은 이제
target_namespace
에 지정된 네임스페이스나 그룹 이름이 없는 경우 자동으로 네임스페이스나 그룹을 생성하지 않습니다. GitLab은 또한 네임스페이스 또는 그룹 이름이 사용 중이거나target_namespace
가 비어 있는 경우에는 사용자의 개인 네임스페이스를 대체로 사용하지 않습니다.- GitLab 16.0에서 Maintainer 역할에서 Developer 역할로의 요구 사항이 도입되었으며, GitLab 15.11.1 및 GitLab 15.10.5로 백포트되었습니다.
optional_stages
의collaborators_import
키가 GitLab 16.0에서 도입되었습니다.- Feature flag
github_import_extended_events
가 GitLab 16.8에서 도입되었습니다. 기본적으로 비활성화됩니다. 이 플래그는 가져오기의 성능을 향상시키지만single_endpoint_issue_events_import
선택사항 단계를 비활성화합니다.- Feature flag
github_import_extended_events
가 GitLab 16.9에서 활성화됐습니다. GitLab.com 및 자체 관리에서 활성화됐습니다.- 개선된 가져오기 성능이 GitLab 16.11에서 일반적으로 사용 가능해졌습니다. Feature flag
github_import_extended_events
가 제거되었습니다.
API를 사용하여 GitHub에서 프로젝트를 GitLab으로 가져옵니다.
전제 조건:
- GitHub 가져오기 사전 조건.
-
target_namespace
에 설정된 네임스페이스가 있어야 합니다. - 네임스페이스는 사용자 네임스페이스이거나 적어도 Maintainer 역할을 가진 기존 그룹이어야 합니다.
POST /import/github
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
personal_access_token
| 문자열 | 예 | GitHub 개인 액세스 토큰 |
repo_id
| 정수 | 예 | GitHub 리포지토리 ID |
new_name
| 문자열 | 아니요 | 새 프로젝트의 이름. 새 경로로도 사용되므로 특수 문자로 시작하거나 끝나서는 안 되며 연속으로 특수 문자를 포함해서는 안 됩니다. |
target_namespace
| 문자열 | 예 | 리포지토리를 가져올 네임스페이스. /namespace/subgroup 와 같이 서브그룹을 지원합니다. GitLab 15.8 이상에서 비어 있으면 안 됩니다.
|
github_hostname
| 문자열 | 아니요 | 사용자 정의 GitHub Enterprise 호스트명. GitHub.com에는 설정하지 마십시오. GitLab 16.5에서 GitLab 17.1까지는 경로 /api/v3 를 반드시 포함해야 합니다.
|
optional_stages
| 오브젝트 | 아니요 | 가져오기할 추가 항목. GitLab 15.5에서 도입되었습니다. |
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
에 사용할 수 있습니다:
-
single_endpoint_issue_events_import
, issue 및 pull request 이벤트 가져오기용입니다. 이 선택사항 단계는 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
| 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
란 이름의 플래그로 도입됨. 기본값은 비활성화되어 있으며 GitLab.com에서 활성화됨.- GitLab 15.10에서 셀프 매니지드 환경에서 활성화됨.
- GitLab 15.11에서 일반 사용 가능하게 됨. 플래그
github_import_gists
이 제거됨.
GitLab API를 사용하여 개인 GitHub gists(최대 10개의 파일 포함)을 개인 GitLab 스니펫으로 가져올 수 있습니다. 10개 이상의 파일을 포함한 GitHub gists는 건너뜁니다. 이러한 GitHub gists는 수동으로 마이그레이션해야 합니다.
가져오기에 실패한 gists가 있을 경우, 해당되는 gists 목록이 포함된 이메일이 전송됩니다.
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
: gists 가져오기가 시작되었습니다. -
401 Unauthorized
: 사용자의 GitHub 개인 액세스 토큰이 잘못되었습니다. -
422 Unprocessable Entity
: gists 가져오기가 이미 진행 중입니다. -
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
| string | yes | Bitbucket Server URL |
bitbucket_server_username
| string | yes | Bitbucket Server 사용자 이름 |
personal_access_token
| string | yes | Bitbucket Server 개인 액세스 토큰/비밀번호 |
bitbucket_server_project
| string | yes | Bitbucket 프로젝트 키 |
bitbucket_server_repo
| string | yes | Bitbucket 저장소 이름 |
new_name
| string | no | 새 프로젝트의 이름. 새 경로에도 사용되므로 특수 문자로 시작하거나 끝나면 안 되며 연속된 특수 문자를 포함해서는 안 됩니다. GitLab 15.1에서 16.9사이에는 프로젝트 경로가 Bitbucket에서 복사되었습니다. GitLab 16.10에서 행동이 원래대로 변경되었습니다. |
target_namespace
| string | no | 저장소를 가져올 네임스페이스. /namespace/subgroup 와 같은 서브그룹을 지원합니다.
|
timeout_strategy
| string | no | 가져오기 시간 초과 처리 전략. 유효한 값은 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으로 가져옵니다.
전제 조건:
- Bitbucket Cloud 가져오기기를 위한 전제 조건.
- Bitbucket Cloud 앱 비밀번호가 있어야 합니다.
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"
}'