InfoGrab DocsInfoGrab Docs

저장소 API

요약

이 API를 사용하여 Git 리포지터리를 관리합니다. 지정된 프로젝트의 모든 리포지터리 파일과 디렉터리를 나열합니다. 이 명령은 git ls-tree 명령과 본질적으로 동일한 기능을 제공합니다. GitLab 17.7 버전에서는 요청한 경로를 찾지 못했을 때의 오류 처리 방식이 변경되었습니다.

이 API를 사용하여 Git 리포지터리를 관리합니다.

프로젝트의 모든 리포지터리 트리 목록 조회#

히스토리
  • with_last_commit 속성이 GitLab 19.3에서 도입되었습니다.

지정된 프로젝트의 모든 리포지터리 파일과 디렉터리를 나열합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

이 명령은 git ls-tree 명령과 본질적으로 동일한 기능을 제공합니다. 자세한 내용은 Git 내부 구조 문서의 tree 오브젝트 항목을 참고합니다.

Warning

GitLab 17.7 버전에서는 요청한 경로를 찾지 못했을 때의 오류 처리 방식이 변경되었습니다. 이제 엔드포인트는 상태 코드 404 Not Found를 반환합니다. 이전에는 상태 코드가 200 OK였습니다.

존재하지 않는 경로에 대해 빈 배열과 함께 200 상태 코드를 받는 것에 구현이 의존하고 있다면, 새로운 404 응답을 처리하도록 오류 처리를 수정해야 합니다.

GET /projects/:id/repository/tree

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
page_token string 아니요 다음 페이지를 가져올 트리 레코드 ID. keyset 페이지네이션에서만 사용합니다.
pagination string 아니요 keyset이면 keyset 기반 페이지네이션 방식을 사용합니다.
path string 아니요 리포지터리 내부 경로. 하위 디렉터리의 내용을 가져올 때 사용합니다.
per_page integer 아니요 페이지당 표시할 결과 수. 지정하지 않으면 기본값은 20입니다. 자세한 내용은 페이지네이션을 참고합니다.
recursive boolean 아니요 true이면 트리를 재귀적으로 가져옵니다. 기본값은 false입니다.
ref string 아니요 리포지터리 브랜치 또는 태그 이름. 지정하지 않으면 기본 브랜치를 사용합니다.
with_last_commit boolean 아니요 true이면 각 트리 항목의 마지막 커밋을 포함합니다. recursive와 함께 사용할 수 없습니다. 기본값은 false입니다.

성공하면 200 OK와 트리 오브젝트 배열을 반환합니다. with_last_commit이 true이면 각 트리 오브젝트에 해당 항목을 마지막으로 변경한 커밋의 상세 정보를 담은 last_commit 오브젝트가 포함됩니다. last_commit 오브젝트는 커밋 API와 동일한 속성을 사용합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/tree"

응답 예시:

[
  {
    "id": "a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba",
    "name": "html",
    "type": "tree",
    "path": "files/html",
    "mode": "040000"
  },
  {
    "id": "4535904260b1082e14f867f7a24fd8c21495bde3",
    "name": "images",
    "type": "tree",
    "path": "files/images",
    "mode": "040000"
  },
  {
    "id": "31405c5ddef582c5a9b7a85230413ff90e2fe720",
    "name": "js",
    "type": "tree",
    "path": "files/js",
    "mode": "040000"
  },
  {
    "id": "cc71111cfad871212dc99572599a568bfe1e7e00",
    "name": "lfs",
    "type": "tree",
    "path": "files/lfs",
    "mode": "040000"
  },
  {
    "id": "fd581c619bf59cfdfa9c8282377bb09c2f897520",
    "name": "markdown",
    "type": "tree",
    "path": "files/markdown",
    "mode": "040000"
  },
  {
    "id": "23ea4d11a4bdd960ee5320c5cb65b5b3fdbc60db",
    "name": "ruby",
    "type": "tree",
    "path": "files/ruby",
    "mode": "040000"
  },
  {
    "id": "7d70e02340bac451f281cecf0a980907974bd8be",
    "name": "whitespace",
    "type": "blob",
    "path": "files/whitespace",
    "mode": "100644"
  }
]

with_last_commit을 사용한 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/tree?with_last_commit=true"

응답 예시:

[
  {
    "id": "a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba",
    "name": "html",
    "type": "tree",
    "path": "files/html",
    "mode": "040000",
    "last_commit": {
      "id": "913c66a37b4a45b9769037c55c2d238bd0942d2e",
      "short_id": "913c66a3",
      "created_at": "2014-02-27T10:14:56.000+02:00",
      "parent_ids": [
        "cfe32cf61b73a0d5e9f13e774abde7ff789b1660"
      ],
      "title": "Files, encoding and much more",
      "message": "Files, encoding and much more\n",
      "author_name": "Dmitriy Zaporozhets",
      "author_email": "dmitriy.zaporozhets@gmail.com",
      "authored_date": "2014-02-27T10:14:56.000+02:00",
      "committer_name": "Dmitriy Zaporozhets",
      "committer_email": "dmitriy.zaporozhets@gmail.com",
      "committed_date": "2014-02-27T10:14:56.000+02:00",
      "trailers": {},
      "extended_trailers": {},
      "web_url": "https://gitlab.example.com/example-group/example-project/-/commit/913c66a37b4a45b9769037c55c2d238bd0942d2e"
    }
  }
]

리포지터리에서 블롭 조회#

리포지터리에 있는 블롭의 크기와 내용 같은 정보를 조회합니다. 블롭 내용은 Base64로 인코딩됩니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

10 MB보다 큰 블롭의 경우 이 엔드포인트에는 분당 5회 요청의 속도 제한이 적용됩니다.

GET /projects/:id/repository/blobs/:sha

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
sha string 예 블롭 SHA.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
content string Base64로 인코딩된 블롭 내용.
encoding string 블롭 내용에 사용된 인코딩.
sha string 블롭 SHA.
size integer 원시 Git 블롭의 바이트 단위 크기.
Note

Git에 유효한 UTF-8로 저장되지 않은 텍스트 파일(예: UTF-16 또는 ISO-8859-1)의 경우 content는 Base64로 인코딩되기 전에 UTF-8로 변환됩니다. 이러한 경우 size는 원시 블롭 크기를 나타내며, 디코딩된 내용의 길이와 다를 수 있습니다. Git에 저장된 정확한 바이트를 가져오려면 원시 블롭 엔드포인트를 사용합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/79f7bbd25901e8334750839545a9bd021f0e4c83"

응답 예시:

{
  "size": 1476,
  "encoding": "base64",
  "content": "VGhpcyBpcyBhIGJpbmFyeSBmaWxl",
  "sha": "79f7bbd25901e8334750839545a9bd021f0e4c83"
}

원시 블롭 내용 조회#

블롭 SHA로 블롭의 원시 파일 내용을 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

GET /projects/:id/repository/blobs/:sha/raw

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
sha string 예 블롭 SHA.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/79f7bbd25901e8334750839545a9bd021f0e4c83/raw"

단일 요청으로 여러 블롭 조회#

히스토리
  • GitLab 19.3에서 repository_blobs_batch_api라는 이름의 기능 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다. 이 기능은 테스트용으로 제공되며 운영 환경에서 사용할 준비는 되지 않았습니다.

한 번의 요청으로 최대 20개 파일의 내용을 조회합니다. 요청한 각 파일은 브랜치, 태그 또는 커밋을 기준으로 확인됩니다. 블롭 내용은 Base64로 인코딩됩니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다. 기능 플래그가 비활성화되어 있으면 엔드포인트는 404 Not Found를 반환합니다.

이 엔드포인트에는 사용자별, 프로젝트별 속도 제한이 적용됩니다. 기본값은 분당 5회 요청이며, project_repositories_blobs_batch_limit 애플리케이션 설정으로 변경할 수 있습니다.

각 블롭은 내용의 처음 1 MB까지만 잘려서 반환됩니다. 블롭이 잘린 경우 truncated 필드는 true이고 size는 블롭 전체 크기를 바이트 단위로 보고합니다. 요청한 참조에 존재하지 않는 파일은 응답에서 제외됩니다.

POST /projects/:id/repository/blobs/batch

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
files array 예 조회할 파일 오브젝트 배열. 최대 20개.
files[].path string 예 리포지터리에 있는 파일의 경로.
files[].ref string 아니요 브랜치, 태그 또는 커밋. 기본값은 기본 브랜치.

성공하면 200 OK와 확인된 각 파일에 대한 다음 응답 속성을 담은 배열을 반환합니다:

