프로젝트 API

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

REST API를 사용하여 프로젝트를 관리합니다.

사용자별:

  • 프로젝트의 기본 역할 중 하나를 가진 사용자는 프로젝트의 속성을 읽을 수 있습니다.
  • 소유자 또는 유지관리자 역할을 하는 사용자는 프로젝트의 속성을 편집할 수도 있습니다.

프로젝트 가시성 수준

GitLab의 프로젝트는 다음 중 하나의 가시성 수준을 가질 수 있습니다:

  • 비공개
  • 내부
  • 공개

가시성 수준은 프로젝트의 visibility 필드에 의해 결정됩니다.

더 많은 정보는 프로젝트 가시성을 참조하세요.

응답으로 반환되는 필드는 인증된 사용자의 권한에 따라 다릅니다.

사용되지 않는 속성

이러한 속성들은 사용되지 않으며 향후 REST API 버전에서 제거될 수 있습니다. 대신 대체 속성을 사용하세요.

사용되지 않는 속성 대체 속성
tag_list topics 속성
marked_for_deletion_at marked_for_deletion_on. 프리미엄 및 얼티밋 티어 전용.
approvals_before_merge 병합 요청 승인 API. 프리미엄 및 얼티밋 티어 전용.

모든 프로젝트 나열

인증된 사용자를 위해 GitLab 전체에서 가시적인 모든 프로젝트의 목록을 가져옵니다. 인증 없이 액세스할 때에는 간단한 필드만을 가진 공개 프로젝트만 반환됩니다.

GET /projects

지원되는 속성:

속성 유형 필수여부 설명
archived boolean 아니요 아카이브된 상태로 제한합니다.
id_after integer 아니요 지정된 ID보다 큰 ID를 가진 프로젝트로 결과를 제한합니다.
id_before integer 아니요 지정된 ID보다 작은 ID를 가진 프로젝트로 결과를 제한합니다.
imported boolean 아니요 현재 사용자가 외부 시스템에서 가져온 프로젝트로 결과를 제한합니다.
include_hidden boolean 아니요 숨겨진 프로젝트를 포함합니다. (관리자 전용) 프리미엄 및 얼티밋 전용.
include_pending_delete boolean 아니요 삭제 대기 중인 프로젝트를 포함합니다. (관리자 전용)
last_activity_after datetime 아니요 지정된 시간 이후의 마지막 활동을 가진 프로젝트로 결과를 제한합니다. 형식: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ)
last_activity_before datetime 아니요 지정된 시간 이전의 마지막 활동을 가진 프로젝트로 결과를 제한합니다. 형식: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ)
membership boolean 아니요 현재 사용자가 멤버인 프로젝트로 제한합니다.
min_access_level integer 아니요 현재 사용자의 최소 역할 (access_level)로 제한합니다.
order_by string 아니요 id, name, path, created_at, updated_at, star_count, last_activity_at, 또는 similarity 필드로 프로젝트를 정렬하여 반환합니다. repository_size, storage_size, packages_size 또는 wiki_size 필드는 관리자에게만 허용됩니다. similarity은 검색 시에만 사용 가능하며 현재 사용자가 멤버인 프로젝트로 제한됩니다. 기본값은 created_at입니다.
owned boolean 아니요 암시적으로 현재 사용자에게 속한 프로젝트로 제한합니다.
repository_checksum_failed boolean 아니요 리포지토리 체크섬 계산에 실패한 프로젝트로 제한합니다. 프리미엄 및 얼티밋 전용.
repository_storage string 아니요 repository_storage에 저장된 프로젝트로 결과를 제한합니다. (관리자 전용)
search_namespaces boolean 아니요 검색 기준과 일치하는 조상 네임스페이스를 포함합니다. 기본값은 false입니다.
search string 아니요 검색 기준과 일치하는 프로젝트 목록을 반환합니다.
simple boolean 아니요 각 프로젝트의 제한된 필드만 반환합니다. 인증 없이는 simple 필드만 반환됩니다.
sort string 아니요 asc 또는 desc 순서로 정렬된 프로젝트를 반환합니다. 기본값은 desc입니다.
starred boolean 아니요 현재 사용자가 스타를 표시한 프로젝트로 제한합니다.
statistics boolean 아니요 프로젝트 통계를 포함합니다. 적어도 Reporter 역할을 가진 사용자에게만 사용 가능합니다.
topic_id integer 아니요 주제 ID로 지정된 주제를 가진 프로젝트로 결과를 제한합니다.
topic string 아니요 쉼표로 구분된 주제 이름입니다. 모든 주제를 참조하는 프로젝트로 결과를 제한합니다. topics 속성을 확인하세요.
updated_after datetime 아니요 지정된 시간 이후에 마지막으로 업데이트된 프로젝트로 결과를 제한합니다. 형식: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). [GitLab 15.10에서 소개]되었습니다. 이 필터가 작동하려면 order_by 속성으로 updated_at을 제공해야 합니다.
updated_before datetime 아니요 지정된 시간 이전에 마지막으로 업데이트된 프로젝트로 결과를 제한합니다. 형식: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). [GitLab 15.10에서 소개]되었습니다. 이 필터가 작동하려면 order_by 속성으로 updated_at을 제공해야 합니다.
visibility string 아니요 public, internal, 또는 private 가시성으로 결과를 제한합니다.
wiki_checksum_failed boolean 아니요 위키 체크섬 계산에 실패한 프로젝트로 결과를 제한합니다. 프리미엄 및 얼티밋 전용.
with_custom_attributes boolean 아니요 응답에 사용자 지정 속성을 포함합니다. (관리자 전용)
with_issues_enabled boolean 아니요 활성화된 이슈 기능으로 결과를 제한합니다.
with_merge_requests_enabled boolean 아니요 활성화된 병합 요청 기능으로 결과를 제한합니다.
with_programming_language string 아니요 주어진 프로그래밍 언어를 사용하는 프로젝트로 결과를 제한합니다.
marked_for_deletion_on date 아니요 프로젝트가 삭제로 표시된 날짜로 필터링합니다. [GitLab 17.1에서 소개]되었습니다. 프리미엄 및 얼티밋 전용.

이 엔드포인트는 선택된 order_by 옵션에 대해 keyset 페이지네이션을 지원합니다.

simple=true이거나 사용자가 인증되지 않은 경우, 다음과 같이 반환됩니다:

예시 요청:

curl --request GET "https://gitlab.example.com/api/v4/projects"

예시 응답:

[
  {
    "id": 4,
    "description": null,
    "name": "Diaspora Client",
    "name_with_namespace": "Diaspora / Diaspora Client",
    "path": "diaspora-client",
    "path_with_namespace": "diaspora/diaspora-client",
    "created_at": "2013-09-30T13:46:02Z",
    "default_branch": "main",
    "tag_list": [
      "example",
      "disapora client"
    ],
    "topics": [
      "example",
      "disapora client"
    ],
    "ssh_url_to_repo": "git@gitlab.example.com:diaspora/diaspora-client.git",
    "http_url_to_repo": "https://gitlab.example.com/diaspora/diaspora-client.git",
    "web_url": "https://gitlab.example.com/diaspora/diaspora-client",
    "avatar_url": "https://gitlab.example.com/uploads/project/avatar/4/uploads/avatar.png",
    "star_count": 0,
    "last_activity_at": "2013-09-30T13:46:02Z",
    "namespace": {
      "id": 2,
      "name": "Diaspora",
      "path": "diaspora",
      "kind": "group",
      "full_path": "diaspora",
      "parent_id": null,
      "avatar_url": null,
      "web_url": "https://gitlab.example.com/diaspora"
    }
  },
  {
    ...
  }
]

