프로젝트 리포지토리 저장소 이동 API

Tier: Free, Premium, Ultimate

Offering: Self-managed, GitLab Dedicated

위키 및 디자인 리포지토리를 포함한 프로젝트 리포지토리는 저장소 간에 이동할 수 있습니다. 이 API는 예를 들어 Gitaly 클러스터로 마이그레이션하는 경우 도움이 될 수 있습니다.

프로젝트 리포지토리 저장소 이동은 여러 상태를 거쳐 처리됩니다. state의 값은 다음과 같습니다:

  • initial: 레코드가 생성되었지만 백그라운드 작업이 아직 예약되지 않았습니다.
  • scheduled: 백그라운드 작업이 예약되었습니다.
  • started: 프로젝트 리포지토리가 대상 저장소로 복사되고 있습니다.
  • replicated: 프로젝트가 이동되었습니다.
  • failed: 프로젝트 리포지토리 복사에 실패했거나 체크섬이 일치하지 않았습니다.
  • finished: 프로젝트가 이동되었고 소스 저장소의 리포지토리가 삭제되었습니다.
  • cleanup failed: 프로젝트가 이동되었지만 소스 저장소의 리포지토리를 삭제할 수 없었습니다.

데이터 무결성을 보장하기 위해 프로젝트는 이동 기간 동안 임시 읽기 전용 상태로 설정됩니다. 이 시간 동안 사용자가 새 커밋을 푸시하려고 하면 리포지토리가 일시적으로 읽기 전용입니다. 나중에 다시 시도해 주세요.라는 메시지를 받습니다.

이 API는 관리자 권한으로 자신을 인증해야 합니다.

다른 리포지토리 유형은 다음을 참조하세요:

모든 프로젝트 리포지토리 저장소 이동 조회

GET /project_repository_storage_moves

기본적으로 GET 요청은 한 번에 20개의 결과를 반환합니다. API 결과는 페이지 매김되어 있습니다.

예시 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_repository_storage_moves"

예시 응답:

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "project": {
      "id": 1,
      "description": null,
      "name": "project1",
      "name_with_namespace": "John Doe2 / project1",
      "path": "project1",
      "path_with_namespace": "namespace1/project1",
      "created_at": "2020-05-07T04:27:17.016Z"
    }
  }
]

프로젝트에 대한 모든 리포지토리 저장소 이동 조회

GET /projects/:project_id/repository_storage_moves

기본적으로 GET 요청은 한 번에 20개의 결과를 반환합니다. API 결과는 페이지 매김되어 있습니다.

매개변수:

속성 타입 필수 설명
project_id integer 프로젝트의 ID

예시 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/repository_storage_moves"

예시 응답:

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "project": {
      "id": 1,
      "description": null,
      "name": "project1",
      "name_with_namespace": "John Doe2 / project1",
      "path": "project1",
      "path_with_namespace": "namespace1/project1",
      "created_at": "2020-05-07T04:27:17.016Z"
    }
  }
]

단일 프로젝트 리포지토리 저장소 이동 가져오기

GET /project_repository_storage_moves/:repository_storage_id

매개변수:

속성 유형 필수 설명
repository_storage_id 정수 프로젝트 리포지토리 저장소 이동의 ID

예제 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_repository_storage_moves/1"

예제 응답:

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

프로젝트에 대한 단일 리포지토리 저장소 이동 가져오기

GET /projects/:project_id/repository_storage_moves/:repository_storage_id

매개변수:

속성 유형 필수 설명
project_id 정수 프로젝트의 ID
repository_storage_id 정수 프로젝트 리포지토리 저장소 이동의 ID

예제 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/repository_storage_moves/1"

예제 응답:

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

프로젝트에 대한 리포지토리 저장소 이동 예약하기

POST /projects/:project_id/repository_storage_moves

매개변수:

속성 유형 필수 설명
project_id 정수 프로젝트의 ID
destination_storage_name 문자열 아니오 대상 저장소 샤드의 이름. 제공되지 않으면 저장소 가중치에 따라 자동으로 선택됨

예제 요청:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \
     --data '{"destination_storage_name":"storage2"}' \
     "https://gitlab.example.com/api/v4/projects/1/repository_storage_moves"

예제 응답:

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

모든 프로젝트의 저장소 이동을 위한 저장소 스케줄 설정

소스 저장소 샤드에 저장된 각 프로젝트 저장소에 대한 저장소 이동을 스케줄링합니다.

이 엔드포인트는 모든 프로젝트를 한 번에 마이그레이션합니다.

자세한 내용은 모든 프로젝트 이동을 참조하세요.

POST /project_repository_storage_moves

매개변수:

Attribute Type Required Description
source_storage_name string yes 소스 저장소 샤드의 이름입니다.
destination_storage_name string no 대상 저장소 샤드의 이름입니다. 제공되지 않을 경우, 저장소 가중치에 따라 자동으로 선택됩니다.

예시 요청:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \
     --data '{"source_storage_name":"default"}' \
     "https://gitlab.example.com/api/v4/project_repository_storage_moves"

예시 응답:

{
  "message": "202 Accepted"
}