속성 유형 설명
content string Base64로 인코딩된 블롭 내용.
encoding string 블롭 내용에 사용된 인코딩.
path string 리포지터리에 있는 파일의 경로.
ref string 파일을 확인한 기준 참조.
size integer 블롭의 전체 크기(바이트).
truncated boolean content가 블롭의 처음 1 MB로 잘렸는지 여부.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{"files": [{"path": "README.md"}, {"path": "config/database.yml", "ref": "main"}]}' \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/batch"

응답 예시:

[
  {
    "path": "README.md",
    "ref": "main",
    "size": 1476,
    "truncated": false,
    "encoding": "base64",
    "content": "VGhpcyBpcyBhIGJpbmFyeSBmaWxl"
  }
]

리포지터리에서 파일 아카이브 조회#

지정된 리포지터리의 파일 아카이브를 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

GitLab.com 사용자의 경우 이 엔드포인트에는 분당 5회 요청의 속도 제한 임계값이 적용됩니다.

GET /projects/:id/repository/archive[.format]

format은 아카이브 형식을 지정하는 선택적 접미사이며 기본값은 tar.gz입니다. 예를 들어 archive.zip을 지정하면 ZIP 형식의 아카이브가 전송됩니다. 사용할 수 있는 옵션은 다음과 같습니다:

  • bz2
  • tar
  • tar.bz2
  • tar.gz
  • tb2
  • tbz
  • tbz2
  • zip

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
exclude_paths string 아니요 아카이브에서 제외할 경로를 쉼표로 구분한 목록.
include_lfs_blobs boolean 아니요 true이면 LFS 오브젝트가 아카이브에 포함됩니다. false로 설정하면 LFS 오브젝트가 제외됩니다. 기본값은 true입니다.
path string 아니요 다운로드할 리포지터리의 하위 경로. 빈 문자열이면 리포지터리 전체가 기본값입니다.
sha string 아니요 다운로드할 커밋 SHA. 태그, 브랜치 참조 또는 SHA를 사용할 수 있습니다. 지정하지 않으면 기본 브랜치의 최신 커밋이 기본값입니다.
ref_type string 아니요 sha에 지정한 ref의 유형. 브랜치와 태그의 이름이 같을 때 올바른 ref를 선택하는 데 사용합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.com/api/v4/projects/<project_id>/repository/archive?sha=<commit_sha>&path=<path>&exclude_paths=<path1,path2>"

브랜치, 태그 또는 커밋 비교#

히스토리
  • collapsed 및 too_large 응답 속성이 GitLab 18.4에서 도입되었습니다.

지정된 프로젝트에서 두 브랜치, 태그 또는 커밋 사이의 차이를 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

compare_timeout이 true이면 비교가 크기 제한을 초과했거나 시간이 초과된 것입니다:

  • commits 배열은 항상 완전합니다.
  • diffs 배열은 불완전할 수 있습니다.
  • 개별 diff 오브젝트는 내용이 제한을 초과한 경우 diff 문자열이 비어 있을 수 있습니다.
GET /projects/:id/repository/compare

지원되는 속성:

속성 유형 필수 여부 설명
from string 예 커밋 SHA 또는 브랜치 이름.
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
to string 예 커밋 SHA 또는 브랜치 이름.
from_project_id integer 아니요 비교 기준이 되는 프로젝트의 ID.
straight boolean 아니요 true이면 from과 to를 직접 비교하는 방식(from..to)을 사용합니다. false이면 머지 베이스를 기준으로 비교합니다(from...to). 기본값은 false입니다.
unidiff boolean 아니요 true이면 diff를 통합 diff 형식으로 표시합니다. 기본값은 false입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
commit object 비교 대상 중 가장 최근 커밋의 상세 정보.
commits object array 두 참조 사이의 커밋. compare_timeout이 true여도 항상 완전합니다.
commits[].author_email string 커밋 작성자의 이메일 주소.
commits[].author_name string 커밋 작성자의 이름.
commits[].created_at datetime 커밋 생성 타임스탬프.
commits[].id string 전체 커밋 SHA.
commits[].short_id string 짧은 커밋 SHA.
commits[].title string 커밋 제목.
compare_same_ref boolean true이면 비교의 시작과 끝에 같은 참조를 사용한 것입니다.
compare_timeout boolean true이면 비교가 크기 제한을 초과했거나 시간이 초과된 것입니다. diffs 배열이 불완전할 수 있습니다.
diffs object array 파일 차이 목록.
diffs[].a_mode string 이전 파일 모드.
diffs[].b_mode string 새 파일 모드.
diffs[].collapsed boolean true이면 파일 diff가 제외되었으나 요청하면 가져올 수 있습니다.
diffs[].deleted_file boolean true이면 파일이 제거되었습니다.
diffs[].diff string 파일의 변경 사항을 보여주는 diff 내용.
diffs[].new_file boolean true이면 파일이 추가되었습니다.
diffs[].new_path string 파일의 새 경로.
diffs[].old_path string 파일의 이전 경로.
diffs[].renamed_file boolean true이면 파일 이름이 변경되었습니다.
diffs[].too_large boolean true이면 파일 diff가 제외되었고 조회할 수 없습니다.
web_url string 비교 결과를 확인할 수 있는 웹 URL.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/compare?from=main&to=feature"

응답 예시:

{
  "commit": {
    "id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
    "short_id": "12d65c8dd2b",
    "title": "JS fix",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "created_at": "2014-02-27T10:27:00+02:00"
  },
  "commits": [{
    "id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
    "short_id": "12d65c8dd2b",
    "title": "JS fix",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "created_at": "2014-02-27T10:27:00+02:00"
  }],
  "diffs": [{
    "old_path": "files/js/application.js",
    "new_path": "files/js/application.js",
    "a_mode": null,
    "b_mode": "100644",
    "diff": "@@ -24,8 +24,10 @@\n //= require g.raphael-min\n //= require g.bar-min\n //= require branch-graph\n-//= require highlightjs.min\n-//= require ace/ace\n //= require_tree .\n //= require d3\n //= require underscore\n+\n+function fix() { \n+  alert(\"Fixed\")\n+}",
    "collapsed": false,
    "too_large": false,
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false
  }],
  "compare_timeout": false,
  "compare_same_ref": false,
  "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/compare/ae73cb07c9eeaf35924a10f713b364d32b2dd34f...0b4bc9a49b562e85de7cc9e834518ea6828729b9"
}

기여자 목록 조회#

히스토리
  • ref가 GitLab 17.4에서 도입되었습니다.

리포지터리 기여자 목록을 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

반환되는 커밋 수에는 머지 커밋이 포함되지 않습니다.

GET /projects/:id/repository/contributors

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
order_by string 아니요 기여자를 name, email 또는 commits(커밋 수) 기준으로 정렬합니다. 지정하지 않으면 커밋 날짜순으로 정렬합니다.
ref string 아니요 리포지터리 브랜치 또는 태그 이름. 지정하지 않으면 기본 브랜치를 사용합니다.
sort string 아니요 기여자를 asc 또는 desc 순서로 정렬해 반환합니다. 기본값은 asc입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
additions integer 기여자가 추가한 줄 수.
commits integer 기여자의 커밋 수.
deletions integer 기여자가 삭제한 줄 수.
email string 기여자의 이메일 주소.
name string 기여자의 이름.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/7/repository/contributors"

응답 예시:

[{
  "name": "Example User",
  "email": "example@example.com",
  "commits": 117,
  "additions": 0,
  "deletions": 0
}, {
  "name": "Sample User",
  "email": "sample@example.com",
  "commits": 33,
  "additions": 0,
  "deletions": 0
}]

머지 베이스 조회#

커밋 SHA, 브랜치 이름, 태그와 같은 2개 이상의 ref에 대한 공통 조상을 조회합니다.

GET /projects/:id/repository/merge_base

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
refs array 예 공통 조상을 찾을 ref. 여러 개의 ref를 지정할 수 있습니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
author_email string 작성자의 이메일 주소.
author_name string 작성자의 이름.
authored_date datetime 커밋이 작성된 날짜.
committed_date datetime 커밋이 커밋된 날짜.
committer_email string 커미터의 이메일 주소.
committer_name string 커미터의 이름.
created_at datetime 커밋 생성 타임스탬프.
extended_trailers object Git 트레일러에 대한 확장 정보.
id string 전체 커밋 SHA.
message string 전체 커밋 메시지.
parent_ids array 부모 커밋 SHA 목록.
short_id string 짧은 커밋 SHA.
title string 커밋 제목.
trailers object 커밋 메시지에서 파싱한 Git 트레일러.
web_url string GitLab 웹 인터페이스에서 커밋을 확인할 수 있는 URL.