사용자가 인증되었고 simple이 설정되지 않은 경우, 이 엔드포인트는 다음과 같이 반환됩니다:

[
  {
    "id": 4,
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    "description_html": "<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
    "name": "Diaspora Client",
    "name_with_namespace": "Diaspora / Diaspora Client",
    "path": "diaspora-client",
    "path_with_namespace": "diaspora/diaspora-client",
    "created_at": "2013-09-30T13:46:02Z",
    "updated_at": "2013-09-30T13:46:02Z",
    "default_branch": "main",
    "tag_list": [ //deprecated, use `topics` instead
      "example",
      "disapora client"
    ],
    "topics": [
      "example",
      "disapora client"
    ],
    "ssh_url_to_repo": "git@gitlab.example.com:diaspora/diaspora-client.git",
    "http_url_to_repo": "https://gitlab.example.com/diaspora/diaspora-client.git",
    "web_url": "https://gitlab.example.com/diaspora/diaspora-client",
    "readme_url": "https://gitlab.example.com/diaspora/diaspora-client/blob/main/README.md",
    "avatar_url": "https://gitlab.example.com/uploads/project/avatar/4/uploads/avatar.png",
    "forks_count": 0,
    "star_count": 0,
    "last_activity_at": "2022-06-24T17:11:26.841Z",
    "namespace": {
      "id": 3,
      "name": "Diaspora",
      "path": "diaspora",
      "kind": "group",
      "full_path": "diaspora",
      "parent_id": null,
      "avatar_url": "https://gitlab.example.com/uploads/project/avatar/6/uploads/avatar.png",
      "web_url": "https://gitlab.example.com/diaspora"
    },
    "container_registry_image_prefix": "registry.gitlab.example.com/diaspora/diaspora-client",
    ...
  },
  {
    ...
  }
]

참고: last_activity_at프로젝트 활동에 기반하여 업데이트되며, updated_at은 프로젝트 레코드가 데이터베이스에서 변경될 때마다 업데이트됩니다.

다음과 같이 사용자 지정 속성으로 필터링할 수 있습니다:

GET /projects?custom_attributes[key]=value&custom_attributes[other_key]=other_value

예시 요청:

curl --globoff --request GET "https://gitlab.example.com/api/v4/projects?custom_attributes[location]=Antarctica&custom_attributes[role]=Developer"

페이지네이션 제한

offset-based pagination을 사용하여 최대 50,000개의 프로젝트에 액세스할 수 있습니다.

이 제한을 초과하는 프로젝트를 검색하려면 keyset pagination을 사용하세요. Keyset pagination은 order_by=id만 지원합니다. 다른 정렬 옵션은 사용할 수 없습니다.

사용자의 프로젝트 목록

주어진 사용자가 소유한 가시적인 프로젝트 목록을 가져옵니다. 인증 없이 액세스할 경우, 공개 프로젝트만 반환됩니다.

필수 조건:

  • 특정 속성을 보려면, 프로젝트의 관리자거나 소유자 역할이어야 합니다.

참고: 특정 사용자(user_id로 지정된)의 네임스페이스에 있는 프로젝트만 반환됩니다. 사용자가 단일 그룹이나 하위 그룹에 있는 프로젝트는 반환되지 않습니다. 프로필이 비공개로 설정된 경우 빈 목록이 반환됩니다.

이 엔드포인트는 선택된 order_by 옵션에 대한 keyset pagination을 지원합니다.

GET /users/:user_id/projects

지원되는 속성:

속성 타입 필수 설명
user_id string Yes 사용자의 ID 또는 사용자 이름입니다.
archived boolean No 보관된 상태로 제한합니다.
id_after integer No 지정된 ID보다 큰 ID를 가진 프로젝트로 결과를 제한합니다.
id_before integer No 지정된 ID보다 작은 ID를 가진 프로젝트로 결과를 제한합니다.
membership boolean No 현재 사용자가 멤버인 프로젝트로 제한합니다.
min_access_level integer No 현재 사용자의 최소 역할 (access_level)로 제한합니다.
order_by string No 프로젝트를 id, name, path, created_at, updated_at, star_count, 또는 last_activity_at 필드로 정렬하여 반환합니다. 기본값은 created_at입니다.
owned boolean No 현재 사용자가 명시적으로 소유한 프로젝트로 제한합니다.
search string No 검색 기준과 일치하는 프로젝트 목록을 반환합니다.
simple boolean No 각 프로젝트의 제한된 필드만 반환합니다. 인증 없이는 작동하지 않으며, 단순한 필드만 반환됩니다.
sort string No asc 또는 desc 순서로 정렬된 프로젝트를 반환합니다. 기본값은 desc입니다.
starred boolean No 현재 사용자가 스타를 표시한 프로젝트로 제한합니다.
statistics boolean No 프로젝트 통계 정보를 포함합니다. 적어도 기록자 역할을 가진 사용자에게만 제공됩니다.
updated_after datetime No 지정된 시간 이후에 마지막으로 업데이트된 프로젝트로 결과를 제한합니다. 형식: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). GitLab 15.10에 도입되었습니다.
updated_before datetime No 지정된 시간 이전에 마지막으로 업데이트된 프로젝트로 결과를 제한합니다. 형식: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). GitLab 15.10에 도입되었습니다.
visibility string No public, internal, 또는 private 가시성으로 제한합니다.
with_custom_attributes boolean No 응답에 사용자 정의 속성을 포함합니다. (관리자만)
with_issues_enabled boolean No 활성화된 이슈 기능으로 제한합니다.
with_merge_requests_enabled boolean No 활성화된 병합 요청 기능으로 제한합니다.
with_programming_language string No 주어진 프로그래밍 언어를 사용하는 프로젝트로 제한합니다.

예시 응답:

[
  {
    "id": 4,
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    "description_html": "<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
    "default_branch": "main",
    "visibility": "private",
    "ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",
    "http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",
    "web_url": "http://example.com/diaspora/diaspora-client",
    "readme_url": "http://example.com/diaspora/diaspora-client/blob/main/README.md",
    "tag_list": [ //deprecated, use `topics` instead
      "example",
      "disapora client"
    ],
    "topics": [
      "example",
      "disapora client"
    ],
    ...
  },
  ...
]

사용자가 기여한 프로젝트 목록

주어진 사용자가 기여한 가시적인 프로젝트 목록을 가져옵니다.

GET /users/:user_id/contributed_projects

지원되는 속성:

속성 유형 필수 설명
user_id string 사용자의 ID 또는 사용자 이름.
order_by string 아니오 프로젝트를 id, name, path, created_at, updated_at, star_count, 또는 last_activity_at 필드로 정렬하여 반환합니다. 기본값은 created_at입니다.
simple boolean 아니오 각 프로젝트에 대해 제한된 필드만 반환합니다. 인증되지 않은 경우, 이 작업은 아무런 작업을 수행하지 않으며 각 필드만 반환됩니다.
sort string 아니오 프로젝트를 asc 또는 desc 순서로 반환합니다. 기본값은 desc입니다.