가독성을 위해 ref를 줄인 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/merge_base?refs[]=304d257d&refs[]=0031876f"

응답 예시:

{
  "id": "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863",
  "short_id": "1a0b36b3",
  "title": "Initial commit",
  "created_at": "2014-02-27T08:03:18.000Z",
  "parent_ids": [],
  "message": "Initial commit\n",
  "author_name": "Example User",
  "author_email": "user@example.com",
  "authored_date": "2014-02-27T08:03:18.000Z",
  "committer_name": "Example User",
  "committer_email": "user@example.com",
  "committed_date": "2014-02-27T08:03:18.000Z",
  "trailers": {},
  "extended_trailers": {},
  "web_url": "https://gitlab.example.com/example-group/example-project/-/commit/1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"
}

diff 통계 조회#

히스토리
  • GitLab 19.4에서 repository_diff_stats_api라는 이름의 기능 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

두 ref 사이에서 서로 다른 각 파일의 추가된 줄 수와 삭제된 줄 수를 조회합니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다.

page 및 per_page 페이지네이션 파라미터로 결과의 페이지네이션을 제어합니다.

GET /projects/:id/repository/diff_stats

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
from string 예 비교 기준이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다. 최대 길이는 255자입니다.
to string 예 비교 대상이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다. 최대 길이는 255자입니다.

성공하면 200 OK와 다음 응답 속성을 담은 diff 통계 배열을 반환합니다:

속성 유형 설명
additions integer 추가된 줄 수.
deletions integer 삭제된 줄 수.
old_path string 파일의 이전 경로. 파일 이름이 변경된 경우 path와 다릅니다.
path string 파일의 경로.

다음 상태 코드를 반환할 수 있습니다:

  • 400 Bad Request: from 또는 to가 없거나 최대 길이를 초과했습니다.
  • 401 Unauthorized: 요청이 인증되지 않았습니다.
  • 403 Forbidden: 이 프로젝트에서 리포지터리 내용을 비교할 권한이 없거나 리포지터리가 비활성화되어 있습니다.
  • 404 Not Found: 프로젝트가 존재하지 않거나 사용자에게 보이지 않거나, 지정한 ref가 존재하지 않거나, repository_diff_stats_api 기능 플래그가 비활성화되어 있습니다.
  • 429 Too Many Requests: 이 엔드포인트의 속도 제한을 초과했습니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/diff_stats?from=main&to=feature"

응답 예시:

[
  {
    "old_path": "app/models/user.rb",
    "path": "app/models/user.rb",
    "additions": 15,
    "deletions": 4
  },
  {
    "old_path": "app/assets/javascripts/pages/users/index.js",
    "path": "app/assets/javascripts/pages/users/show.js",
    "additions": 8,
    "deletions": 0
  },
  {
    "old_path": "spec/models/user_spec.rb",
    "path": "spec/models/user_spec.rb",
    "additions": 22,
    "deletions": 3
  }
]

분기된 커밋 수 조회#

히스토리
  • GitLab 19.3에서 repository_diverging_commits_api라는 이름의 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

두 ref가 몇 개의 커밋만큼 분기했는지 조회합니다. 각 수치는 서로를 기준으로 계산됩니다:

  • behind는 from에는 있고 to에는 없는 커밋 수입니다.
  • ahead는 to에는 있고 from에는 없는 커밋 수입니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다.

GET /projects/:id/repository/diverging_commits

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
from string 예 비교 기준이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다.
to string 예 비교 대상이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다.
max_count integer 아니요 계산할 최대 커밋 수. 제한을 두지 않으려면 0을 사용합니다. 기본값은 0입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
ahead integer to에는 있고 from에는 없는 커밋 수.
behind integer from에는 있고 to에는 없는 커밋 수.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/diverging_commits?from=main&to=feature"

응답 예시:

{
  "behind": 3,
  "ahead": 5
}

변경된 경로 조회#

히스토리
  • GitLab 19.4에서 repository_changed_paths_api라는 이름의 기능 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

두 커밋, 브랜치 또는 태그 사이에 변경된 파일 목록을 조회합니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다.

GET /projects/:id/repository/changed_paths

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
from string 예 비교 기준이 되는 커밋 SHA, 브랜치 또는 태그.
to string 예 비교 대상이 되는 커밋 SHA, 브랜치 또는 태그.
find_renames boolean 아니요 true이면 파일 이름 변경을 탐지합니다. 기본값은 false입니다.

성공하면 200 OK와 다음 응답 속성을 담은 변경된 경로 목록을 반환합니다:

속성 유형 설명
new_mode string 새 파일 모드.
old_mode string 이전 파일 모드.
old_path string 파일의 이전 경로. 추가된 파일의 경우 빈 문자열입니다.
path string 파일의 경로.
status string 변경 유형. ADDED, MODIFIED, DELETED, RENAMED, TYPE_CHANGED, COPIED 중 하나입니다.

다음 상태 코드를 반환할 수 있습니다:

  • 400 Bad Request: from 또는 to가 없거나 최대 길이를 초과했습니다.
  • 401 Unauthorized: 요청이 인증되지 않았습니다.
  • 403 Forbidden: 이 프로젝트에서 리포지터리 내용을 비교할 권한이 없거나 리포지터리가 비활성화되어 있습니다.
  • 404 Not Found: 프로젝트가 존재하지 않거나 사용자에게 보이지 않거나, 지정한 ref가 존재하지 않거나, repository_changed_paths_api 기능 플래그가 비활성화되어 있습니다.
  • 429 Too Many Requests: 이 엔드포인트의 속도 제한을 초과했습니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/changed_paths?from=main&to=feature"

응답 예시:

[
  {
    "status": "MODIFIED",
    "path": "app/models/user.rb",
    "old_path": "app/models/user.rb",
    "old_mode": "100644",
    "new_mode": "100644"
  }
]

체인지로그 데이터 생성#

히스토리
  • GitLab 17.7에서 CI/CD job 토큰을 통한 인증이 도입되었습니다.
  • config_file_ref 속성이 GitLab 18.2에서 도입되었습니다.
  • 일반 텍스트 형식(.txt)이 GitLab 19.1에서 도입되었습니다.

리포지터리의 커밋을 기반으로 체인지로그 데이터를 생성하며, 체인지로그 파일에는 커밋하지 않습니다.

POST /projects/:id/repository/changelog와 정확히 동일하게 동작하지만, 체인지로그 데이터가 체인지로그 파일에 커밋되지 않습니다.

GET /projects/:id/repository/changelog

선택 사항입니다. .txt 접미사를 추가하면 체인지로그를 JSON 대신 일반 텍스트 Markdown으로 반환합니다:

GET /projects/:id/repository/changelog.txt

지원되는 속성:

속성 유형 필수 여부 설명
version string 예 체인지로그를 생성할 버전. 형식은 시맨틱 버저닝을 따라야 합니다.
config_file string 아니요 프로젝트의 Git 리포지터리에 있는 체인지로그 구성 파일 경로. 기본값은 .gitlab/changelog_config.yml입니다.
config_file_ref string 아니요 체인지로그 구성 파일이 정의된 Git 참조(예: 브랜치). 기본값은 리포지터리의 기본 브랜치입니다.
date datetime 아니요 릴리스의 날짜와 시간. ISO 8601 형식을 사용합니다. 예: 2016-03-11T03:45:40Z. 기본값은 현재 시각입니다.
from string 아니요 체인지로그 생성에 사용할 커밋 범위의 시작(SHA). 이 커밋 자체는 목록에 포함되지 않습니다.
to string 아니요 체인지로그에 사용할 커밋 범위의 끝(SHA). 이 커밋은 목록에 포함됩니다. 기본값은 기본 프로젝트 브랜치의 HEAD입니다.
trailer string 아니요 커밋을 포함할 때 사용할 Git 트레일러. 기본값은 Changelog입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
notes string Markdown 형식으로 생성된 체인지로그 데이터.

요청 예시:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog?version=1.0.0"

가독성을 위해 줄바꿈을 추가한 응답 예시:

{
  "notes": "## 1.0.0 (2021-11-17)\n\n### feature (2 changes)\n\n-
    [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf)
    ([merge request](namespace13/project13!2))\n-
    [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8)
    ([merge request](namespace13/project13!1))\n"
}

.txt 형식을 사용한 요청 예시:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog.txt?version=1.0.0"

응답 예시:

## 1.0.0 (2021-11-17)

### feature (2 changes)

- [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf)
  ([merge request](namespace13/project13!2))
- [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8)
  ([merge request](namespace13/project13!1))

파일에 체인지로그 데이터 추가#

히스토리
  • GitLab 17.3에서 일반 제공되었습니다. 기능 플래그 changelog_commits_limitation이 제거되었습니다.
  • config_file_ref가 GitLab 18.2에서 도입되었습니다.

리포지터리의 커밋을 기반으로 체인지로그 데이터를 생성하고 체인지로그 파일에 커밋합니다.

시맨틱 버전과 커밋 범위가 주어지면 GitLab은 특정 Git 트레일러를 사용하는 모든 커밋에 대한 체인지로그를 생성합니다. GitLab은 프로젝트의 Git 리포지터리에 있는 체인지로그 파일에 새로운 Markdown 형식의 섹션을 추가합니다. 출력 형식은 사용자 지정할 수 있습니다.

성능과 보안상의 이유로 체인지로그 구성 파싱은 2초로 제한됩니다. 이 제한은 잘못된 형식의 체인지로그 템플릿으로 인한 DoS 공격 가능성을 방지하는 데 도움이 됩니다. 요청이 시간 초과되면 changelog_config.yml 파일의 크기를 줄이는 방안을 검토합니다.

사용자용 문서는 체인지로그를 참고합니다.

POST /projects/:id/repository/changelog

체인지로그는 다음 속성을 지원합니다:

속성 유형 필수 여부 설명
version1 string 예 체인지로그를 생성할 버전. 형식은 시맨틱 버저닝을 따라야 합니다.
branch string 아니요 체인지로그 변경 사항을 커밋할 브랜치. 기본값은 프로젝트의 기본 브랜치입니다.
config_file string 아니요 프로젝트의 Git 리포지터리에 있는 체인지로그 구성 파일 경로. 기본값은 .gitlab/changelog_config.yml입니다.
config_file_ref string 아니요 체인지로그 구성 파일이 정의된 Git 참조(예: 브랜치). 기본값은 리포지터리의 기본 브랜치입니다.
date datetime 아니요 릴리스의 날짜와 시간. 기본값은 현재 시각입니다.
file string 아니요 변경 사항을 커밋할 파일. 기본값은 CHANGELOG.md입니다.
from2 string 아니요 체인지로그에 포함할 커밋 범위의 시작을 나타내는 커밋의 SHA. 이 커밋은 체인지로그에 포함되지 않습니다.
message string 아니요 변경 사항을 커밋할 때 사용할 커밋 메시지. 기본값은 Add changelog for version X이며, X는 version 인수의 값입니다.
to string 아니요 체인지로그에 포함할 커밋 범위의 끝을 나타내는 커밋의 SHA. 이 커밋은 체인지로그에 포함됩니다. 기본값은 branch 속성에 지정된 브랜치입니다. 최대 15000개 커밋으로 제한됩니다.
trailer string 아니요 커밋을 포함할 때 사용할 Git 트레일러. 기본값은 Changelog입니다. 대소문자를 구분하므로 Example은 example이나 eXaMpLE과 일치하지 않습니다.

예시#

이 예시는 cURL을 사용하여 HTTP 요청을 수행합니다. 예시 명령에서는 다음 값을 사용합니다.

  • 프로젝트 ID: 42
  • 위치: GitLab.com에 호스팅됨
  • 예시 API 토큰: token

이 명령은 버전 1.0.0의 체인지로그를 생성합니다.

커밋 범위는 다음과 같습니다.

  • 마지막 릴리스의 태그에서 시작합니다.
  • 대상 브랜치의 마지막 커밋에서 끝납니다. 기본 대상 브랜치는 프로젝트의 기본 브랜치입니다.

마지막 태그가 v0.9.0 이고 기본 브랜치가 main 이면, 이 예시에 포함되는 커밋 범위는 v0.9.0..main 입니다.

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

다른 브랜치에서 데이터를 생성하려면 branch 파라미터를 지정합니다. 이 명령은 foo 브랜치에서 데이터를 생성합니다.

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&branch=foo" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

다른 트레일러를 사용하려면 trailer 파라미터를 사용합니다.

curl --request POST --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&trailer=Type" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

결과를 다른 파일에 저장하려면 file 파라미터를 사용합니다.

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&file=NEWS" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

브랜치를 파라미터로 지정하려면 to 속성을 사용합니다.

curl --request GET \
  --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog?version=1.0.0&to=release/x.x.x"

수동 체인지로그 파일에서 마이그레이션#

기존의 수동 관리 체인지로그 파일에서 Git 트레일러를 사용하는 방식으로 마이그레이션할 때는, 체인지로그 파일이 예상 형식과 일치하는지 확인합니다. 그렇지 않으면 API가 추가하는 새 체인지로그 항목이 예상과 다른 위치에 삽입될 수 있습니다. 예를 들어 수동 관리 체인지로그 파일의 버전 값이 X.Y.Z가 아니라 vX.Y.Z로 지정되어 있으면, Git 트레일러로 추가된 새 체인지로그 항목은 체인지로그 파일의 끝에 덧붙습니다.

이슈 444183은 체인지로그 파일의 버전 헤더 형식을 사용자 지정하는 방안을 제안합니다. 다만 해당 이슈가 완료되기 전까지 체인지로그 파일에서 예상되는 버전 헤더 형식은 X.Y.Z 입니다.

헬스#

히스토리
  • GitLab 17.10에서 도입되었습니다.
  • GitLab 18.1에서 새 필드가 추가되었습니다.

프로젝트 리포지터리의 헬스와 관련된 통계를 가져옵니다.

generate가 true 이면 이 엔드포인트는 프로젝트당 시간당 5회 요청으로 속도가 제한됩니다. 이 엔드포인트는 리포지터리에 푸시 액세스 권한이 있는 사용자만 사용할 수 있습니다.

GET /projects/:id/repository/health

지원되는 속성:

속성 유형 필수 여부 설명
generate boolean 아니요 true 이면 새 헬스 리포트를 생성합니다. 엔드포인트가 404를 반환하면 이 값을 설정합니다.

성공하면 200 OK와 리포지터리 헬스 통계를 반환합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/health"

응답 예시:

{
  "size": 2619748827,
  "references": {
    "loose_count": 13,
    "packed_size": 333978,
    "reference_backend": "REFERENCE_BACKEND_FILES"
  },
  "objects": {
    "size": 2180475409,
    "recent_size": 2180453999,
    "stale_size": 21410,
    "keep_size": 0,
    "packfile_count": 1,
    "reverse_index_count": 1,
    "cruft_count": 0,
    "keep_count": 0,
    "loose_objects_count": 36,
    "stale_loose_objects_count": 36,
    "loose_objects_garbage_count": 0
  },
  "commit_graph": {
    "commit_graph_chain_length": 1,
    "has_bloom_filters": true,
    "has_generation_data": true,
    "has_generation_data_overflow": false
  },
  "bitmap": null,
  "multi_pack_index": {
    "packfile_count": 1,
    "version": 1
  },
  "multi_pack_index_bitmap": {
    "has_hash_cache": true,
    "has_lookup_table": true,
    "version": 1
  },
  "alternates": null,
  "is_object_pool": false,
  "last_full_repack": {
    "seconds": 1745892013,
    "nanos": 0
  },
  "updated_at": "2025-05-14T02:31:08.022Z"
}

응답의 각 필드에 대한 설명은 RepositoryInfoResponse protobuf 메시지를 참고합니다.

관련 주제#

Footnotes

  1. version 속성에는 v 접두사를 포함할 수도, 생략할 수도 있습니다. 1.0.0과 v1.0.0은 동일한 결과를 만듭니다. GitLab 17.0에서 도입되었습니다. ↩

  2. from을 지정하지 않으면 GitLab은 지정한 버전 바로 앞의 마지막 안정 버전 태그를 자동으로 찾습니다. GitLab은 시맨틱 버저닝에 따라 X.Y.Z 또는 vX.Y.Z 형식의 태그를 인식합니다.

    예를 들어 version이 2.1.0이면 GitLab은 태그 v2.0.0을 사용합니다. version이 1.1.1 또는 1.2.0이면 GitLab은 태그 v1.1.0을 사용합니다. v1.0.0-pre1과 같은 사전 릴리스 태그는 무시됩니다.

    적합한 태그를 찾지 못하면 API는 오류를 반환하며, from 속성을 명시적으로 지정해야 합니다. ↩

저장소 API

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed
원문 보기

요약

이 API를 사용하여 Git 리포지터리를 관리합니다. 지정된 프로젝트의 모든 리포지터리 파일과 디렉터리를 나열합니다. 이 명령은 git ls-tree 명령과 본질적으로 동일한 기능을 제공합니다. GitLab 17.7 버전에서는 요청한 경로를 찾지 못했을 때의 오류 처리 방식이 변경되었습니다.