예시 요청:

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

예시 응답:

[
  {
    "id": 4,
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    "description_html": "<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
    "default_branch": "main",
    "visibility": "private",
    "ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",
    "http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",
    "web_url": "http://example.com/diaspora/diaspora-client",
    "readme_url": "http://example.com/diaspora/diaspora-client/blob/main/README.md",
    "tag_list": [ //deprecated, use `topics` instead
      "example",
      "disapora client"
    ],
    "topics": [
      "example",
      "disapora client"
    ],
    "owner": {
      "id": 3,
      "name": "Diaspora",
      "created_at": "2013-09-30T13:46:02Z"
    },
    ...
  },
  {
    "id": 6,
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    ...
  }
]

프로젝트 이름으로 프로젝트 검색

인증된 사용자에게 액세스 가능한 프로젝트의 이름으로 프로젝트를 검색합니다. 인증 없이 이 엔드포인트에 액세스하면 공개적으로 액세스 가능한 프로젝트가 나열됩니다.

GET /projects

예시 속성:

속성 유형 필수 여부 설명
search string Yes 프로젝트 이름에 포함된 문자열
order_by string No id, name, created_at, star_count, 또는 last_activity_at 필드별로 정렬된 요청을 반환합니다.
sort string No asc 또는 desc 순서로 정렬된 요청을 반환합니다.

예시 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects?search=test"

단일 프로젝트 얻기

특정 프로젝트를 얻습니다. 이 엔드포인트는 프로젝트가 공개적으로 액세스 가능한 경우에는 인증 없이 액세스할 수 있습니다.

GET /projects/:id

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL-encoded path of the project
license boolean No 프로젝트 라이센스 데이터를 포함합니다.
statistics boolean No 프로젝트 통계를 포함합니다. 적어도 리포터 역할을 가진 사용자에게만 제공됩니다.
with_custom_attributes boolean No 응답에 사용자 정의 속성을 포함합니다. (관리자 전용)

예시 응답:

{
  "id": 3,
  "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
  "description_html": "<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",

  ...

  "container_registry_image_prefix": "registry.example.com/diaspora/diaspora-client",
  "_links": {
    "self": "http://example.com/api/v4/projects",
    "issues": "http://example.com/api/v4/projects/1/issues",
    "merge_requests": "http://example.com/api/v4/projects/1/merge_requests",
    "repo_branches": "http://example.com/api/v4/projects/1/repository_branches",
    "labels": "http://example.com/api/v4/projects/1/labels",
    "events": "http://example.com/api/v4/projects/1/events",
    "members": "http://example.com/api/v4/projects/1/members",
    "cluster_agents": "http://example.com/api/v4/projects/1/cluster_agents"
  }
}

GitLab Ultimate 사용자는 GitLab 15.5 이후에서 only_allow_merge_if_all_status_checks_passed 매개변수를 볼 수도 있습니다.

{
  "id": 1,
  "project_id": 3,
  "only_allow_merge_if_all_status_checks_passed": false,
  ...
}

프로젝트가 Fork된 경우, 응답에 forked_from_project 필드가 표시됩니다. 이 필드의 경우 상위 프로젝트가 비공개인 경우 인증을 위한 유효한 토큰을 제공해야 합니다. 또한 mr_default_target_self 값이 표시됩니다. 이 값이 false이면 기본적으로 모든 병합 요청이 상위 프로젝트를 대상으로 합니다.

{
   "id":3,

   ...

   "mr_default_target_self": false,
   "forked_from_project":{
      "id":13083,
      "description":"GitLab Community Edition",
      ...

   }

   ...

}

이슈 및 병합 요청을 위한 템플릿


Tier: 프리미엄, 얼티밋
Offering: GitLab.com, Self-managed, GitLab Dedicated

GitLab 프리미엄 또는 얼티밋 사용자이슈 및 병합 요청 설명 템플릿을 관리하기 위한 issues_templatemerge_requests_template 매개변수를 볼 수 있습니다.

{
  "id": 3,
  "issues_template": null,
  "merge_requests_template": null,
  ...
}

프로젝트 사용자 가져오기

프로젝트의 사용자 목록을 가져옵니다.

GET /projects/:id/users

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
search 문자열 아니요 특정 사용자 검색.
skip_users 정수 배열 아니요 지정된 ID를 가진 사용자를 필터링합니다.

예시 응답:

[
  {
    "id": 1,
    "username": "john_smith",
    "name": "John Smith",
    "state": "active",
    "avatar_url": "http://localhost:3000/uploads/user/avatar/1/cd8.jpeg",
    "web_url": "http://localhost:3000/john_smith"
  },
  {
    "id": 2,
    "username": "jack_smith",
    "name": "Jack Smith",
    "state": "blocked",
    "avatar_url": "http://gravatar.com/../e32131cd8.jpeg",
    "web_url": "http://localhost:3000/jack_smith"
  }
]

프로젝트 그룹 목록

이 프로젝트의 조상 그룹 목록을 가져옵니다.

GET /projects/:id/groups

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
search 문자열 아니요 특정 그룹 검색.
shared_min_access_level 정수 아니요 적어도 이 역할(access_level)을 가진 공유 그룹을 제한합니다.
shared_visible_only 부울 아니요 사용자가 액세스하는 공유 그룹을 제한합니다.
skip_groups 정수 배열 아니요 전달된 그룹 ID를 건너뜁니다.
with_shared 부울 아니요 이 그룹과 공유된 프로젝트를 포함시킵니다. 기본값은 false입니다.

예시 응답:

[
  {
    "id": 1,
    "name": "Foobar Group",
    "avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg",
    "web_url": "http://localhost:3000/groups/foo-bar",
    "full_name": "Foobar Group",
    "full_path": "foo-bar"
  },
  {
    "id": 2,
    "name": "Shared Group",
    "avatar_url": "http://gitlab.example.com/uploads/group/avatar/1/bar.jpg",
    "web_url": "http://gitlab.example.com/groups/foo/bar",
    "full_name": "Shared Group",
    "full_path": "foo/shared"
  }
]

프로젝트 공유 가능한 그룹 목록

프로젝트와 공유할 수 있는 그룹 목록을 가져옵니다.

GET /projects/:id/share_locations

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
search 문자열 아니요 특정 그룹 검색.

예시 응답:

[
  {
    "id": 22,
    "web_url": "http://127.0.0.1:3000/groups/gitlab-org",
    "name": "Gitlab Org",
    "avatar_url": null,
    "full_name": "Gitlab Org",
    "full_path": "gitlab-org"
  },
  {
    "id": 25,
    "web_url": "http://127.0.0.1:3000/groups/gnuwget",
    "name": "Gnuwget",
    "avatar_url": null,
    "full_name": "Gnuwget",
    "full_path": "gnuwget"
  }
]

프로젝트 생성

인증된 사용자가 소유한 새 프로젝트를 만듭니다.

만약 HTTP 저장소가 공개적으로 접근 불가능하면 URL에 인증 정보를 추가하세요: https://username:password@gitlab.company.com/group/project.git, passwordapi 범위가 활성화된 공개 엑세스 키입니다.

POST /projects