이 API를 사용하여 Git 리포지터리를 관리합니다.

프로젝트의 모든 리포지터리 트리 목록 조회#

히스토리
  • with_last_commit 속성이 GitLab 19.3에서 도입되었습니다.

지정된 프로젝트의 모든 리포지터리 파일과 디렉터리를 나열합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

이 명령은 git ls-tree 명령과 본질적으로 동일한 기능을 제공합니다. 자세한 내용은 Git 내부 구조 문서의 tree 오브젝트 항목을 참고합니다.

Warning

GitLab 17.7 버전에서는 요청한 경로를 찾지 못했을 때의 오류 처리 방식이 변경되었습니다. 이제 엔드포인트는 상태 코드 404 Not Found를 반환합니다. 이전에는 상태 코드가 200 OK였습니다.

존재하지 않는 경로에 대해 빈 배열과 함께 200 상태 코드를 받는 것에 구현이 의존하고 있다면, 새로운 404 응답을 처리하도록 오류 처리를 수정해야 합니다.

GET /projects/:id/repository/tree

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
page_token string 아니요 다음 페이지를 가져올 트리 레코드 ID. keyset 페이지네이션에서만 사용합니다.
pagination string 아니요 keyset이면 keyset 기반 페이지네이션 방식을 사용합니다.
path string 아니요 리포지터리 내부 경로. 하위 디렉터리의 내용을 가져올 때 사용합니다.
per_page integer 아니요 페이지당 표시할 결과 수. 지정하지 않으면 기본값은 20입니다. 자세한 내용은 페이지네이션을 참고합니다.
recursive boolean 아니요 true이면 트리를 재귀적으로 가져옵니다. 기본값은 false입니다.
ref string 아니요 리포지터리 브랜치 또는 태그 이름. 지정하지 않으면 기본 브랜치를 사용합니다.
with_last_commit boolean 아니요 true이면 각 트리 항목의 마지막 커밋을 포함합니다. recursive와 함께 사용할 수 없습니다. 기본값은 false입니다.

성공하면 200 OK와 트리 오브젝트 배열을 반환합니다. with_last_commit이 true이면 각 트리 오브젝트에 해당 항목을 마지막으로 변경한 커밋의 상세 정보를 담은 last_commit 오브젝트가 포함됩니다. last_commit 오브젝트는 커밋 API와 동일한 속성을 사용합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/tree"

응답 예시:

[
  {
    "id": "a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba",
    "name": "html",
    "type": "tree",
    "path": "files/html",
    "mode": "040000"
  },
  {
    "id": "4535904260b1082e14f867f7a24fd8c21495bde3",
    "name": "images",
    "type": "tree",
    "path": "files/images",
    "mode": "040000"
  },
  {
    "id": "31405c5ddef582c5a9b7a85230413ff90e2fe720",
    "name": "js",
    "type": "tree",
    "path": "files/js",
    "mode": "040000"
  },
  {
    "id": "cc71111cfad871212dc99572599a568bfe1e7e00",
    "name": "lfs",
    "type": "tree",
    "path": "files/lfs",
    "mode": "040000"
  },
  {
    "id": "fd581c619bf59cfdfa9c8282377bb09c2f897520",
    "name": "markdown",
    "type": "tree",
    "path": "files/markdown",
    "mode": "040000"
  },
  {
    "id": "23ea4d11a4bdd960ee5320c5cb65b5b3fdbc60db",
    "name": "ruby",
    "type": "tree",
    "path": "files/ruby",
    "mode": "040000"
  },
  {
    "id": "7d70e02340bac451f281cecf0a980907974bd8be",
    "name": "whitespace",
    "type": "blob",
    "path": "files/whitespace",
    "mode": "100644"
  }
]

with_last_commit을 사용한 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/tree?with_last_commit=true"

응답 예시:

[
  {
    "id": "a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba",
    "name": "html",
    "type": "tree",
    "path": "files/html",
    "mode": "040000",
    "last_commit": {
      "id": "913c66a37b4a45b9769037c55c2d238bd0942d2e",
      "short_id": "913c66a3",
      "created_at": "2014-02-27T10:14:56.000+02:00",
      "parent_ids": [
        "cfe32cf61b73a0d5e9f13e774abde7ff789b1660"
      ],
      "title": "Files, encoding and much more",
      "message": "Files, encoding and much more\n",
      "author_name": "Dmitriy Zaporozhets",
      "author_email": "dmitriy.zaporozhets@gmail.com",
      "authored_date": "2014-02-27T10:14:56.000+02:00",
      "committer_name": "Dmitriy Zaporozhets",
      "committer_email": "dmitriy.zaporozhets@gmail.com",
      "committed_date": "2014-02-27T10:14:56.000+02:00",
      "trailers": {},
      "extended_trailers": {},
      "web_url": "https://gitlab.example.com/example-group/example-project/-/commit/913c66a37b4a45b9769037c55c2d238bd0942d2e"
    }
  }
]

리포지터리에서 블롭 조회#

리포지터리에 있는 블롭의 크기와 내용 같은 정보를 조회합니다. 블롭 내용은 Base64로 인코딩됩니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

10 MB보다 큰 블롭의 경우 이 엔드포인트에는 분당 5회 요청의 속도 제한이 적용됩니다.

GET /projects/:id/repository/blobs/:sha

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
sha string 예 블롭 SHA.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
content string Base64로 인코딩된 블롭 내용.
encoding string 블롭 내용에 사용된 인코딩.
sha string 블롭 SHA.
size integer 원시 Git 블롭의 바이트 단위 크기.
Note

Git에 유효한 UTF-8로 저장되지 않은 텍스트 파일(예: UTF-16 또는 ISO-8859-1)의 경우 content는 Base64로 인코딩되기 전에 UTF-8로 변환됩니다. 이러한 경우 size는 원시 블롭 크기를 나타내며, 디코딩된 내용의 길이와 다를 수 있습니다. Git에 저장된 정확한 바이트를 가져오려면 원시 블롭 엔드포인트를 사용합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/79f7bbd25901e8334750839545a9bd021f0e4c83"

응답 예시:

{
  "size": 1476,
  "encoding": "base64",
  "content": "VGhpcyBpcyBhIGJpbmFyeSBmaWxl",
  "sha": "79f7bbd25901e8334750839545a9bd021f0e4c83"
}

원시 블롭 내용 조회#

블롭 SHA로 블롭의 원시 파일 내용을 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

GET /projects/:id/repository/blobs/:sha/raw

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
sha string 예 블롭 SHA.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/79f7bbd25901e8334750839545a9bd021f0e4c83/raw"

단일 요청으로 여러 블롭 조회#

히스토리
  • GitLab 19.3에서 repository_blobs_batch_api라는 이름의 기능 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다. 이 기능은 테스트용으로 제공되며 운영 환경에서 사용할 준비는 되지 않았습니다.

한 번의 요청으로 최대 20개 파일의 내용을 조회합니다. 요청한 각 파일은 브랜치, 태그 또는 커밋을 기준으로 확인됩니다. 블롭 내용은 Base64로 인코딩됩니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다. 기능 플래그가 비활성화되어 있으면 엔드포인트는 404 Not Found를 반환합니다.

이 엔드포인트에는 사용자별, 프로젝트별 속도 제한이 적용됩니다. 기본값은 분당 5회 요청이며, project_repositories_blobs_batch_limit 애플리케이션 설정으로 변경할 수 있습니다.

각 블롭은 내용의 처음 1 MB까지만 잘려서 반환됩니다. 블롭이 잘린 경우 truncated 필드는 true이고 size는 블롭 전체 크기를 바이트 단위로 보고합니다. 요청한 참조에 존재하지 않는 파일은 응답에서 제외됩니다.

POST /projects/:id/repository/blobs/batch

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
files array 예 조회할 파일 오브젝트 배열. 최대 20개.
files[].path string 예 리포지터리에 있는 파일의 경로.
files[].ref string 아니요 브랜치, 태그 또는 커밋. 기본값은 기본 브랜치.

성공하면 200 OK와 확인된 각 파일에 대한 다음 응답 속성을 담은 배열을 반환합니다:

속성 유형 설명
content string Base64로 인코딩된 블롭 내용.
encoding string 블롭 내용에 사용된 인코딩.
path string 리포지터리에 있는 파일의 경로.
ref string 파일을 확인한 기준 참조.
size integer 블롭의 전체 크기(바이트).
truncated boolean content가 블롭의 처음 1 MB로 잘렸는지 여부.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{"files": [{"path": "README.md"}, {"path": "config/database.yml", "ref": "main"}]}' \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/batch"