지원되는 일반 프로젝트 속성:

속성 유형 필수 설명
name 문자열 경로가 제공되지 않으면 예 새 프로젝트의 이름. 제공되지 않으면 경로와 동등합니다.
path 문자열 이름이 제공되지 않으면 예 새 프로젝트의 리포지토리 이름. 제공되지 않으면 이름을 기반으로 생성됩니다(소문자 및 대시가 포함된 문자열로 생성). 경로는 특수 문자로 시작하거나 끝나면 안 되며 연속된 특수 문자를 포함해서는 안 됩니다.
allow_merge_on_skipped_pipeline 부울 아니요 건너뜀 작업으로 병합 요청을 병합할 수 있는지 여부를 설정합니다.
approvals_before_merge 정수 아니요 기본적으로 몇 명의 승인자가 병합 요청을 승인해야 하는지 설정합니다. 승인 규칙을 구성하려면 병합 요청 승인 API를 참조하세요. GitLab 16.0에서 사용 중단. 프리미엄 및 얼티밋 전용입니다.
auto_cancel_pending_pipelines 문자열 아니요 보류 중인 파이프라인 자동 취소. 이 작업은 활성화 상태와 비활성화 상태 사이를 전환합니다. 이것은 논리적 값이지만 부울값은 아닙니다.
auto_devops_deploy_strategy 문자열 아니요 자동 배포 전략 (continuous, manual, 또는 timed_incremental).
auto_devops_enabled 부울 아니요 이 프로젝트에 대해 Auto DevOps를 활성화합니다.
autoclose_referenced_issues 부울 아니요 기본 브랜치에서 참조된 이슈를 자동으로 종료하는지 설정합니다.
avatar 혼합 아니요 프로젝트 아바타의 이미지 파일.
build_git_strategy 문자열 아니요 Git 전략입니다. 기본값은 fetch입니다.
build_timeout 정수 아니요 작업이 실행될 수 있는 최대 시간(초)입니다.
ci_config_path 문자열 아니요 CI 구성 파일 경로입니다.
container_expiration_policy_attributes 해시 아니요 이 프로젝트의 이미지 정리 정책을 업데이트합니다. cadence (문자열), keep_n (정수), older_than (문자열), name_regex (문자열), name_regex_delete (문자열), name_regex_keep (문자열), enabled (부울)을 허용합니다. cadence, keep_n, older_than 값에 대해 자세한 내용은 container registry 문서를 참조하십시오.
container_registry_enabled 부울 아니요 (사용 중단) 이 프로젝트에 대한 컨테이너 레지스트리를 활성화합니다. 대신 container_registry_access_level을 사용하세요.
default_branch 문자열 아니요 기본 브랜치 이름입니다. initialize_with_readmetrue여야 합니다.
description 문자열 아니요 짧은 프로젝트 설명입니다.
emails_disabled 부울 아니요 (사용 중단) 이메일 알림을 비활성화합니다. emails_enabled을 사용하세요
emails_enabled 부울 아니요 이메일 알림을 활성화합니다.
external_authorization_classification_label 문자열 아니요 프로젝트의 분류 라벨입니다. 프리미엄 및 얼티밋만 해당됩니다.
group_runners_enabled 부울 아니요 이 프로젝트에 대해 그룹 러너를 활성화합니다.
group_with_project_templates_id 정수 아니요 그룹 수준 사용자 정의 템플릿의 경우 모든 사용자 정의 프로젝트 템플릿이 가져오는 그룹의 ID를 지정합니다. 인스턴스 수준 템플릿의 경우 비워두세요. use_custom_template이 true인 경우 필요합니다. 프리미엄 및 얼티밋 전용입니다.
import_url 문자열 아니요 리포지토리를 가져올 URL입니다. URL 값이 비어 있을 때는 initialize_with_readmetrue로 설정해서는 안 됩니다. 이렇게 하면 다음 오류가 발생할 수 있습니다: not a git repository.
initialize_with_readme 부울 아니요 Git 리포지토리에 단순히 README.md 파일만을 가진 새로운 Git 리포지토리를 만들지 여부입니다. 기본값은 false입니다. 부울이 true일 때는 리포지토리의 대체 콘텐츠를 지정하는 이 엔드포인트의 다른 속성을 전달해서는 안 됩니다. 이렇게 하면 다음 오류가 발생할 수 있습니다: not a git repository. 그런데 이를 자세히 알려면 다음을 확인하십시오.
issues_enabled 부울 아니요 (사용 중단) 이 프로젝트에 대해 이슈를 활성화합니다. 대신 issues_access_level을 사용하세요.
jobs_enabled 부울 아니요 (사용 중단) 이 프로젝트에 대해 작업을 활성화합니다. 대신 builds_access_level을 사용하세요.
lfs_enabled 부울 아니요 LFS를 활성화합니다.
merge_method 문자열 아니요 프로젝트의 병합 방법을 설정합니다. merge (병합 커밋), rebase_merge (반복되는 선형 히스토리로 병합 커밋), 또는 ff (빠른 전진 병합)이 될 수 있습니다.
merge_pipelines_enabled 부울 아니요 병합된 결과 파이프라인을 활성화하거나 비활성화합니다.
merge_requests_enabled 부울 아니요 (사용 중단) 이 프로젝트에 대해 병합 요청을 활성화합니다. 대신 merge_requests_access_level을 사용하세요.
merge_trains_enabled 부울 아니요 병합 트레인을 활성화하거나 비활성화합니다.
merge_trains_skip_train_allowed 부울 아니요 병합 트레인 병합 요청을 파이프라인을 기다릴 필요 없이 병합할 수 있도록 허용합니다.
mirror_trigger_builds 부울 아니요 Pull 미러링이 트리거되면 빌드를 실행합니다. 프리미엄 및 얼티밋 전용입니다.
mirror 부울 아니요 프로젝트 내에서 Pull 미러링을 활성화합니다. 프리미엄 및 얼티밋 전용입니다.
namespace_id 정수 아니요 새 프로젝트의 네임스페이스(기본값은 현재 사용자의 네임스페이스).
only_allow_merge_if_all_discussions_are_resolved 부울 아니요 병합 요청은 모든 토론이 해결되었을 때만 병합될 수 있도록 설정합니다.
only_allow_merge_if_all_status_checks_passed 부울 아니요 모든 상태 확인이 통과할 때까지 병합 요청의 병합을 차단해야 하는지 여부를 설정합니다. 기본값은 false입니다. GitLab 15.5에서 [도입되었으며](https://gitlab.com/gitlab-org/gitlab/-/issues/369859

사용자용 프로젝트 생성

사용자용 프로젝트 생성.

전제 조건:

  • 관리자여야 합니다.

HTTP 저장소가 공개적으로 접근할 수 없는 경우 URL에 인증 정보를 추가하세요. 예를 들어, https://username:password@gitlab.company.com/group/project.git에서 passwordapi 스코프가 활성화된 공개 액세스 키입니다.

POST /projects/user/:user_id

지원되는 일반 프로젝트 속성:

속성 유형 필요 여부 설명
name string 새 프로젝트의 이름.
user_id integer 프로젝트 소유자의 사용자 ID.
allow_merge_on_skipped_pipeline boolean 아니요 건너뛴 작업으로 병합 요청을 병합할 수 있는지 여부 설정.
approvals_before_merge integer 아니요 기본적으로 몇 명의 승인자가 병합 요청을 승인해야 하는지 설정. GitLab 16.0에서 사용 중단됨. 승인 규칙을 구성하려면 병합 요청 승인 API를 참조하세요. 프리미엄 및 얼티밋 전용.
… 이하 생략 …      

프로젝트 기능 가시성 설정 및 액세스 제어 옵션은 다음 중 하나일 수 있습니다:

  • disabled: 기능을 비활성화합니다.
  • private: 기능을 프로젝트 멤버만 사용할 수 있도록 설정합니다.
  • enabled: 기능을 접근 권한 있는 모든 사용자가 사용할 수 있도록 설정합니다.
속성 유형 필요 여부 설명
analytics_access_level string 아니요 분석 가시성을 설정합니다.
builds_access_level string 아니요 파이프라인의 가시성을 설정합니다.
container_registry_access_level string 아니요 컨테이너 레지스트리의 가시성을 설정합니다.
… 이하 생략 …      

프로젝트 수정

  • operations_access_level는 GitLab 16.0에서 제거되었습니다.
  • model_registry_access_level는 GitLab 16.7에서 도입되었습니다.

기존 프로젝트를 업데이트하세요.

만약 HTTP 저장소가 공개적으로 접근할 수 없다면, 인증 정보를 URL https://username:password@gitlab.company.com/group/project.git에 추가하고, 여기서 passwordapi 스코프가 활성화된 공개 액세스 키입니다.

PUT /projects/:id

지원되는 일반 프로젝트 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
allow_merge_on_skipped_pipeline 부울 아니오 스킵된 작업으로 병합 요청을 병합할 수 있는지 여부를 설정합니다.
allow_pipeline_trigger_approve_deployment 부울 아니오 파이프라인 트리거가 배포를 승인할 수 있는지 여부를 설정합니다. 프리미엄 및 얼티밋 전용.

예를 들어, GitLab.com 프로젝트에서 공유 러너 설정을 토글하려면:

curl --request PUT --header "PRIVATE-TOKEN: <your-token>" \
     --url "https://gitlab.com/api/v4/projects/<your-project-ID>" \
     --data "shared_runners_enabled=true" # 끄려면: "shared_runners_enabled=false"

프로젝트 기능 가시성 접근 제어 옵션으로 하나 설정할 수 있습니다.:

  • disabled: 기능 비활성화
  • private: 기능을 프로젝트 멤버만 활성화합니다.
  • enabled: 기능을 모든 접근 권한이 있는 사람 에게 활성화합니다.

지원되는 프로젝트 가시성 속성:

속성 유형 필수 설명
analytics_access_level 문자열 아니오 분석 가시성을 설정합니다.
builds_access_level 문자열 아니오 파이프라인 가시성을 설정합니다.

프로젝트로 초대된 그룹 목록 나열

프로젝트로 초대된 그룹 목록을 가져옵니다. 인증되지 않은 경우에는 공개적으로 초대된 그룹만 반환됩니다.

이 엔드포인트는 분당 60번의 요청으로 제한됩니다:

  • 인증된 사용자의 경우, 사용자당.
  • 인증되지 않은 사용자의 경우, IP 주소당.

기본적으로 이 요청은 페이지네이션되어 한 번에 20개의 결과를 반환합니다.

GET /projects/:id/invited_groups

지원되는 속성:

속성 유형 필수 설명
id 정수/문자열 그룹의 ID 또는 URL 인코딩된 경로
search 문자열 아니오 검색 기준과 일치하는 권한이 있는 그룹의 목록 반환
min_access_level 정수 아니오 현재 사용자가 최소한 지정된 역할 (access_level)을 가진 그룹으로 제한
relation 문자열 배열 아니오 관계(직접 또는 상속)에 따라 그룹을 필터링
with_custom_attributes 부울 아니오 응답에 사용자 정의 속성 포함(관리자 전용)

예시 응답:

[
  {
    "id": 35,
    "web_url": "https://gitlab.example.com/groups/twitter",
    "name": "Twitter",
    "avatar_url": null,
    "full_name": "Twitter",
    "full_path": "twitter"
  }
]

프로젝트에서 사용된 프로그래밍 언어 목록 및 사용률 가져오기

프로젝트에서 사용된 프로그래밍 언어의 목록과 사용률을 가져옵니다.

GET /projects/:id/languages

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.

예시 요청:

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

예시 응답:

{
  "Ruby": 66.69,
  "JavaScript": 22.98,
  "HTML": 7.91,
  "CoffeeScript": 2.42
}

프로젝트 아카이브

프로젝트를 아카이브합니다.

전제 조건:

  • 관리자거나 프로젝트에 소유자 역할이 할당되어 있어야 합니다.

이 엔드포인트는 아이덤포턴트입니다. 이미 아카이브된 프로젝트를 아카이브하면 프로젝트가 변경되지 않습니다.

POST /projects/:id/archive

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.

예시 요청:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/archive"

예시 응답:

{
  "id": 3,
  "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
  "description_html": "<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
  "default_branch": "main",
  "visibility": "private",
  "ssh_url_to_repo": "git@example.com:diaspora/diaspora-project-site.git",
  "http_url_to_repo": "http://example.com/diaspora/diaspora-project-site.git",
  "web_url": "http://example.com/diaspora/diaspora-project-site",
  "readme_url": "http://example.com/diaspora/diaspora-project-site/blob/main/README.md",
  "tag_list": [
    //deprecated, use `topics` instead
    "example",
    "disapora project"
  ],
  "topics": ["example", "disapora project"],
  "owner": {
    "id": 3,
    "name": "Diaspora",
    "created_at": "2013-09-30T13:46:02Z"
  },
  "name": "Diaspora Project Site",
  "name_with_namespace": "Diaspora / Diaspora Project Site",
  "path": "diaspora-project-site",
  "path_with_namespace": "diaspora/diaspora-project-site",
  "repository_object_format": "sha1",
  "issues_enabled": true,
  "open_issues_count": 1,
  "merge_requests_enabled": true,
  "jobs_enabled": true,
  "wiki_enabled": true,
  "snippets_enabled": false,
  "can_create_merge_request_in": true,
  "resolve_outdated_diff_discussions": false,
  "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
  "container_registry_access_level": "disabled",
  "security_and_compliance_access_level": "disabled",
  "created_at": "2013-09-30T13:46:02Z",
  "updated_at": "2013-09-30T13:46:02Z",
  "last_activity_at": "2013-09-30T13:46:02Z",
  "creator_id": 3,
  "namespace": {
    "id": 3,
    "name": "Diaspora",
    "path": "diaspora",
    "kind": "group",
    "full_path": "diaspora"
  },
  "import_status": "none",
  "import_error": null,
  "permissions": {
    "project_access": {
      "access_level": 10,
      "notification_level": 3
    },
    "group_access": {
      "access_level": 50,
      "notification_level": 3
    }
  },
  "archived": true,
  "avatar_url": "http://example.com/uploads/project/avatar/3/uploads/avatar.png",
  "license_url": "http://example.com/diaspora/diaspora-client/blob/main/LICENSE",
  "license": {
    "key": "lgpl-3.0",
    "name": "GNU Lesser General Public License v3.0",
    "nickname": "GNU LGPLv3",
    "html_url": "http://choosealicense.com/licenses/lgpl-3.0/",
    "source_url": "http://www.gnu.org/licenses/lgpl-3.0.txt"
  },
  "shared_runners_enabled": true,
  "group_runners_enabled": true,
  "forks_count": 0,
  "star_count": 0,
  "runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
  "ci_default_git_depth": 50,
  "ci_forward_deployment_enabled": true,
  "ci_forward_deployment_rollback_allowed": true,
  "ci_allow_fork_pipelines_to_run_in_parent_project": true,
  "ci_separated_caches": true,
  "ci_restrict_pipeline_cancellation_role": "developer",
  "ci_pipeline_variables_minimum_override_role": "maintainer",
  "ci_push_repository_for_job_token_allowed": false,
  "public_jobs": true,
  "shared_with_groups": [],
  "only_allow_merge_if_pipeline_succeeds": false,
  "allow_merge_on_skipped_pipeline": false,
  "allow_pipeline_trigger_approve_deployment": false,
  "restrict_user_defined_variables": false,
  "only_allow_merge_if_all_discussions_are_resolved": false,
  "remove_source_branch_after_merge": false,
  "request_access_enabled": false,
  "merge_method": "merge",
  "squash_option": "default_on",
  "autoclose_referenced_issues": true,
  "enforce_auth_checks_on_uploads": true,
  "suggestion_commit_message": null,
  "merge_commit_template": null,
  "container_registry_image_prefix": "registry.example.com/diaspora/diaspora-project-site",
  "_links": {
    "self": "http://example.com/api/v4/projects",
    "issues": "http://example.com/api/v4/projects/1/issues",
    "merge_requests": "http://example.com/api/v4/projects/1/merge_requests",
    "repo_branches": "http://example.com/api/v4/projects/1/repository_branches",
    "labels": "http://example.com/api/v4/projects/1/labels",
    "events": "http://example.com/api/v4/projects/1/events",
    "members": "http://example.com/api/v4/projects/1/members",
    "cluster_agents": "http://example.com/api/v4/projects/1/cluster_agents"
  }
}

프로젝트 언아카이브

프로젝트를 언아카이브합니다.

전제 조건:

  • 프로젝트의 관리자이거나 프로젝트에 대한 소유자 역할이 할당되어 있어야 합니다.

이 엔드포인트는 멱등성을 가지고 있습니다. 보관 중이 아닌 프로젝트를 언아카이브해도 프로젝트에 변경이 발생하지 않습니다.

POST /projects/:id/unarchive

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩된 경로.

예시 요청:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/unarchive"

예시 응답:

{
  "id": 3,
  "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
  "description_html": "<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
  "default_branch": "main",
  "visibility": "private",
  "ssh_url_to_repo": "git@example.com:diaspora/diaspora-project-site.git",
  "http_url_to_repo": "http://example.com/diaspora/diaspora-project-site.git",
  "web_url": "http://example.com/diaspora/diaspora-project-site",
  "readme_url": "http://example.com/diaspora/diaspora-project-site/blob/main/README.md",
  "tag_list": [
    //deprecated, use `topics` instead
    "example",
    "disapora project"
  ],
  "topics": ["example", "disapora project"],
  "owner": {
    "id": 3,
    "name": "Diaspora",
    "created_at": "2013-09-30T13:46:02Z"
  },
  "name": "Diaspora Project Site",
  "name_with_namespace": "Diaspora / Diaspora Project Site",
  "path": "diaspora-project-site",
  "path_with_namespace": "diaspora/diaspora-project-site",
  "repository_object_format": "sha1",
  "issues_enabled": true,
  "open_issues_count": 1,
  "merge_requests_enabled": true,
  "jobs_enabled": true,
  "wiki_enabled": true,
  "snippets_enabled": false,
  "can_create_merge_request_in": true,
  "resolve_outdated_diff_discussions": false,
  "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
  "container_registry_access_level": "disabled",
  "security_and_compliance_access_level": "disabled",
  "created_at": "2013-09-30T13:46:02Z",
  "updated_at": "2013-09-30T13:46:02Z",
  "last_activity_at": "2013-09-30T13:46:02Z",
  "creator_id": 3,
  "namespace": {
    "id": 3,
    "name": "Diaspora",
    "path": "diaspora",
    "kind": "group",
    "full_path": "diaspora"
  },
  "import_status": "none",
  "import_error": null,
  "permissions": {
    "project_access": {
      "access_level": 10,
      "notification_level": 3
    },
    "group_access": {
      "access_level": 50,
      "notification_level": 3
    }
  },
  "archived": false,
  "avatar_url": "http://example.com/uploads/project/avatar/3/uploads/avatar.png",
  "license_url": "http://example.com/diaspora/diaspora-client/blob/main/LICENSE",
  "license": {
    "key": "lgpl-3.0",
    "name": "GNU Lesser General Public License v3.0",
    "nickname": "GNU LGPLv3",
    "html_url": "http://choosealicense.com/licenses/lgpl-3.0/",
    "source_url": "http://www.gnu.org/licenses/lgpl-3.0.txt"
  },
  "shared_runners_enabled": true,
  "group_runners_enabled": true,
  "forks_count": 0,
  "star_count": 0,
  "runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
  "ci_default_git_depth": 50,
  "ci_forward_deployment_enabled": true,
  "ci_forward_deployment_rollback_allowed": true,
  "ci_allow_fork_pipelines_to_run_in_parent_project": true,
  "ci_separated_caches": true,
  "ci_restrict_pipeline_cancellation_role": "developer",
  "ci_pipeline_variables_minimum_override_role": "maintainer",
  "ci_push_repository_for_job_token_allowed": false,
  "public_jobs": true,
  "shared_with_groups": [],
  "only_allow_merge_if_pipeline_succeeds": false,
  "allow_merge_on_skipped_pipeline": false,
  "allow_pipeline_trigger_approve_deployment": false,
  "restrict_user_defined_variables": false,
  "only_allow_merge_if_all_discussions_are_resolved": false,
  "remove_source_branch_after_merge": false,
  "request_access_enabled": false,
  "merge_method": "merge",
  "squash_option": "default_on",
  "autoclose_referenced_issues": true,
  "enforce_auth_checks_on_uploads": true,
  "suggestion_commit_message": null,
  "merge_commit_template": null,
  "container_registry_image_prefix": "registry.example.com/diaspora/diaspora-project-site",
  "_links": {
    "self": "http://example.com/api/v4/projects",
    "issues": "http://example.com/api/v4/projects/1/issues",
    "merge_requests": "http://example.com/api/v4/projects/1/merge_requests",
    "repo_branches": "http://example.com/api/v4/projects/1/repository_branches",
    "labels": "http://example.com/api/v4/projects/1/labels",
    "events": "http://example.com/api/v4/projects/1/events",
    "members": "http://example.com/api/v4/projects/1/members",
    "cluster_agents": "http://example.com/api/v4/projects/1/cluster_agents"
  }
}

프로젝트 삭제

프로젝트를 삭제합니다. 이 엔드포인트는 다음 작업을 수행합니다:

경고: 관리자 영역의 삭제 보호 설정에서 프로젝트를 즉시 삭제하는 옵션이 GitLab 15.9에서 사용되지 않게 표시되었으며, GitLab 16.0에서 제거되었습니다.

DELETE /projects/:id

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
full_path 문자열 아니오 permanently_remove와 함께 사용할 프로젝트의 전체 경로입니다. GitLab 15.11부터 도입되었습니다. 프로젝트 경로를 찾으려면 단일 프로젝트 가져오기에서 path_with_namespace를 사용하십시오. 프리미엄 및 얼티밋 전용입니다.
permanently_remove 부울/문자열 아니오 삭제가 표시된 경우 프로젝트를 즉시 삭제합니다. GitLab 15.11에서 도입되었습니다. 프리미엄 및 얼티밋 전용입니다.

삭제가 표시된 프로젝트 복원

티어: 프리미엄, 얼티밋 제공: GitLab.com, 셀프 매니지드, GitLab 전용

삭제가 표시된 프로젝트를 복원합니다.

POST /projects/:id/restore

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.

프로젝트 아바타 업로드

지정된 프로젝트에 아바타를 업로드합니다.

PUT /projects/:id

지원되는 속성:

속성 유형 필수 설명
avatar 문자열 업로드할 파일입니다.
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.

파일 시스템에서 아바타를 업로드하려면 --form 매개 변수를 사용하십시오. 이렇게 하면 cURL이 Content-Type: multipart/form-data 헤더를 사용하여 데이터를 게시하게 됩니다. file= 매개 변수는 파일 시스템의 이미지 파일을 가리키고 @로 시작해야 합니다. 예를 들어:

예시 요청:

curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
     --form "avatar=@dk.png" "https://gitlab.example.com/api/v4/projects/5"

예시 응답:

{
  "avatar_url": "https://gitlab.example.com/uploads/-/system/project/avatar/2/dk.png"
}

프로젝트 아바타 다운로드

프로젝트 아바타를 다운로드합니다. 프로젝트가 공개적으로 접근 가능한 경우 인증 없이 이 엔드포인트에 액세스할 수 있습니다.

GET /projects/:id/avatar

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.

예시 요청:

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

프로젝트 아바타 제거

프로젝트 아바타를 제거하려면 avatar 속성에 빈 값을 사용하십시오.

예시 요청:

curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
     --data "avatar=" "https://gitlab.example.com/api/v4/projects/5"

그룹과 프로젝트 공유

그룹과 프로젝트를 공유합니다.

POST /projects/:id/share

지원되는 속성:

속성 유형 필수 설명
group_access 정수 그룹에 부여할 역할(access_level).
group_id 정수 공유할 그룹의 ID입니다.
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
expires_at 문자열 아니오 ISO 8601 형식의 공유 만료 날짜입니다. 예를 들어, 2016-09-26.

그룹 내에서 공유된 프로젝트 링크 삭제

그룹에서 프로젝트를 공유 해제합니다. 성공할 경우 204 및 콘텐츠가 반환됩니다.

DELETE /projects/:id/share/:group_id

지원되는 속성:

속성 유형 필수 설명
group_id 정수 그룹의 ID입니다.
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.

예시 요청:

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/share/17"

사용자가 프로젝트를 전송할 수있는 그룹 가져오기

  • GitLab 15.4에서 소개됨

사용자가 프로젝트를 전송할 수있는 그룹 목록을 검색합니다.

GET /projects/:id/transfer_locations

지원되는 속성:

속성 유형 필수여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩 된 경로.
search 문자열 아니요 검색 할 그룹 이름.

예제 요청:

curl --request GET "https://gitlab.example.com/api/v4/projects/1/transfer_locations"

예제 응답:

[
  {
    "id": 27,
    "web_url": "https://gitlab.example.com/groups/gitlab",
    "name": "GitLab",
    "avatar_url": null,
    "full_name": "GitLab",
    "full_path": "GitLab"
  },
  {
    "id": 31,
    "web_url": "https://gitlab.example.com/groups/foobar",
    "name": "FooBar",
    "avatar_url": null,
    "full_name": "FooBar",
    "full_path": "FooBar"
  }
]

프로젝트를 새로운 네임스페이스로 전송

프로젝트를 새로운 네임스페이스로 전송합니다.

프로젝트를 전송하기 위한 사전 요구 사항에 대한 정보는 다른 네임스페이스로 프로젝트 전송를 참조하십시오.

PUT /projects/:id/transfer

지원되는 속성:

속성 유형 필수여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩 된 경로.
namespace 정수 또는 문자열 프로젝트를 전송할 네임스페이스의 ID 또는 경로.

예제 요청:

curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/transfer?namespace=14"

예제 응답:

{
  "id": 7,
  "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
  "description_html": "<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
  "name": "hello-world",
  "name_with_namespace": "cute-cats / hello-world",
  "path": "hello-world",
  "path_with_namespace": "cute-cats/hello-world",
  "created_at": "2020-10-15T16:25:22.415Z",
  "updated_at": "2020-10-15T16:25:22.415Z",
  "default_branch": "main",
  "tag_list": [], //deprecated, use `topics` instead
  "topics": [],
  "ssh_url_to_repo": "git@gitlab.example.com:cute-cats/hello-world.git",
  "http_url_to_repo": "https://gitlab.example.com/cute-cats/hello-world.git",
  "web_url": "https://gitlab.example.com/cute-cats/hello-world",
  "readme_url": "https://gitlab.example.com/cute-cats/hello-world/-/blob/main/README.md",
  "avatar_url": null,
  "forks_count": 0,
  "star_count": 0,
  "last_activity_at": "2020-10-15T16:25:22.415Z",
  "namespace": {
    "id": 18,
    "name": "cute-cats",
    "path": "cute-cats",
    "kind": "group",
    "full_path": "cute-cats",
    "parent_id": null,
    "avatar_url": null,
    "web_url": "https://gitlab.example.com/groups/cute-cats"
  },
  "container_registry_image_prefix": "registry.example.com/cute-cats/hello-world",
  "_links": {
    "self": "https://gitlab.example.com/api/v4/projects/7",
    "issues": "https://gitlab.example.com/api/v4/projects/7/issues",
    "merge_requests": "https://gitlab.example.com/api/v4/projects/7/merge_requests",
    "repo_branches": "https://gitlab.example.com/api/v4/projects/7/repository/branches",
    "labels": "https://gitlab.example.com/api/v4/projects/7/labels",
    "events": "https://gitlab.example.com/api/v4/projects/7/events",
    "members": "https://gitlab.example.com/api/v4/projects/7/members"
  },
  "packages_enabled": true,
  "empty_repo": false,
  "archived": false,
  "visibility": "private",
  "resolve_outdated_diff_discussions": false,
  "container_registry_enabled": true, // deprecated, use container_registry_access_level instead
  "container_registry_access_level": "enabled",
  "container_expiration_policy": {
    "cadence": "7d",
    "enabled": false,
    "keep_n": null,
    "older_than": null,
    "name_regex": null,
    "name_regex_keep": null,
    "next_run_at": "2020-10-22T16:25:22.746Z"
  },
  "issues_enabled": true,
  "merge_requests_enabled": true,
  "wiki_enabled": true,
  "jobs_enabled": true,
  "snippets_enabled": true,
  "service_desk_enabled": false,
  "service_desk_address": null,
  "can_create_merge_request_in": true,
  "issues_access_level": "enabled",
  "repository_access_level": "enabled",
  "merge_requests_access_level": "enabled",
  "forking_access_level": "enabled",
  "analytics_access_level": "enabled",
  "wiki_access_level": "enabled",
  "builds_access_level": "enabled",
  "snippets_access_level": "enabled",
  "pages_access_level": "enabled",
  "security_and_compliance_access_level": "enabled",
  "emails_disabled": null,
  "emails_enabled": null,
  "shared_runners_enabled": true,
  "group_runners_enabled": true,
  "lfs_enabled": true,
  "creator_id": 2,
  "import_status": "none",
  "open_issues_count": 0,
  "ci_default_git_depth": 50,
  "public_jobs": true,
  "build_timeout": 3600,
  "auto_cancel_pending_pipelines": "enabled",
  "ci_config_path": null,
  "shared_with_groups": [],
  "only_allow_merge_if_pipeline_succeeds": false,
  "allow_merge_on_skipped_pipeline": null,
  "allow_pipeline_trigger_approve_deployment": false,
  "restrict_user_defined_variables": false,
  "request_access_enabled": true,
  "only_allow_merge_if_all_discussions_are_resolved": false,
  "remove_source_branch_after_merge": true,
  "printing_merge_request_link_enabled": true,
  "merge_method": "merge",
  "squash_option": "default_on",
  "suggestion_commit_message": null,
  "merge_commit_template": null,
  "auto_devops_enabled": true,
  "auto_devops_deploy_strategy": "continuous",
  "autoclose_referenced_issues": true,
  "approvals_before_merge": 0, // Deprecated. Use merge request approvals API instead.
  "mirror": false,
  "compliance_frameworks": [],
  "warn_about_potentially_unwanted_characters": true
}

프로젝트 구성원 가져오기

다른 프로젝트에서 구성원을 가져옵니다.

대상 프로젝트의 가져오는 구성원의 역할이:

  • 유지자(Maintainer)이면, 소스 프로젝트의 소유자 역할을 가진 구성원이 유지자 역할로 가져옵니다.
  • 소유자(Owner)이면, 소스 프로젝트의 소유자 역할을 가진 구성원이 소유자 역할로 가져옵니다.
POST /projects/:id/import_project_members/:project_id

지원되는 속성:

속성 유형 필수 설명
id 숫자 또는 문자열 구성원을 받을 대상 프로젝트의 ID 또는 URL-인코딩된 경로.
project_id 숫자 또는 문자열 구성원을 가져올 소스 프로젝트의 ID 또는 URL-인코딩된 경로.

예시 요청:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/import_project_members/32"

응답:

  • 성공 시 200 OK.
  • 대상 또는 소스 프로젝트가 없거나 요청자가 액세스할 수 없으면 404 프로젝트를 찾을 수 없음.
  • 프로젝트 구성원을 가져오는 작업이 성공적으로 완료되지 않았으면 422 처리할 수 없는 엔터티.

예시 응답:

  • 모든 이메일을 성공적으로 보냈을 때 (200 HTTP 상태 코드):

    { "status": "success" }
    
  • 1명 이상의 구성원을 가져오는 동안 오류가 발생했을 때 (200 HTTP 상태 코드):

    {
      "status": "error",
      "message": {
        "john_smith": "일부 개별 오류 메시지",
        "jane_smith": "일부 개별 오류 메시지"
      },
      "total_members_count": 3
    }
    
  • 시스템 오류가 발생했을 때 (404422 HTTP 상태 코드):

{ "message": "가져오기 실패" }

프로젝트의 housekeeping 작업 시작

프로젝트의 housekeeping 작업을 시작합니다.

POST /projects/:id/housekeeping

지원되는 속성:

속성 유형 필수 설명
id 숫자 또는 문자열 프로젝트의 ID 또는 URL-인코딩된 경로.
task 문자열 아니오 prune은 도달할 수 없는 객체의 수동 가지치기를 트리거하고, eager은 eager housekeeping을 트리거합니다.

실시간 보안 스캔

Tier: Ultimate Offering: GitLab.com Status: Experiment

실시간으로 단일 파일의 SAST 스캔 결과를 반환합니다.

POST /projects/:id/security_scans/sast/scan

지원되는 속성:

속성 유형 필수 설명
id 숫자 또는 문자열 프로젝트의 ID 또는 URL-인코딩된 경로.

예시 요청:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
 --header "Content-Type: application/json" \
 --data '{
  "file_path":"src/main.c",
  "content":"#include<string.h>\nint main(int argc, char **argv) {\n  char buff[128];\n  strcpy(buff, argv[1]);\n  return 0;\n}\n"
 }' \
 --url "https://gitlab.example.com/api/v4/projects/:id/security_scans/sast/scan"

예시 응답:

{
  "vulnerabilities": [
    {
      "name": "보안 문제가 있는 문자열 처리 함수 (strcpy)",
      "description": "`strcpy` 패밀리의 함수들은 대상 버퍼로 복사하기 전에 버퍼의 크기를 제한하거나 확인할 수 있는 기능을 제공하지 않습니다. 이는 버퍼 오버플로우를 유발할 수 있습니다. 대상 버퍼에 올바른 제한을 제공하고 문자열이 null로 끝나도록 하는 `strncpy`와 같은 보안이 강화된 대안을 사용하는 것이 좋습니다.\n\n더 많은 정보는 다음을 참조하세요: https://linux.die.net/man/3/strncpy\n\nC Runtime Library (CRT)를 개발 중인 경우, 보안이 강화된 버전이 있으므로 아래에서 확인하십시오:\nhttps://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l?view=msvc-170\n",
      "severity": "높음",
      "location": {
        "file": "src/main.c",
        "start_line": 5,
        "end_line": 5,
        "start_column": 3,
        "end_column": 23
      }
    }
  ]
}

Git 저장소의 스냅샷 다운로드

이 엔드포인트는 관리자 사용자만 액세스할 수 있습니다.

프로젝트 (또는 요청한 경우 위키)의 Git 저장소의 스냅샷을 다운로드합니다. 이 스냅샷은 항상 압축 해제된 tar 형식입니다.

git clone 작업이 작동하지 않을 정도로 저장소가 손상된 경우, 스냅샷을 통해 일부 데이터를 검색할 수 있습니다.

GET /projects/:id/snapshot

지원되는 속성:

속성 유형 필수 설명
id 숫자 또는 문자열 프로젝트의 ID 또는 URL-인코딩된 경로.
wiki 부울 아니오 프로젝트 대신 위키를 다운로드할지 여부.

저장소 저장 경로 가져오기

Gitaly Cluster가 사용되지 않는 경우에만 특정 프로젝트의 저장소 저장 경로를 가져옵니다. Gitaly Cluster를 사용하는 경우, Praefect에서 생성된 복제 경로를 참조하십시오.

관리자만 사용할 수 있습니다.

GET /projects/:id/storage

지원되는 속성:

속성 유형 필수 설명
id 숫자 또는 문자열 프로젝트의 ID 또는 URL-인코딩된 경로.
[
  {
    "project_id": 1,
    "disk_path": "@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
    "created_at": "2012-10-12T17:04:47Z",
    "repository_storage": "default"
  }
]