응답 예시:

[
  {
    "path": "README.md",
    "ref": "main",
    "size": 1476,
    "truncated": false,
    "encoding": "base64",
    "content": "VGhpcyBpcyBhIGJpbmFyeSBmaWxl"
  }
]

리포지터리에서 파일 아카이브 조회#

지정된 리포지터리의 파일 아카이브를 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

GitLab.com 사용자의 경우 이 엔드포인트에는 분당 5회 요청의 속도 제한 임계값이 적용됩니다.

GET /projects/:id/repository/archive[.format]

format은 아카이브 형식을 지정하는 선택적 접미사이며 기본값은 tar.gz입니다. 예를 들어 archive.zip을 지정하면 ZIP 형식의 아카이브가 전송됩니다. 사용할 수 있는 옵션은 다음과 같습니다:

  • bz2
  • tar
  • tar.bz2
  • tar.gz
  • tb2
  • tbz
  • tbz2
  • zip

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
exclude_paths string 아니요 아카이브에서 제외할 경로를 쉼표로 구분한 목록.
include_lfs_blobs boolean 아니요 true이면 LFS 오브젝트가 아카이브에 포함됩니다. false로 설정하면 LFS 오브젝트가 제외됩니다. 기본값은 true입니다.
path string 아니요 다운로드할 리포지터리의 하위 경로. 빈 문자열이면 리포지터리 전체가 기본값입니다.
sha string 아니요 다운로드할 커밋 SHA. 태그, 브랜치 참조 또는 SHA를 사용할 수 있습니다. 지정하지 않으면 기본 브랜치의 최신 커밋이 기본값입니다.
ref_type string 아니요 sha에 지정한 ref의 유형. 브랜치와 태그의 이름이 같을 때 올바른 ref를 선택하는 데 사용합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.com/api/v4/projects/<project_id>/repository/archive?sha=<commit_sha>&path=<path>&exclude_paths=<path1,path2>"

브랜치, 태그 또는 커밋 비교#

히스토리
  • collapsed 및 too_large 응답 속성이 GitLab 18.4에서 도입되었습니다.

지정된 프로젝트에서 두 브랜치, 태그 또는 커밋 사이의 차이를 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

compare_timeout이 true이면 비교가 크기 제한을 초과했거나 시간이 초과된 것입니다:

  • commits 배열은 항상 완전합니다.
  • diffs 배열은 불완전할 수 있습니다.
  • 개별 diff 오브젝트는 내용이 제한을 초과한 경우 diff 문자열이 비어 있을 수 있습니다.
GET /projects/:id/repository/compare

지원되는 속성:

속성 유형 필수 여부 설명
from string 예 커밋 SHA 또는 브랜치 이름.
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
to string 예 커밋 SHA 또는 브랜치 이름.
from_project_id integer 아니요 비교 기준이 되는 프로젝트의 ID.
straight boolean 아니요 true이면 from과 to를 직접 비교하는 방식(from..to)을 사용합니다. false이면 머지 베이스를 기준으로 비교합니다(from...to). 기본값은 false입니다.
unidiff boolean 아니요 true이면 diff를 통합 diff 형식으로 표시합니다. 기본값은 false입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
commit object 비교 대상 중 가장 최근 커밋의 상세 정보.
commits object array 두 참조 사이의 커밋. compare_timeout이 true여도 항상 완전합니다.
commits[].author_email string 커밋 작성자의 이메일 주소.
commits[].author_name string 커밋 작성자의 이름.
commits[].created_at datetime 커밋 생성 타임스탬프.
commits[].id string 전체 커밋 SHA.
commits[].short_id string 짧은 커밋 SHA.
commits[].title string 커밋 제목.
compare_same_ref boolean true이면 비교의 시작과 끝에 같은 참조를 사용한 것입니다.
compare_timeout boolean true이면 비교가 크기 제한을 초과했거나 시간이 초과된 것입니다. diffs 배열이 불완전할 수 있습니다.
diffs object array 파일 차이 목록.
diffs[].a_mode string 이전 파일 모드.
diffs[].b_mode string 새 파일 모드.
diffs[].collapsed boolean true이면 파일 diff가 제외되었으나 요청하면 가져올 수 있습니다.
diffs[].deleted_file boolean true이면 파일이 제거되었습니다.
diffs[].diff string 파일의 변경 사항을 보여주는 diff 내용.
diffs[].new_file boolean true이면 파일이 추가되었습니다.
diffs[].new_path string 파일의 새 경로.
diffs[].old_path string 파일의 이전 경로.
diffs[].renamed_file boolean true이면 파일 이름이 변경되었습니다.
diffs[].too_large boolean true이면 파일 diff가 제외되었고 조회할 수 없습니다.
web_url string 비교 결과를 확인할 수 있는 웹 URL.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/compare?from=main&to=feature"

응답 예시:

{
  "commit": {
    "id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
    "short_id": "12d65c8dd2b",
    "title": "JS fix",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "created_at": "2014-02-27T10:27:00+02:00"
  },
  "commits": [{
    "id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
    "short_id": "12d65c8dd2b",
    "title": "JS fix",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "created_at": "2014-02-27T10:27:00+02:00"
  }],
  "diffs": [{
    "old_path": "files/js/application.js",
    "new_path": "files/js/application.js",
    "a_mode": null,
    "b_mode": "100644",
    "diff": "@@ -24,8 +24,10 @@\n //= require g.raphael-min\n //= require g.bar-min\n //= require branch-graph\n-//= require highlightjs.min\n-//= require ace/ace\n //= require_tree .\n //= require d3\n //= require underscore\n+\n+function fix() { \n+  alert(\"Fixed\")\n+}",
    "collapsed": false,
    "too_large": false,
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false
  }],
  "compare_timeout": false,
  "compare_same_ref": false,
  "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/compare/ae73cb07c9eeaf35924a10f713b364d32b2dd34f...0b4bc9a49b562e85de7cc9e834518ea6828729b9"
}

기여자 목록 조회#

히스토리
  • ref가 GitLab 17.4에서 도입되었습니다.

리포지터리 기여자 목록을 조회합니다. 리포지터리가 공개되어 있으면 인증 없이 이 엔드포인트에 접근할 수 있습니다.

반환되는 커밋 수에는 머지 커밋이 포함되지 않습니다.

GET /projects/:id/repository/contributors

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
order_by string 아니요 기여자를 name, email 또는 commits(커밋 수) 기준으로 정렬합니다. 지정하지 않으면 커밋 날짜순으로 정렬합니다.
ref string 아니요 리포지터리 브랜치 또는 태그 이름. 지정하지 않으면 기본 브랜치를 사용합니다.
sort string 아니요 기여자를 asc 또는 desc 순서로 정렬해 반환합니다. 기본값은 asc입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
additions integer 기여자가 추가한 줄 수.
commits integer 기여자의 커밋 수.
deletions integer 기여자가 삭제한 줄 수.
email string 기여자의 이메일 주소.
name string 기여자의 이름.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/7/repository/contributors"

응답 예시:

[{
  "name": "Example User",
  "email": "example@example.com",
  "commits": 117,
  "additions": 0,
  "deletions": 0
}, {
  "name": "Sample User",
  "email": "sample@example.com",
  "commits": 33,
  "additions": 0,
  "deletions": 0
}]

머지 베이스 조회#

커밋 SHA, 브랜치 이름, 태그와 같은 2개 이상의 ref에 대한 공통 조상을 조회합니다.

GET /projects/:id/repository/merge_base

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
refs array 예 공통 조상을 찾을 ref. 여러 개의 ref를 지정할 수 있습니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
author_email string 작성자의 이메일 주소.
author_name string 작성자의 이름.
authored_date datetime 커밋이 작성된 날짜.
committed_date datetime 커밋이 커밋된 날짜.
committer_email string 커미터의 이메일 주소.
committer_name string 커미터의 이름.
created_at datetime 커밋 생성 타임스탬프.
extended_trailers object Git 트레일러에 대한 확장 정보.
id string 전체 커밋 SHA.
message string 전체 커밋 메시지.
parent_ids array 부모 커밋 SHA 목록.
short_id string 짧은 커밋 SHA.
title string 커밋 제목.
trailers object 커밋 메시지에서 파싱한 Git 트레일러.
web_url string GitLab 웹 인터페이스에서 커밋을 확인할 수 있는 URL.

가독성을 위해 ref를 줄인 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/merge_base?refs[]=304d257d&refs[]=0031876f"

응답 예시:

{
  "id": "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863",
  "short_id": "1a0b36b3",
  "title": "Initial commit",
  "created_at": "2014-02-27T08:03:18.000Z",
  "parent_ids": [],
  "message": "Initial commit\n",
  "author_name": "Example User",
  "author_email": "user@example.com",
  "authored_date": "2014-02-27T08:03:18.000Z",
  "committer_name": "Example User",
  "committer_email": "user@example.com",
  "committed_date": "2014-02-27T08:03:18.000Z",
  "trailers": {},
  "extended_trailers": {},
  "web_url": "https://gitlab.example.com/example-group/example-project/-/commit/1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"
}

diff 통계 조회#

히스토리
  • GitLab 19.4에서 repository_diff_stats_api라는 이름의 기능 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

두 ref 사이에서 서로 다른 각 파일의 추가된 줄 수와 삭제된 줄 수를 조회합니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다.

page 및 per_page 페이지네이션 파라미터로 결과의 페이지네이션을 제어합니다.

GET /projects/:id/repository/diff_stats

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
from string 예 비교 기준이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다. 최대 길이는 255자입니다.
to string 예 비교 대상이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다. 최대 길이는 255자입니다.

성공하면 200 OK와 다음 응답 속성을 담은 diff 통계 배열을 반환합니다:

속성 유형 설명
additions integer 추가된 줄 수.
deletions integer 삭제된 줄 수.
old_path string 파일의 이전 경로. 파일 이름이 변경된 경우 path와 다릅니다.
path string 파일의 경로.

다음 상태 코드를 반환할 수 있습니다:

  • 400 Bad Request: from 또는 to가 없거나 최대 길이를 초과했습니다.
  • 401 Unauthorized: 요청이 인증되지 않았습니다.
  • 403 Forbidden: 이 프로젝트에서 리포지터리 내용을 비교할 권한이 없거나 리포지터리가 비활성화되어 있습니다.
  • 404 Not Found: 프로젝트가 존재하지 않거나 사용자에게 보이지 않거나, 지정한 ref가 존재하지 않거나, repository_diff_stats_api 기능 플래그가 비활성화되어 있습니다.
  • 429 Too Many Requests: 이 엔드포인트의 속도 제한을 초과했습니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/diff_stats?from=main&to=feature"

응답 예시:

[
  {
    "old_path": "app/models/user.rb",
    "path": "app/models/user.rb",
    "additions": 15,
    "deletions": 4
  },
  {
    "old_path": "app/assets/javascripts/pages/users/index.js",
    "path": "app/assets/javascripts/pages/users/show.js",
    "additions": 8,
    "deletions": 0
  },
  {
    "old_path": "spec/models/user_spec.rb",
    "path": "spec/models/user_spec.rb",
    "additions": 22,
    "deletions": 3
  }
]

분기된 커밋 수 조회#

히스토리
  • GitLab 19.3에서 repository_diverging_commits_api라는 이름의 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

두 ref가 몇 개의 커밋만큼 분기했는지 조회합니다. 각 수치는 서로를 기준으로 계산됩니다:

  • behind는 from에는 있고 to에는 없는 커밋 수입니다.
  • ahead는 to에는 있고 from에는 없는 커밋 수입니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다.

GET /projects/:id/repository/diverging_commits

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
from string 예 비교 기준이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다.
to string 예 비교 대상이 되는 ref. 커밋 SHA, 브랜치 이름 또는 태그 이름을 사용할 수 있습니다.
max_count integer 아니요 계산할 최대 커밋 수. 제한을 두지 않으려면 0을 사용합니다. 기본값은 0입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
ahead integer to에는 있고 from에는 없는 커밋 수.
behind integer from에는 있고 to에는 없는 커밋 수.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/diverging_commits?from=main&to=feature"

응답 예시:

{
  "behind": 3,
  "ahead": 5
}

변경된 경로 조회#

히스토리
  • GitLab 19.4에서 repository_changed_paths_api라는 이름의 기능 플래그와 함께 도입되었습니다. 기본값은 비활성화입니다. 이 기능은 베타 단계입니다.
Feature flag

이 기능의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

두 커밋, 브랜치 또는 태그 사이에 변경된 파일 목록을 조회합니다.

이 엔드포인트는 인증이 필요합니다. 인증되지 않은 요청은 401 Unauthorized로 거부됩니다.

GET /projects/:id/repository/changed_paths

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string 예 프로젝트의 ID 또는 URL 인코딩된 경로.
from string 예 비교 기준이 되는 커밋 SHA, 브랜치 또는 태그.
to string 예 비교 대상이 되는 커밋 SHA, 브랜치 또는 태그.
find_renames boolean 아니요 true이면 파일 이름 변경을 탐지합니다. 기본값은 false입니다.

성공하면 200 OK와 다음 응답 속성을 담은 변경된 경로 목록을 반환합니다:

속성 유형 설명
new_mode string 새 파일 모드.
old_mode string 이전 파일 모드.
old_path string 파일의 이전 경로. 추가된 파일의 경우 빈 문자열입니다.
path string 파일의 경로.
status string 변경 유형. ADDED, MODIFIED, DELETED, RENAMED, TYPE_CHANGED, COPIED 중 하나입니다.

다음 상태 코드를 반환할 수 있습니다:

  • 400 Bad Request: from 또는 to가 없거나 최대 길이를 초과했습니다.
  • 401 Unauthorized: 요청이 인증되지 않았습니다.
  • 403 Forbidden: 이 프로젝트에서 리포지터리 내용을 비교할 권한이 없거나 리포지터리가 비활성화되어 있습니다.
  • 404 Not Found: 프로젝트가 존재하지 않거나 사용자에게 보이지 않거나, 지정한 ref가 존재하지 않거나, repository_changed_paths_api 기능 플래그가 비활성화되어 있습니다.
  • 429 Too Many Requests: 이 엔드포인트의 속도 제한을 초과했습니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/changed_paths?from=main&to=feature"

응답 예시:

[
  {
    "status": "MODIFIED",
    "path": "app/models/user.rb",
    "old_path": "app/models/user.rb",
    "old_mode": "100644",
    "new_mode": "100644"
  }
]

체인지로그 데이터 생성#

히스토리
  • GitLab 17.7에서 CI/CD job 토큰을 통한 인증이 도입되었습니다.
  • config_file_ref 속성이 GitLab 18.2에서 도입되었습니다.
  • 일반 텍스트 형식(.txt)이 GitLab 19.1에서 도입되었습니다.

리포지터리의 커밋을 기반으로 체인지로그 데이터를 생성하며, 체인지로그 파일에는 커밋하지 않습니다.

POST /projects/:id/repository/changelog와 정확히 동일하게 동작하지만, 체인지로그 데이터가 체인지로그 파일에 커밋되지 않습니다.

GET /projects/:id/repository/changelog

선택 사항입니다. .txt 접미사를 추가하면 체인지로그를 JSON 대신 일반 텍스트 Markdown으로 반환합니다:

GET /projects/:id/repository/changelog.txt

지원되는 속성:

속성 유형 필수 여부 설명
version string 예 체인지로그를 생성할 버전. 형식은 시맨틱 버저닝을 따라야 합니다.
config_file string 아니요 프로젝트의 Git 리포지터리에 있는 체인지로그 구성 파일 경로. 기본값은 .gitlab/changelog_config.yml입니다.
config_file_ref string 아니요 체인지로그 구성 파일이 정의된 Git 참조(예: 브랜치). 기본값은 리포지터리의 기본 브랜치입니다.
date datetime 아니요 릴리스의 날짜와 시간. ISO 8601 형식을 사용합니다. 예: 2016-03-11T03:45:40Z. 기본값은 현재 시각입니다.
from string 아니요 체인지로그 생성에 사용할 커밋 범위의 시작(SHA). 이 커밋 자체는 목록에 포함되지 않습니다.
to string 아니요 체인지로그에 사용할 커밋 범위의 끝(SHA). 이 커밋은 목록에 포함됩니다. 기본값은 기본 프로젝트 브랜치의 HEAD입니다.
trailer string 아니요 커밋을 포함할 때 사용할 Git 트레일러. 기본값은 Changelog입니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다:

속성 유형 설명
notes string Markdown 형식으로 생성된 체인지로그 데이터.

요청 예시:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog?version=1.0.0"

가독성을 위해 줄바꿈을 추가한 응답 예시:

{
  "notes": "## 1.0.0 (2021-11-17)\n\n### feature (2 changes)\n\n-
    [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf)
    ([merge request](namespace13/project13!2))\n-
    [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8)
    ([merge request](namespace13/project13!1))\n"
}

.txt 형식을 사용한 요청 예시:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog.txt?version=1.0.0"

응답 예시:

## 1.0.0 (2021-11-17)

### feature (2 changes)

- [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf)
  ([merge request](namespace13/project13!2))
- [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8)
  ([merge request](namespace13/project13!1))

파일에 체인지로그 데이터 추가#

히스토리
  • GitLab 17.3에서 일반 제공되었습니다. 기능 플래그 changelog_commits_limitation이 제거되었습니다.
  • config_file_ref가 GitLab 18.2에서 도입되었습니다.

리포지터리의 커밋을 기반으로 체인지로그 데이터를 생성하고 체인지로그 파일에 커밋합니다.

시맨틱 버전과 커밋 범위가 주어지면 GitLab은 특정 Git 트레일러를 사용하는 모든 커밋에 대한 체인지로그를 생성합니다. GitLab은 프로젝트의 Git 리포지터리에 있는 체인지로그 파일에 새로운 Markdown 형식의 섹션을 추가합니다. 출력 형식은 사용자 지정할 수 있습니다.

성능과 보안상의 이유로 체인지로그 구성 파싱은 2초로 제한됩니다. 이 제한은 잘못된 형식의 체인지로그 템플릿으로 인한 DoS 공격 가능성을 방지하는 데 도움이 됩니다. 요청이 시간 초과되면 changelog_config.yml 파일의 크기를 줄이는 방안을 검토합니다.

사용자용 문서는 체인지로그를 참고합니다.

POST /projects/:id/repository/changelog

체인지로그는 다음 속성을 지원합니다:

속성 유형 필수 여부 설명
version1 string 예 체인지로그를 생성할 버전. 형식은 시맨틱 버저닝을 따라야 합니다.
branch string 아니요 체인지로그 변경 사항을 커밋할 브랜치. 기본값은 프로젝트의 기본 브랜치입니다.
config_file string 아니요 프로젝트의 Git 리포지터리에 있는 체인지로그 구성 파일 경로. 기본값은 .gitlab/changelog_config.yml입니다.
config_file_ref string 아니요 체인지로그 구성 파일이 정의된 Git 참조(예: 브랜치). 기본값은 리포지터리의 기본 브랜치입니다.
date datetime 아니요 릴리스의 날짜와 시간. 기본값은 현재 시각입니다.
file string 아니요 변경 사항을 커밋할 파일. 기본값은 CHANGELOG.md입니다.
from2 string 아니요 체인지로그에 포함할 커밋 범위의 시작을 나타내는 커밋의 SHA. 이 커밋은 체인지로그에 포함되지 않습니다.
message string 아니요 변경 사항을 커밋할 때 사용할 커밋 메시지. 기본값은 Add changelog for version X이며, X는 version 인수의 값입니다.
to string 아니요 체인지로그에 포함할 커밋 범위의 끝을 나타내는 커밋의 SHA. 이 커밋은 체인지로그에 포함됩니다. 기본값은 branch 속성에 지정된 브랜치입니다. 최대 15000개 커밋으로 제한됩니다.
trailer string 아니요 커밋을 포함할 때 사용할 Git 트레일러. 기본값은 Changelog입니다. 대소문자를 구분하므로 Example은 example이나 eXaMpLE과 일치하지 않습니다.

예시#

이 예시는 cURL을 사용하여 HTTP 요청을 수행합니다. 예시 명령에서는 다음 값을 사용합니다.

  • 프로젝트 ID: 42
  • 위치: GitLab.com에 호스팅됨
  • 예시 API 토큰: token

이 명령은 버전 1.0.0의 체인지로그를 생성합니다.

커밋 범위는 다음과 같습니다.

  • 마지막 릴리스의 태그에서 시작합니다.
  • 대상 브랜치의 마지막 커밋에서 끝납니다. 기본 대상 브랜치는 프로젝트의 기본 브랜치입니다.

마지막 태그가 v0.9.0 이고 기본 브랜치가 main 이면, 이 예시에 포함되는 커밋 범위는 v0.9.0..main 입니다.

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

다른 브랜치에서 데이터를 생성하려면 branch 파라미터를 지정합니다. 이 명령은 foo 브랜치에서 데이터를 생성합니다.

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&branch=foo" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

다른 트레일러를 사용하려면 trailer 파라미터를 사용합니다.

curl --request POST --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&trailer=Type" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

결과를 다른 파일에 저장하려면 file 파라미터를 사용합니다.

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&file=NEWS" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

브랜치를 파라미터로 지정하려면 to 속성을 사용합니다.

curl --request GET \
  --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog?version=1.0.0&to=release/x.x.x"

수동 체인지로그 파일에서 마이그레이션#

기존의 수동 관리 체인지로그 파일에서 Git 트레일러를 사용하는 방식으로 마이그레이션할 때는, 체인지로그 파일이 예상 형식과 일치하는지 확인합니다. 그렇지 않으면 API가 추가하는 새 체인지로그 항목이 예상과 다른 위치에 삽입될 수 있습니다. 예를 들어 수동 관리 체인지로그 파일의 버전 값이 X.Y.Z가 아니라 vX.Y.Z로 지정되어 있으면, Git 트레일러로 추가된 새 체인지로그 항목은 체인지로그 파일의 끝에 덧붙습니다.

이슈 444183은 체인지로그 파일의 버전 헤더 형식을 사용자 지정하는 방안을 제안합니다. 다만 해당 이슈가 완료되기 전까지 체인지로그 파일에서 예상되는 버전 헤더 형식은 X.Y.Z 입니다.

헬스#

히스토리
  • GitLab 17.10에서 도입되었습니다.
  • GitLab 18.1에서 새 필드가 추가되었습니다.

프로젝트 리포지터리의 헬스와 관련된 통계를 가져옵니다.

generate가 true 이면 이 엔드포인트는 프로젝트당 시간당 5회 요청으로 속도가 제한됩니다. 이 엔드포인트는 리포지터리에 푸시 액세스 권한이 있는 사용자만 사용할 수 있습니다.

GET /projects/:id/repository/health

지원되는 속성:

속성 유형 필수 여부 설명
generate boolean 아니요 true 이면 새 헬스 리포트를 생성합니다. 엔드포인트가 404를 반환하면 이 값을 설정합니다.

성공하면 200 OK와 리포지터리 헬스 통계를 반환합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/health"

응답 예시:

{
  "size": 2619748827,
  "references": {
    "loose_count": 13,
    "packed_size": 333978,
    "reference_backend": "REFERENCE_BACKEND_FILES"
  },
  "objects": {
    "size": 2180475409,
    "recent_size": 2180453999,
    "stale_size": 21410,
    "keep_size": 0,
    "packfile_count": 1,
    "reverse_index_count": 1,
    "cruft_count": 0,
    "keep_count": 0,
    "loose_objects_count": 36,
    "stale_loose_objects_count": 36,
    "loose_objects_garbage_count": 0
  },
  "commit_graph": {
    "commit_graph_chain_length": 1,
    "has_bloom_filters": true,
    "has_generation_data": true,
    "has_generation_data_overflow": false
  },
  "bitmap": null,
  "multi_pack_index": {
    "packfile_count": 1,
    "version": 1
  },
  "multi_pack_index_bitmap": {
    "has_hash_cache": true,
    "has_lookup_table": true,
    "version": 1
  },
  "alternates": null,
  "is_object_pool": false,
  "last_full_repack": {
    "seconds": 1745892013,
    "nanos": 0
  },
  "updated_at": "2025-05-14T02:31:08.022Z"
}

응답의 각 필드에 대한 설명은 RepositoryInfoResponse protobuf 메시지를 참고합니다.

관련 주제#

Footnotes

  1. version 속성에는 v 접두사를 포함할 수도, 생략할 수도 있습니다. 1.0.0과 v1.0.0은 동일한 결과를 만듭니다. GitLab 17.0에서 도입되었습니다. ↩

  2. from을 지정하지 않으면 GitLab은 지정한 버전 바로 앞의 마지막 안정 버전 태그를 자동으로 찾습니다. GitLab은 시맨틱 버저닝에 따라 X.Y.Z 또는 vX.Y.Z 형식의 태그를 인식합니다.

    예를 들어 version이 2.1.0이면 GitLab은 태그 v2.0.0을 사용합니다. version이 1.1.1 또는 1.2.0이면 GitLab은 태그 v1.1.0을 사용합니다. v1.0.0-pre1과 같은 사전 릴리스 태그는 무시됩니다.

    적합한 태그를 찾지 못하면 API는 오류를 반환하며, from 속성을 명시적으로 지정해야 합니다. ↩