- API v5에서의 제거 사항
- 병합 요청 목록
- 단일 MR 가져오기
- 단일 병합 요청 리뷰어 가져오기
- 단일 병합 요청 커밋 가져오기
- 단일 병합 요청 변경 내용 가져오기
- 병합 요청 차이점 목록
- 병합 요청 파이프라인 목록
- 병합 요청 파이프라인 생성
- 병합 요청 생성
- MR 업데이트
- 병합 요청 삭제
- 병합 요청 병합
- 기본 병합 가져오기 경로로 병합
- 파이프라인 성공 시 병합 취소
- 병합 요청에 대한 코멘트
- 병합 시 닫히는 이슈 목록
- 병합 요청 구독
- 병합 요청 구독 취소
- 할 일 항목 생성
- 병합 요청(diff) 버전 가져오기
- 단일 병합 요청(diff) 버전 가져오기
- 병합 요청에 대한 시간 추정 설정
- 병합 요청에 대한 시간 추정 재설정
- 병합 요청에 대한 소요 시간 추가
- 병합 요청에 대한 소요된 시간 재설정
- 시간 추적 통계 가져오기
- 승인
- 병합 요청 상태 이벤트 목록
- 문제 해결
병합 요청 API
세부 정보: Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
-
reference
는 GitLab 12.7에서 deprecated되었습니다. -
draft
는 GitLab 14.0에서work_in_progress
를 대체하기 위해 introduced되었습니다. -
merged_by
는 GitLab 14.7에서 deprecated되었습니다. -
merge_user
는 GitLab 14.7에서merged_by
의 최종 대체품으로 introduced되었습니다. -
merge_status
는 GitLab 15.6에서detailed_merge_status
를 선호하는 대신 deprecated되었습니다. -
with_merge_status_recheck
는 GitLab 15.11에서 변경되었습니다. 여부 “restrict_merge_status_recheck”라는 플래그로 사용자의 권한이 충분하지 않은 요청에서 무시되도록 설정됩니다. 기본적으로 비활성화됩니다. -
approvals_before_merge
는 GitLab 16.0에서 deprecated되었습니다. -
prepared_at
은 GitLab 16.1에서 introduced되었습니다.
API 호출에는 인증이 필요합니다.
API v5에서의 제거 사항
approvals_before_merge
속성은 폐기되었으며 API v5에서 병합 요청 승인 API를 대신 사용할 예정입니다.
병합 요청 목록
인증 사용자가 액세스할 수있는 모든 병합 요청을 가져옵니다. 기본적으로 현재 사용자가 생성 한 병합 요청 만 반환합니다. 모든 병합 요청을 가져 오려면 scope = all
매개 변수를 사용하십시오.
state
매개 변수는 지정된 상태 ( opened
, closed
, locked
, 또는 merged
) 또는 모든 상태 (all
)로 지정된 병합 요청 만 가져 오는 데 사용할 수 있습니다.
잠겨 있음
으로 검색 할 때 대부분의 경우 결과가 거의 나오지 않습니다. 이것은 일시적 인 전환 상태 이기 때문입니다. 페이지 네이션 매개 변수 page
및 per_page
를 사용하여 병합 요청 목록을 제한할 수 있습니다.
GET /merge_requests
GET /merge_requests?state=opened
GET /merge_requests?state=all
GET /merge_requests?milestone=release
GET /merge_requests?labels=bug,reproduced
GET /merge_requests?author_id=5
GET /merge_requests?author_username=gitlab-bot
GET /merge_requests?my_reaction_emoji=star
GET /merge_requests?scope=assigned_to_me
GET /merge_requests?search=foo&in=title
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
approved_by_ids
| integer array | 아니요 | 주어진 id 를 가진 모든 사용자에 의해 승인 된 병합 요청을 반환합니다. 최대 5 개. None 은 승인이없는 병합 요청을 반환합니다. Any 은 승인이있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다.
|
approver_ids
| integer array | 아니요 | 지정된 모든 사용자에 의해 별도의 승인자로 지정된 병합 요청을 반환합니다. None 은 승인자가없는 병합 요청을 반환합니다. Any 는 승인자가있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다.
|
approved
| string | 아니요 |
approved 상태에 따라 병합 요청을 필터링합니다. yes 는 승인 된 병합 요청 만 반환합니다. no 는 승인되지 않은 병합 요청 만 반환합니다. GitLab 15.11에서 Introduced됩니다. 기능 플래그 mr_approved_filter 가 활성화 될 때만 사용 가능합니다.
|
assignee_id
| integer | 아니요 | 주어진 사용자 id 에 할당 된 병합 요청을 반환합니다. None 은 할당되지 않은 병합 요청을 반환합니다. Any 는 할당 된 병합 요청을 반환합니다.
|
author_id
| integer | 아니요 | 주어진 사용자 id 가 만든 병합 요청을 반환합니다. author_username 과 상호 배타적입니다. scope = all 이나 scope = assigned_to_me 과 결합합니다.
|
author_username
| string | 아니요 | 주어진 username 이 만든 병합 요청을 반환합니다. author_id 와 상호 배타적입니다.
|
created_after
| datetime | 아니요 | 주어진 시간 이후 또는 해당 시간에 만든 병합 요청을 반환합니다. ISO 8601 형식으로 예상됩니다 (2019-03-15T08:00:00Z ).
|
created_before
| datetime | 아니요 | 주어진 시간 이전 또는 해당 시간에 만든 병합 요청을 반환합니다. ISO 8601 형식으로 예상됩니다 (2019-03-15T08:00:00Z ).
|
deployed_after
| datetime | 아니요 | 주어진 날짜/시간 이후에 배포된 병합 요청을 반환합니다. ISO 8601 형식으로 예상됩니다 (2019-03-15T08:00:00Z ).
|
deployed_before
| datetime | 아니요 | 주어진 날짜/시간 이전에 배포된 병합 요청을 반환합니다. ISO 8601 형식으로 예상됩니다 (2019-03-15T08:00:00Z ).
|
environment
| string | 아니요 | 주어진 환경에 배포된 병합 요청을 반환합니다. |
in
| string | 아니요 |
search 속성의 범위를 수정합니다. title , description , 또는 쉼표로 구분하여 이어붙인 문자열입니다. 기본값은 title, description 입니다.
|
labels
| string | 아니요 | 쉼표로 구분 된 라벨 목록과 일치하는 병합 요청을 반환합니다. None 은 라벨이없는 모든 병합 요청을 나열합니다. Any 는 적어도 하나의 라벨이있는 모든 병합 요청을 나열합니다. 미리 정의된 이름은 대소 문자를 구분하지 않습니다.
|
merge_user_id
| integer | 아니요 | 주어진 사용자 id 에 의해 병합 된 병합 요청을 반환합니다. merge_user_username 과 상호 배타적입니다. GitLab 16.9에서 Introduced되었으며, 기능 플래그 mr_merge_user_filter 가 활성화 될 때만 사용 가능합니다.
|
merge_user_username
| string | 아니요 | 주어진 username 에 의해 병합 된 병합 요청을 반환합니다. merge_user_id 와 상호 배타적입니다. GitLab 16.9에서 Introduced되었으며, 기능 플래그 mr_merge_user_filter 가 활성화 될 때만 사용 가능합니다.
|
milestone
| string | 아니요 | 특정 마일스톤에 대한 병합 요청을 반환합니다. None 은 마일스톤이 없는 병합 요청을 반환합니다. Any 는 할당 된 마일스톤이있는 병합 요청을 반환합니다.
|
my_reaction_emoji
| string | 아니요 | 주어진 emoji 에 의해 인증 된 사용자에 의한 반응이있는 병합 요청을 반환합니다. None 은 반응이없는 문제를 반환합니다. Any 는 하나 이상의 반응이있는 문제를 반환합니다.
|
not
| Hash | 아니요 | 제공된 매개 변수와 일치하지 않는 병합 요청을 반환합니다. labels , milestone , author_id , author_username , assignee_id , assignee_username , reviewer_id , reviewer_username , my_reaction_emoji 를 수용합니다.
|
order_by
| string | 아니요 |
created_at , title , 또는 updated_at 필드로 정렬된 요구 사항을 반환합니다. 기본값은 created_at 입니다. GitLab 14.8에서 Introduced되었습니다.
|
reviewer_id
| integer | 아니요 | 주어진 사용자 id 가 리뷰어인 병합 요청을 반환합니다. None 은 리뷰어없는 병합 요청을 반환합니다. Any 는 리뷰어가있는 병합 요청을 반환합니다. reviewer_username 와 상호 배타적입니다.
|
reviewer_username
| string | 아니요 | 주어진 username 이 리뷰어인 병합 요청을 반환합니다. None 은 리뷰어가없는 병합 요청을 반환합니다. Any 는 리뷰어가있는 병합 요청을 반환합니다. reviewer_id 와 상호 배타적입니다.
|
scope
| string | 아니요 | 주어진 범위에 대한 병합 요청을 반환합니다: created_by_me , assigned_to_me 또는 모두입니다. 기본값은 created_by_me 입니다.
|
search
| string | 아니요 |
title 및 description 에 대한 병합 요청을 검색합니다.
|
sort
| string | 아니요 |
asc 또는 desc 순으로 정렬된 요청을 반환합니다. 기본값은 desc 입니다.
|
source_branch
| string | 아니요 | 주어진 소스 브랜치가있는 병합 요청을 반환합니다. |
state
| string | 아니요 | 모든 병합 요청 또는 opened , closed , locked , 또는 merged 중 해당되는 것만 반환합니다.
|
target_branch
| string | 아니요 | 주어진 대상 브랜치가있는 병합 요청을 반환합니다. |
updated_after
| datetime | 아니요 | 주어진 시간 이후 또는 해당 시간에 업데이트 된 병합 요청을 반환합니다. ISO 8601 형식으로 예상됩니다 (2019-03-15T08:00:00Z ).
|
updated_before
| datetime | 아니요 | 주어진 시간 이전 또는 해당 시간까지 업데이트 된 병합 요청을 반환합니다. ISO 8601 형식으로 예상됩니다 (2019-03-15T08:00:00Z ).
|
view
| string | 아니요 |
simple 이면 병합 요청의 iid , URL, 제목, 설명 및 기본 상태를 반환합니다.
|
with_labels_details
| boolean | 아니요 |
true 이면 응답은 라벨 필드의 각 라벨에 대해 자세한 정보를 반환합니다. :name , :color , :description , :description_html , :text_color . 기본값은 false 입니다.
|
with_merge_status_recheck
| boolean | 아니요 |
true 이면이 프로젝션은 merge_status 필드가 비동기적으로 재계산되도록 요청하지만 보장하지는 않습니다. 기본값은 false 입니다. GitLab 15.11 이상에서 이 속성을 요청한 사용자가 적어도 Developer 역할을 가진 사용자에서는 요청 시 무시하도록하려면이 속성을 무시하도록하려면 기능 flag restrict_merge_status_recheck 를 활성화하십시오.
|
wip
| string | 아니요 |
wip 상태에 대한 병합 요청을 필터링합니다. yes 는 드래프트 병합 요청 만 반환하고 no 는 드래프트가 아닌 병합 요청을 반환합니다.
|
예시 응답:
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"merged_by": { // API v5에서 폐기될 예정이며 대신 `merge_user`를 사용하십시오.
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merge_user": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"prepared_at": "2018-09-04T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"
### 병합 요청 목록 응답 노트
- [GitLab 13.0](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/31890)에 소개된 내용으로, 병합 요청 목록을 가져오는 것은 `merge_status` (또한 `has_conflicts`에도 영향을 미침)을 미리 업데이트하지 않을 수 있습니다. 이는 비용이 많이 들 수 있는 작업이기 때문입니다. 이 엔드포인트에서 이러한 필드의 값을 필요로 하는 경우 쿼리에서 `with_merge_status_recheck` 매개변수를 `true`로 설정하세요.
- 병합 요청 객체 필드에 대한 노트는 [단일 병합 요청 응답 노트](#단일-병합-요청-응답-노트)를 참조하세요.
## 프로젝트 병합 요청 목록
이 프로젝트의 모든 병합 요청을 가져옵니다.
```plaintext
GET /projects/:id/merge_requests
GET /projects/:id/merge_requests?state=opened
GET /projects/:id/merge_requests?state=all
GET /projects/:id/merge_requests?iids[]=42&iids[]=43
GET /projects/:id/merge_requests?milestone=release
GET /projects/:id/merge_requests?labels=bug,reproduced
GET /projects/:id/merge_requests?my_reaction_emoji=star
지원되는 속성:
속성 | 타입 | 필수 | 설명 |
---|---|---|---|
id
| integer 또는 string | Yes | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-encoded path입니다. |
approved_by_ids
| integer 배열 | No | 주어진 id 를 가진 모든 사용자에 의해 승인된 병합 요청을 반환하며, 최대 5개까지 지정할 수 있습니다. None 은 승인이 없는 병합 요청을, Any 는 승인이 있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다.
|
approver_ids
| integer 배열 | No | 특정 id 를 가진 모든 사용자로 지정된 병합 요청을 반환합니다. None 은 승인자가 없는 병합 요청을, Any 는 승인자가 있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다.
|
approved
| string | No | 병합 요청을 approved 상태에 따라 필터링합니다. yes 는 승인된 병합 요청만을 반환하며, no 는 아직 승인되지 않은 병합 요청만을 반환합니다. GitLab 15.11에서 도입되었습니다. 기능 플래그 mr_approved_filter 가 활성화된 경우에만 사용 가능합니다.
|
assignee_id
| integer | No | 지정된 사용자 id 에 할당된 병합 요청을 반환합니다. None 은 할당되지 않은 병합 요청을, Any 는 할당된 병합 요청을 반환합니다.
|
author_id
| integer | No | 주어진 사용자 id 에 의해 생성된 병합 요청을 반환합니다. author_username 과 상호 배타적입니다.
|
author_username
| string | No | 주어진 username 에 의해 생성된 병합 요청을 반환합니다. author_id 와 상호 배타적입니다.
|
created_after
| datetime | No | 주어진 시간 이후에 생성된 병합 요청을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
created_before
| datetime | No | 주어진 시간 이전에 생성된 병합 요청을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
environment
| string | No | 주어진 환경에 배포된 병합 요청을 반환합니다. |
iids[]
| integer 배열 | No | 주어진 iid 를 가진 요청을 반환합니다.
|
labels
| string | No | 쉼표로 구분된 라벨 목록과 일치하는 병합 요청을 반환합니다. None 은 라벨이 없는 모든 병합 요청을, Any 는 하나 이상의 라벨이 있는 모든 병합 요청을 나열합니다. 사전에 정의된 이름들은 대소문자를 구분하지 않습니다.
|
merge_user_id
| integer | No | 주어진 사용자 id 에 의해 병합된 병합 요청을 반환합니다. merge_user_username 과 상호 배타적입니다. GitLab 16.9에서 도입되었습니다. 기능 플래그 mr_merge_user_filter 가 활성화된 경우에만 사용 가능합니다.
|
merge_user_username
| string | No | 주어진 username 에 의해 병합된 병합 요청을 반환합니다. merge_user_id 와 상호 배타적입니다. GitLab 16.9에서 도입되었습니다. 기능 플래그 mr_merge_user_filter 가 활성화된 경우에만 사용 가능합니다.
|
milestone
| string | No | 특정 마일스톤에 대한 병합 요청을 반환합니다. None 은 마일스톤이 없는 모든 병합 요청을, Any 는 할당된 마일스톤이 있는 모든 병합 요청을 반환합니다.
|
my_reaction_emoji
| string | No | 인증된 사용자에 의해 주어진 emoji 에 반응한 병합 요청을 반환합니다. None 은 반응이 없는 이슈를, Any 은 하나 이상의 반응이 있는 이슈를 반환합니다.
|
not
| Hash | No | 제공된 매개변수와 일치하지 않는 병합 요청을 반환합니다. labels , milestone , author_id , author_username , assignee_id , assignee_username , reviewer_id , reviewer_username , my_reaction_emoji 를 허용합니다.
|
order_by
| string | No |
created_at , title , 또는 updated_at 필드로 정렬된 요청을 반환합니다. 기본값은 created_at 입니다. GitLab 14.8에서 도입되었습니다.
|
reviewer_id
| integer | No | 주어진 사용자 id 를 리뷰어로 지정한 병합 요청을 반환합니다. None 은 리뷰어가 없는 병합 요청을, Any 는 리뷰어가 있는 병합 요청을 반환합니다. 상호 배타적으로 reviewer_username 과 사용됩니다.
|
reviewer_username
| string | No | 주어진 username 을 리뷰어로 지정한 병합 요청을 반환합니다. None 은 리뷰어가 없는 병합 요청을, Any 는 리뷰어가 있는 병합 요청을 반환합니다. 상호 배타적으로 reviewer_id 와 사용됩니다.
|
scope
| string | No | 주어진 범위에 대한 병합 요청을 반환합니다: created_by_me , assigned_to_me , 또는 all .
|
search
| string | No |
title 과 description 에 대한 병합 요청을 검색합니다.
|
sort
| string | No | 요청을 asc 또는 desc 순서대로 정렬하여 반환합니다. 기본값은 desc 입니다.
|
source_branch
| string | No | 주어진 소스 브랜치를 가진 병합 요청을 반환합니다. |
state
| string | No | 모든 병합 요청 (all ) 또는 opened , closed , locked , 또는 merged 중 해당하는 병합 요청을 반환합니다.
|
target_branch
| string | No | 주어진 대상 브랜치를 가진 병합 요청을 반환합니다. |
updated_after
| datetime | No | 주어진 시간 이후에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
updated_before
| datetime | No | 주어진 시간 이전에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
view
| string | No |
simple 일 때, 병합 요청의 iid , URL, 제목, 설명 및 기본 상태를 반환합니다.
|
wip
| string | No | 병합 요청의 wip 상태에 대해 필터링합니다. 초안 병합 요청을 만 반환하려면 yes 를, 비-초안 병합 요청을 반환하려면 no 를 사용합니다.
|
with_labels_details
| boolean | No | 여러 라벨링를 가진 응답을 반환할 경우 labels 필드의 각 라벨에 대한 자세한 정보를 반환합니다: :name , :color , :description , :description_html , :text_color . 기본값은 false 입니다.
|
with_merge_status_recheck
| boolean | No |
true 일 때, 이 프로젝션은 merge_status 필드가 비동기적으로 다시 계산되도록(보장되지는 않음) 요청합니다. 기본값은 false 입니다. GitLab 15.11 이후로, 적어도 개발자 역할을 가진 사용자가 아닌 경우에 이 속성이 요청될 때 이 속성을 무시하려면 기능 플래그restrict_merge_status_recheck 를 활성화하세요.
|
응답에는 다음과 같은 내용이 포함됩니다:
-
project_id
는 병합 요청이 속한 프로젝트의 ID를 나타냅니다.project_id
는 항상target_project_id
와 동일합니다. - 병합 요청 목록을 제한하기 위해 페이지네이션 매개변수
page
및per_page
를 사용하세요. - 병합 요청의 프로젝트 ID는 요청이 프로젝트에서 비롯되는지 또는 삽입되어 나온지에 따라 다릅니다.
- 동일한 프로젝트:
target_project_id
,project_id
, 그리고source_project_id
가 동일합니다. - 포크된 경우:
target_project_id
와project_id
는 동일하지만,source_project_id
는 포크 프로젝트의 ID입니다.
- 동일한 프로젝트:
예시 응답:
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"merged_by": { // 폐기되었으며 API v5에서 제거될 예정입니다. 대신 `merge_user`를 사용하세요
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merge_user": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"prepared_at": "2018-09-04T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignee": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
"reviewers": [{
"id": 2,
"name": "Sam Bauch",
"username": "kenyatta_oconnell",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon",
"web_url": "http://gitlab.example.com//kenyatta_oconnell"
}],
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
"draft": false,
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 3,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my
## 그룹 병합 요청 목록
이 그룹과 하위 그룹의 모든 병합 요청을 가져옵니다.
```plaintext
GET /groups/:id/merge_requests
GET /groups/:id/merge_requests?state=opened
GET /groups/:id/merge_requests?state=all
GET /groups/:id/merge_requests?milestone=release
GET /groups/:id/merge_requests?labels=bug,reproduced
GET /groups/:id/merge_requests?my_reaction_emoji=star
지원되는 속성:
| 속성 | 유형 | 필수여부 | 설명 |
| —————————– | —————- | ——– | —– |
| id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 그룹의 ID 또는 URL 인코딩된 경로. |
| approved_by_ids
| 정수 배열 | 아니오 | 지정된 id
를 가진 모든 사용자에 의해 승인된 병합 요청을 최대 5개 반환합니다. None
은 승인이 없는 병합 요청을 반환합니다. Any
는 승인이있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다. |
| approved_by_usernames
| 문자열 배열 | 아니오 | 지정된 username
을 가진 모든 사용자에 의해 승인된 병합 요청을 최대 5개 반환합니다. None
은 승인이 없는 병합 요청을 반환합니다. Any
는 승인이있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다. |
| approver_ids
| 정수 배열 | 아니오 | 지정된 id
를 가진 모든 사용자를 개별 승인자로 지정한 병합 요청을 반환합니다. None
은 승인자가없는 병합 요청을 반환합니다. Any
는 승인자가있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다. |
| approved
| 문자열 | 아니오 | 병합 요청을 approved
상태로 필터링합니다. yes
는 승인된 병합 요청 만 반환합니다. no
는 미승인된 병합 요청 만 반환합니다. GitLab 15.11에서 도입되었습니다. 기능 플래그 mr_approved_filter
가 활성화된 경우에만 사용할 수 있습니다. |
| assignee_id
| 정수 | 아니오 | 지정된 사용자 id
에 할당된 병합 요청을 반환합니다. None
은 미할당된 병합 요청을 반환합니다. Any
은 담당자가있는 병합 요청을 반환합니다. |
| author_id
| 정수 | 아니오 | 지정된 사용자 id
가 만든 병합 요청을 반환합니다. author_username
과 상호 배타적입니다. |
| author_username
| 문자열 | 아니오 | 지정된 username
이 만든 병합 요청을 반환합니다. author_id
와 상호 배타적입니다. |
| created_after
| 날짜시간 | 아니오 | 지정된 시간 이후에 만들어진 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z
)으로 입력합니다. |
| created_before
| 날짜시간 | 아니오 | 지정된 시간 이전에 만들어진 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z
)으로 입력합니다. |
| labels
| 문자열 | 아니오 | 쉼표로 구분된 레이블 목록과 일치하는 병합 요청을 반환합니다. None
은 레이블이 없는 모든 병합 요청을 나열합니다. Any
는 적어도 하나의 레이블이있는 모든 병합 요청을 나열합니다. 사전 정의된 이름은 대소문자를 구분하지 않습니다. |
컨텐츠를 더 보려면 아래 내용을 확인하세요.
단일 MR 가져오기
단일 병합 요청에 대한 정보를 표시합니다.
GET /projects/:id/merge_requests/:merge_request_iid
지원되는 속성:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
include_diverged_commits_count
| 부울 | 아니오 |
true 이면 응답에 대상 브랜치 뒤의 커밋이 포함됩니다.
|
include_rebase_in_progress
| 부울 | 아니오 |
true 이면 리베이스 작업이 진행 중인지에 대한 응답이 포함됩니다.
|
render_html
| 부울 | 아니오 |
true 이면 제목 및 설명의 렌더링된 HTML이 응답에 포함됩니다.
|
응답
속성 | 유형 | 설명 |
---|---|---|
approvals_before_merge
| 정수 | 병합 요청이 병합될 수 있기 전에 필요한 승인 수입니다. 승인 규칙을 구성하려면 병합 요청 승인 API를 참조하십시오. GitLab 16.0에서 Deprecated. 프리미엄 및 얼티밋 전용. |
assignee
| 객체 | 병합 요청의 첫 번째 담당자입니다. |
assignees
| 배열 | 병합 요청의 담당자들입니다. |
author
| 객체 | 이 병합 요청을 만든 사용자입니다. |
blocking_discussions_resolved
| 부울 | 모든 토의가 해결되었는지 여부를 나타냅니다. 모두가 병합 요청이 병합되기 전에 필요한 경우에만 해당됩니다. |
changes_count
| 문자열 | 병합 요청에서 수행된 변경 수입니다. 병합 요청이 생성될 때는 비어 있으며, 비동기적으로 채워집니다. 너무 많은 변경이 있어 표시하고 저장할 수 없을 때 값은 1000으로 제한되어 "1000+" 문자열을 반환합니다. 새 병합 요청을 위한 빈 API 필드를 참조하십시오.
|
closed_at
| 날짜 및 시간 | 병합 요청이 닫힌 시간입니다. |
closed_by
| 객체 | 이 병합 요청을 닫은 사용자입니다. |
created_at
| 날짜 및 시간 | 병합 요청이 생성된 시간입니다. |
description
| 문자열 | 병합 요청의 설명입니다. 캐싱을 위해 렌더링된 마크다운이 포함됩니다. |
detailed_merge_status
| 문자열 | 병합 요청의 상세한 병합 상태입니다. 가능한 값은 병합 상태를 참조하십시오. |
diff_refs
| 객체 | 이 병합 요청의 베이스 SHA, 헤드 SHA 및 시작 SHA에 대한 참조입니다. 병합 요청이 생성될 때는 비어 있으며, 비동기적으로 채워집니다. 새 병합 요청을 위한 빈 API 필드를 참조하십시오. |
discussion_locked
| 부울 | 병합 요청의 코멘트가 멤버만 사용할 수 있는지 여부를 나타냅니다. |
downvotes
| 정수 | 병합 요청에 대한 반대 투표 수입니다. |
draft
| 부울 | 병합 요청이 초안(Draft)인지 여부를 나타냅니다. |
first_contribution
| 부울 | 병합 요청이 작성자의 첫 번째 기여인지 여부를 나타냅니다. |
first_deployed_to_production_at
| 날짜 및 시간 | 처음 배포가 완료된 시간입니다. |
force_remove_source_branch
| 부울 | 프로젝트 설정이 병합 후 소스 브랜치 삭제로 이어지는지 여부를 나타냅니다. |
has_conflicts
| 부울 | 병합 요청에 충돌이 있는지 여부를 나타냅니다. merge_status 속성에 따라 달라집니다. merge_status 가 cannot_be_merged 인 경우에만 false 을 반환합니다.
|
head_pipeline
| 객체 | 병합 요청의 HEAD 브랜치에서 실행되는 파이프라인입니다. pipeline 보다 더 완전한 정보를 포함하며 pipeline 대신 사용해야 합니다.
|
id
| 정수 | 병합 요청의 ID입니다. |
iid
| 정수 | 병합 요청의 내부 ID입니다. |
labels
| 배열 | 병합 요청의 라벨입니다. |
latest_build_finished_at
| 날짜 및 시간 | 병합 요청에 대한 최신 빌드가 종료된 시간입니다. |
latest_build_started_at
| 날짜 및 시간 | 병합 요청에 대한 최신 빌드가 시작된 시간입니다. |
merge_commit_sha
| 문자열 | 병합 요청 커밋의 SHA입니다. 병합되기 전까지는 null 을 반환합니다.
|
merge_error
| 문자열 | 병합에 실패했을 때 표시되는 오류 메시지입니다. 병합 가능성을 확인하려면 대신 detailed_merge_status 를 사용하십시오.
|
merge_user
| 객체 | 이 병합 요청을 병합한 사용자, 자동 병합으로 설정한 사용자 또는 null 입니다. GitLab 14.7에서 Introduced.
|
merge_status
| 문자열 | 병합 요청의 상태입니다. unchecked , checking , can_be_merged , cannot_be_merged , 또는 cannot_be_merged_recheck 일 수 있습니다. has_conflicts 속성에 영향을 미칩니다. 응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고 사항을 참조하십시오. GitLab 15.6에서 Deprecated. 대신 detailed_merge_status 를 사용하십시오.
|
merge_when_pipeline_succeeds
| 부울 | 파이프라인이 성공한 경우 병합이 설정되었는지 여부를 나타냅니다. |
merged_at
| 날짜 및 시간 | 병합 요청이 병합된 시간입니다. |
merged_by
| 객체 | 이 병합 요청을 병합한 사용자 또는 자동으로 병합으로 설정한 사용자입니다. GitLab 14.7에서 Deprecated되었으며 API 버전 5에서 제거 예정입니다. 대신 merge_user 를 사용하십시오.
|
milestone
| 객체 | 병합 요청의 마일스톤입니다. |
pipeline
| 객체 | 병합 요청의 HEAD 브랜치에서 실행되는 파이프라인입니다. 더 많은 정보를 포함하므로 대신 head_pipeline 를 사용해야 합니다.
|
prepared_at
| 날짜 및 시간 | 병합 요청이 준비된 시간입니다. 이 필드는 준비 단계가 모두 완료된 후에 한 번만 채워지며, 더 많은 변경 사항이 추가되면 업데이트되지 않습니다. |
project_id
| 정수 | 병합 요청 프로젝트의 ID입니다. |
reference
| 문자열 | 병합 요청의 내부 참조입니다. 기본값으로 압축된 형식으로 반환됩니다. GitLab 12.7에서 Deprecated되었으며 API 버전 5에서 제거 예정입니다. 대신 references 를 사용하십시오.
|
references
| 객체 | 병합 요청의 내부 참조입니다. short , relative , full 참조를 포함합니다. references.relative 은 병합 요청의 그룹 또는 프로젝트에 대한 상대적인 값입니다. 병합 요청 프로젝트에서 가져올 때, relative 및 short 형식은 동일합니다. 그룹이나 프로젝트에서 요청할 때는 relative 및 full 형식이 동일합니다.
|
reviewers
| 배열 | 병합 요청의 리뷰어입니다. |
sha
| 문자열 | 병합 요청의 Diff HEAD SHA입니다. |
should_remove_source_branch
| 부울 | 병합 요청의 소스 브랜치를 병합 후 삭제해야 하는지 여부를 나타냅니다. |
source_branch
| 문자열 | 병합 요청의 소스 브랜치입니다. |
source_project_id
| 정수 | 병합 요청 소스 프로젝트의 ID입니다. |
squash
| 부울 | 병합 시 스쿼시가 활성화되어 있는지 여부를 나타냅니다. |
squash_commit_sha
| 문자열 | 스쿼시 커밋의 SHA입니다. 병합되기 전까지는 비어 있습니다. |
state
| 문자열 | 병합 요청의 상태입니다. opened , closed , merged , 또는 locked 일 수 있습니다.
|
subscribed
| 부울 | 현재 인증된 사용자가 이 병합 요청에 구독되어 있는지 여부를 나타냅니다. |
target_branch
| 문자열 | 병합 요청의 대상 브랜치입니다. |
target_project_id
| 정수 | 병합 요청 대상 프로젝트의 ID입니다. |
task_completion_status
| 객체 | 작업 완료 상태입니다. |
title
| 문자열 | 병합 요청의 제목입니다. |
updated_at
| 날짜 및 시간 | 병합 요청이 업데이트된 시간입니다. |
upvotes
| 정수 | 병합 요청에 대한 추천 투표 수입니다. |
user
| 객체 | 병합 요청을 위해 요청된 사용자의 권한입니다. |
user_notes_count
| 정수 | 병합 요청에 대한 사용자 노트 수입니다. |
web_url
| 문자열 | 병합 요청의 웹 URL입니다. |
work_in_progress
| 부울 | Deprecated: 대신 draft 를 사용하십시오. 병합 요청이 초안(Draft)인지 여부를 나타냅니다.
|
예시 응답:
{
"id": 155016530,
"iid": 133,
"project_id": 15513260,
"title": "수동 작업 규칙",
"description": "",
"state": "opened",
"created_at": "2022-05-13T07:26:38.402Z",
"updated_at": "2022-05-14T03:38:31.354Z",
"merged_by": null, // Deprecated and will be removed in API v5. Use `merge_user` instead.
"merge_user": null,
"merged_at": null,
"prepared_at": "2018-09-04T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"target_branch": "main",
"source_branch": "manual-job-rules",
"user_notes_count": 0,
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 4155490,
"username": "marcel.amirault",
"name": "Marcel Amirault",
"state": "active",
"avatar_url": "https://gitlab.com/uploads/-/system/user/avatar/4155490/avatar.png",
"web_url": "https://gitlab.com/marcel.amirault"
},
"assignees": [],
"assignee": null,
"reviewers": [],
"source_project_id": 15513260,
"target_project_id": 15513260,
"labels": [],
"draft": false,
"work_in_progress": false,
"milestone": null,
"merge_when_pipeline_succeeds": false,
"merge_status": "can_be_merged",
"detailed_merge_status": "can_be_merged",
"sha": "e82eb4a098e32c796079ca3915e07487fc4db24c",
"merge_commit_sha": null,
"squash_commit_sha": null,
"discussion_locked": null,
"should_remove_source_branch": null,
"force_remove_source_branch": true,
"reference": "!133", // Deprecated. Use `references` instead.
"references": {
"short": "!133",
"relative": "!133",
"full": "marcel.amirault/test-project!133"
},
"web_url": "https://gitlab.com/marcel.amirault/test-project/-/merge_requests/133",
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"squash": false,
"task_completion_status": {
"count": 0,
"completed_count": 0
},
"has_conflicts": false,
"blocking_discussions_resolved": true,
"approvals_before_merge": null, // deprecated, use [Merge request approvals API](merge_request_approvals.md)
"subscribed": true,
"changes_count": "1",
"latest_build_started_at": "2022-05-13T09:46:50.032Z",
"latest_build_finished_at": null,
"first_deployed_to_production_at": null,
"pipeline": { // Use `head_pipeline` instead.
"id": 538317940,
"iid": 1877,
"project_id": 15513260,
"sha": "1604b0c46c395822e4e9478777f
### 단일 병합 요청 응답 노트
이 API 엔드포인트에 요청을 보낼 때, 각 병합 요청의 병합 가능성(`merge_status`)은 비동기적으로 확인됩니다. 업데이트된 상태를 얻으려면 이 API 엔드포인트를 폴링하세요. 이는 `merge_status`에 의존하는 `has_conflicts` 속성에 영향을 줍니다. `merge_status`가 `cannot_be_merged`인 경우를 제외하고는 `false`를 반환합니다.
### 병합 상태
> - `merge_status` 필드는 GitLab 15.6에서 [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/3169#note_1162532204)되었습니다.
> - `detailed_merge_status` 필드는 GitLab 15.6에서 [소개](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/101724)되었습니다.
모든 잠재적 상태를 고려하려면 `merge_status` 대신 `detailed_merge_status`를 사용하세요.
- `detailed_merge_status` 필드에는 병합 요청과 관련된 다음 값 중 하나가 포함될 수 있습니다:
- `blocked_status`: 다른 병합 요청에 의해 차단됨.
- `broken_status`: 잠재적 충돌로 대상 브랜치에 병합할 수 없음.
- `checking`: 유효한 병합이 가능한지 Git이 테스트 중.
- `unchecked`: 유효한 병합이 가능한지 Git이 아직 테스트하지 않음.
- `ci_must_pass`: 병합 전에 CI/CD 파이프라인이 성공해야 함.
- `ci_still_running`: CI/CD 파이프라인이 아직 실행 중.
- `discussions_not_resolved`: 병합 전에 모든 토론을 해결해야 함.
- `draft_status`: 병합 요청이 초안이므로 병합할 수 없음.
- `external_status_checks`: 병합 전에 모든 상태 확인을 통과해야 함.
- `mergeable`: 브랜치가 대상 브랜치에 깨끗하게 병합 가능함.
- `not_approved`: 병합 전에 승인이 필요함.
- `not_open`: 병합 전에 병합 요청이 열려 있어야 함.
- `jira_association_missing`: 제목 또는 설명이 Jira 이슈를 참조해야 함.
### 준비 단계
`prepared_at` 필드는 모든 준비 단계가 완료된 후에만 한 번만 채워집니다. 추가 변경 사항이 병합 요청에 추가되더라도 업데이트되지 않습니다:
- 차이가 생성됨.
- 파이프라인이 생성됨.
- 병합 가능성이 확인됨.
- Git LFS 객체가 연결됨.
- 알림이 전송됨.
## 단일 병합 요청 참가자 가져오기
병합 요청 참가자 목록을 가져옵니다.
```plaintext
GET /projects/:id/merge_requests/:merge_request_iid/participants
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
예시 응답:
[
{
"id": 1,
"name": "John Doe1",
"username": "user1",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
"web_url": "http://localhost/user1"
},
{
"id": 2,
"name": "John Doe2",
"username": "user2",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80&d=identicon",
"web_url": "http://localhost/user2"
}
]
단일 병합 요청 리뷰어 가져오기
병합 요청 리뷰어 목록을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/reviewers
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
예시 응답:
[
{
"user": {
"id": 1,
"name": "John Doe1",
"username": "user1",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
"web_url": "http://localhost/user1"
},
"state": "unreviewed",
"created_at": "2022-07-27T17:03:27.684Z"
},
{
"user": {
"id": 2,
"name": "John Doe2",
"username": "user2",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80&d=identicon",
"web_url": "http://localhost/user2"
},
"state": "reviewed",
"created_at": "2022-07-27T17:03:27.684Z"
}
]
단일 병합 요청 커밋 가져오기
병합 요청 커밋 목록을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/commits
지원되는 속성:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
예시 응답:
[
{
"id": "ed899a2f4b50b4370feeea94676502b42383c746",
"short_id": "ed899a2f4b5",
"title": "한 번에 새 문자로 대체",
"author_name": "예시 사용자",
"author_email": "user@example.com",
"created_at": "2012-09-20T11:50:22+03:00",
"message": "한 번에 새 문자로 대체"
},
{
"id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
"short_id": "6104942438c",
"title": "네트워크 그래프용 살균",
"author_name": "예시 사용자",
"author_email": "user@example.com",
"created_at": "2012-09-20T09:06:12+03:00",
"message": "네트워크 그래프용 살균"
}
]
단일 병합 요청 변경 내용 가져오기
경고: 이 엔드포인트는 GitLab 15.7에서 폐기 예정되었으며 API v5에서 삭제 예정입니다. 대신 병합 요청 차이 목록 엔드포인트를 사용하십시오.
파일과 변경 사항을 포함한 병합 요청의 정보를 표시합니다.
GET /projects/:id/merge_requests/:merge_request_iid/changes
지원되는 속성:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
access_raw_diffs
| 부울 | 아니요 | Gitaly를 통해 변경 사이의 차이를 검색합니다. |
unidiff
| 부울 | 아니요 | 변경 사이의 차이를 단일한 형식으로 표시합니다. 기본값은 false입니다. GitLab 16.5에서 도입됨. |
이 변경 집합과 관련된 차이에는 API나 UI를 통해 반환되는 다른 차이와 동일한 크기 제한이 적용됩니다. 이러한 제한이 결과에 영향을 미치는 경우 overflow
필드에 true
값이 포함됩니다. 데이터베이스가 아닌 Gitaly에서 직접 차이를 가져오는 access_raw_diffs
매개변수를 추가하여 이러한 제한이 적용되지 않는 차이를 검색할 수 있습니다. 이 접근 방식은 일반적으로 느리고 더 많은 리소스를 사용하지만 데이터베이스를 통해 제한된 크기의 차이에 영향을 받지 않습니다. Gitaly에 내재된 제한은 여전히 적용됩니다.
예시 응답:
{
"id": 21,
"iid": 1,
"project_id": 4,
"title": "Blanditiis beatae suscipit hic assumenda et molestias nisi asperiores repellat et.",
"state": "reopened",
"created_at": "2015-02-02T19:49:39.159Z",
"updated_at": "2015-02-02T20:08:49.959Z",
"target_branch": "secret_token",
"source_branch": "version-1-9",
"upvotes": 0,
"downvotes": 0,
"author": {
"name": "Chad Hamill",
"username": "jarrett",
"id": 5,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/b95567800f828948baf5f4160ebb2473?s=40&d=identicon",
"web_url" : "https://gitlab.example.com/jarrett"
},
...
}
병합 요청 차이점 목록
generated_file
은 GitLab 16.9에서collapse_generated_diff_files
라는 플래그로 도입되었으며, 기본적으로 비활성화됩니다.- GitLab 16.10에서 GitLab.com 및 자체 관리에서 활성화됩니다.
병합 요청에서 변경된 파일의 차이를 나열합니다.
GET /projects/:id/merge_requests/:merge_request_iid/diffs
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
page
| 정수 | 아니오 | 반환할 결과의 페이지. 기본값은 1입니다. |
per_page
| 정수 | 아니오 | 페이지당 결과 수. 기본값은 20입니다. |
unidiff
| 부울 | 아니오 | 통합된 차이 형식으로 차이를 나타냅니다. 기본값은 false입니다. GitLab 16.5에서 도입되었습니다. |
성공할 경우, 200 OK
와 다음과 같은 응답 속성을 반환합니다:
속성 | 유형 | 설명 |
---|---|---|
old_path
| 문자열 | 파일의 이전 경로. |
new_path
| 문자열 | 파일의 새 경로. |
a_mode
| 문자열 | 파일의 이전 모드. |
b_mode
| 문자열 | 파일의 새 모드. |
diff
| 문자열 | 파일에 대한 변경 내용의 차이 표현. |
new_file
| 부울 | 파일이 방금 추가되었는지를 나타냅니다. |
renamed_file
| 부울 | 파일이 이름이 변경되었는지를 나타냅니다. |
deleted_file
| 부울 | 파일이 제거되었는지를 나타냅니다. |
generated_file
| 부울 | 파일이 생성된 것으로 표시되었는지를 나타냅니다. GitLab 16.9에서 도입되었습니다. |
예시 요청:
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/diffs?page=1&per_page=2"
예시 응답:
[
{
"old_path": "README",
"new_path": "README",
"a_mode": "100644",
"b_mode": "100644",
"diff": "@@ -1 +1 @@\ -Title\ +README",
"new_file": false,
"renamed_file": false,
"deleted_file": false,
"generated_file": false
},
{
"old_path": "VERSION",
"new_path": "VERSION",
"a_mode": "100644",
"b_mode": "100644",
"diff": "@@\ -1.9.7\ +1.9.8",
"new_file": false,
"renamed_file": false,
"deleted_file": false,
"generated_file": false
}
]
참고: 이 엔드포인트는 병합 요청 차이 한도의 영향을 받습니다. 차이 한도를 초과하는 병합 요청은 제한된 결과를 반환합니다.
병합 요청 파이프라인 목록
병합 요청 파이프라인의 목록을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/pipelines
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
페이지네이션 매개변수 page
및 per_page
를 사용하여 병합 요청 파이프라인 목록을 제한할 수 있습니다.
예시 응답:
[
{
"id": 77,
"sha": "959e04d7c7a30600c894bd3c0cd0e1ce7f42c11d",
"ref": "main",
"status": "success"
}
]
병합 요청 파이프라인 생성
새로운 병합 요청을 위한 파이프라인을 생성하세요.
이 엔드포인트에서 생성된 파이프라인은 일반 브랜치/태그 파이프라인을 실행하지 않습니다.
작업을 만들려면 .gitlab-ci.yml
을 only: [merge_requests]
로 구성해야 합니다.
새로운 파이프라인은 다음과 같을 수 있습니다:
- 분리된 병합 요청 파이프라인.
-
병합된 결과 파이프라인,
프로젝트 설정이 활성화되어 있는 경우.
POST /projects/:id/merge_requests/:merge_request_iid/pipelines
지원되는 속성:
속성 | 타입 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩 된 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
예시 응답:
{
"id": 2,
"sha": "b83d6e391c22777fca1ed3012fce84f633d7fed0",
"ref": "refs/merge-requests/1/head",
"status": "pending",
"web_url": "http://localhost/user1/project1/pipelines/2",
"before_sha": "0000000000000000000000000000000000000000",
"tag": false,
"yaml_errors": null,
"user": {
"id": 1,
"name": "John Doe1",
"username": "user1",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
"web_url": "http://example.com"
},
"created_at": "2019-09-04T19:20:18.267Z",
"updated_at": "2019-09-04T19:20:18.459Z",
"started_at": null,
"finished_at": null,
"committed_at": null,
"duration": null,
"coverage": null,
"detailed_status": {
"icon": "status_pending",
"text": "pending",
"label": "pending",
"group": "pending",
"tooltip": "pending",
"has_details": false,
"details_path": "/user1/project1/pipelines/2",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png"
}
}
병합 요청 생성
새로운 병합 요청을 생성합니다.
POST /projects/:id/merge_requests
속성 | 타입 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
source_branch
| 문자열 | 예 | 소스 브랜치입니다. |
target_branch
| 문자열 | 예 | 대상 브랜치입니다. |
title
| 문자열 | 예 | 병합 요청의 제목입니다. |
allow_collaboration
| 부울 | 아니요 | 대상 브랜치로 병합할 수 있는 멤버의 커밋을 허용합니다. |
approvals_before_merge
| 정수 | 아니요 | 병합하기 전에 필요한 승인 수입니다 (아래 참조). 승인 규칙을 설정하려면 병합 요청 승인 API를 참조하세요. GitLab 16.0 이상에서는 사용이 중단되었습니다. 프리미엄 및 얼티밋 전용입니다. |
allow_maintainer_to_push
| 부울 | 아니요 |
allow_collaboration 의 별칭입니다.
|
assignee_id
| 정수 | 아니요 | 담당자 사용자 ID입니다. |
assignee_ids
| 정수 배열 | 아니요 | 병합 요청을 할당할 사용자의 ID입니다. 모든 담당자를 할당해제하려면 0 을 설정하거나 빈 값을 제공하세요.
|
description
| 문자열 | 아니요 | 병합 요청에 대한 설명입니다. 1,048,576자로 제한됩니다. |
labels
| 문자열 | 아니요 | 병합 요청에 대한 라벨 목록입니다(쉼표로 구분). |
milestone_id
| 정수 | 아니요 | 마일스톤의 글로벌 ID입니다. |
remove_source_branch
| 부울 | 아니요 | 병합 시에 소스 브랜치를 제거해야 하는지 여부를 나타내는 플래그입니다. |
reviewer_ids
| 정수 배열 | 아니요 | 병합 요청에 리뷰어로 추가된 사용자의 ID입니다. 0 으로 설정하거나 비워두면 리뷰어가 추가되지 않습니다.
|
squash
| 부울 | 아니요 | 병합 요청이 병합될 때 스쿼시되는지 여부를 나타냅니다. 프로젝트 설정이 이 값을 재정의할 수 있습니다. |
target_project_id
| 정수 | 아니요 | 대상 프로젝트의 숫자 ID입니다. |
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignee": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
"draft": false,
"work_in_progress": false,
...
// ... (중략)
...
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"squash": false,
"subscribed": false,
...
// ... (중략)
...
"task_completion_status":{
"count":0,
"completed_count":0
}
}
응답 데이터에 대한 중요한 노트는 단일 병합 요청 응답 노트를 참조하세요.
MR 업데이트
기존 병합 요청을 업데이트합니다. 대상 브랜치, 제목을 변경하거나 MR을 닫을 수 있습니다.
PUT /projects/:id/merge_requests/:merge_request_iid
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-encoded path |
merge_request_iid
| 정수 | 예 | 병합 요청의 ID |
add_labels
| 문자열 | 아니요 | 병합 요청에 추가할 쉼표로 구분된 라벨 이름 |
allow_collaboration
| 부울 | 아니요 | 대상 브랜치에 병합할 수 있는 멤버의 커밋을 허용합니다. |
allow_maintainer_to_push
| 부울 | 아니요 |
allow_collaboration 의 별칭입니다.
|
assignee_id
| 정수 | 아니요 | 병합 요청을 할당할 사용자의 ID. 모든 담당자를 해제하려면 0 으로 설정하거나 비어 있는 값을 제공하세요.
|
assignee_ids
| 정수 배열 | 아니요 | 병합 요청을 할당할 사용자들의 ID. 모든 담당자를 해제하려면 0 으로 설정하거나 비어 있는 값을 제공하세요.
|
description
| 문자열 | 아니요 | 병합 요청의 설명. 1,048,576자로 제한됩니다. |
discussion_locked
| 부울 | 아니요 | 병합 요청의 토론이 잠겨 있는지를 나타내는 플래그입니다. 토론이 잠기면 프로젝트 멤버만 주석을 추가, 편집 또는 해결할 수 있습니다. |
labels
| 문자열 | 아니요 | 병합 요청을 위한 쉼표로 구분된 라벨 이름. 모든 라벨을 해제하려면 빈 문자열로 설정하세요. |
milestone_id
| 정수 | 아니요 | 병합 요청에 할당할 마일스톤의 전역 ID. 마일스톤을 해제하려면 0 으로 설정하거나 비어 있는 값을 제공하세요.
|
remove_labels
| 문자열 | 아니요 | 병합 요청에서 제거할 쉼표로 구분된 라벨 이름 |
remove_source_branch
| 부울 | 아니요 | 병합 시 소스 브랜치를 제거해야 하는지를 나타내는 플래그 |
reviewer_ids
| 정수 배열 | 아니요 | 병합 요청에 리뷰어로 설정된 사용자의 ID. 모든 리뷰어를 해제하려면 값으로 0 을 설정하거나 비어 있는 값을 제공하세요.
|
squash
| 부울 | 아니요 | 병합 요청이 병합될 때 squash로 설정되었는지를 나타냅니다. 프로젝트 설정이 이 값을 재정의할 수 있습니다. |
state_event
| 문자열 | 아니요 | 새 상태 (close/reopen). |
target_branch
| 문자열 | 아니요 | 대상 브랜치 |
title
| 문자열 | 아니요 | MR의 제목 |
위에서 최소한 하나의 필수 속성을 포함해야 합니다.
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
...
}
응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고을 참조하세요.
병합 요청 삭제
관리자 및 프로젝트 소유자 전용입니다. 해당 병합 요청을 삭제합니다.
DELETE /projects/:id/merge_requests/:merge_request_iid
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
curl --request DELETE \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/4/merge_requests/85"
병합 요청 병합
이 API를 사용하여 병합 요청으로 제출된 변경 사항을 승인하고 병합합니다.
PUT /projects/:id/merge_requests/:merge_request_iid/merge
지원되는 속성:
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
merge_commit_message
| 문자열 | 아니오 | 사용자 정의 병합 커밋 메시지입니다. |
merge_when_pipeline_succeeds
| 부울 | 아니오 |
true 이면 파이프라인이 성공하면 병합 요청이 병합됩니다.
|
sha
| 문자열 | 아니오 | 존재하는 경우, 이 SHA는 병합할 소스 브랜치의 HEAD와 일치해야 하며, 그렇지 않으면 병합에 실패합니다. |
should_remove_source_branch
| 부울 | 아니오 |
true 이면 소스 브랜치가 제거됩니다.
|
squash_commit_message
| 문자열 | 아니오 | 사용자 정의 스쿼시 커밋 메시지입니다. |
squash
| 부울 | 아니오 |
true 이면 커밋이 병합될 때 단일 커밋으로 스쿼시됩니다.
|
이 API는 실패 시 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 코드 | 메시지 | 이유 |
---|---|---|
401
| 401 Unauthorized
| 사용자가이 병합 요청을 승인할 권한이 없습니다. |
405
| 405 Method Not Allowed
| 병합 요청을 병합할 수 없습니다. |
409
| SHA does not match HEAD of source branch
| 제공된 sha 매개변수가 소스의 HEAD와 일치하지 않습니다.
|
422
| Branch cannot be merged
| 병합하는 데 실패했습니다. |
응답 데이터에 대한 추가 중요한 참고 사항은 단일 병합 요청 응답 노트를 참조하십시오.
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
...
}
기본 병합 가져오기 경로로 병합
병합 요청 소스와 대상 브랜치 사이의 변경 사항을 대상 프로젝트 리포지토리의 refs/merge-requests/:iid/merge
참조에 가능한 경우 병합합니다. 이 참조는 일반적인 병합 작업이 수행된 경우 대상 브랜치의 상태를 가지고 있습니다.
이 작업은 정규 병합 작업이 아닙니다. 왜냐하면 병합 요청 대상 브랜치 상태를 어떠한 방식으로도 변경하지 않기 때문입니다.
이 참조(refs/merge-requests/:iid/merge
)는 이 API에 요청을 보낼 때 덮어써지지 않지만, 참조가 가능한 최신 상태를 가지도록 합니다.
GET /projects/:id/merge_requests/:merge_request_iid/merge_ref
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
이 API는 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 | 메시지 | 이유 |
---|---|---|
200
| (없음) | 성공. refs/merge-requests/:iid/merge 의 HEAD 커밋을 반환합니다.
|
400
| 병합 요청이 병합할 수 없습니다
| 병합 요청에 충돌이 있습니다. |
400
| 병합 참조를 업데이트할 수 없습니다
| |
400
| 지원되지 않는 작업
| GitLab 데이터베이스가 읽기 전용 모드에 있습니다. |
예시 응답:
{
"commit_id": "854a3a7a17acbcc0bbbea170986df1eb60435f34"
}
파이프라인 성공 시 병합 취소
POST /projects/:id/merge_requests/:merge_request_iid/cancel_merge_when_pipeline_succeeds
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
이 API는 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 | 메시지 | 이유 |
---|---|---|
201
| (없음) | 성공 또는 병합 요청이 이미 병합되었습니다. |
406
| 자동 병합을 취소할 수 없습니다
| 병합 요청이 닫혀 있습니다. |
응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고 사항을 참조하세요.
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description":"로그인 페이지 css padding 수정",
"state":"병합됨",
"created_at":"2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch":"main",
"source_branch": "test1",
"upvotes": 0,
...
}
## 병합 요청 다시베이스
병합 요청의 `source_branch`를 자동으로 해당 `target_branch`에 대해 다시베이스합니다.
```plaintext
PUT /projects/:id/merge_requests/:merge_request_iid/rebase
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
skip_ci
| 부울 | 아니오 | CI 파이프라인 생성을 건너뛰려면 true 로 설정합니다.
|
curl --request PUT \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/rebase"
이 API는 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 | 메시지 | 이유 |
---|---|---|
202
| (메시지 없음) | 성공적으로 대기 중입니다. |
403
| 소스 브랜치로 푸시할 수 없음
| 병합 요청의 소스 브랜치로 푸시할 권한이 없습니다. |
403
| 소스 브랜치가 존재하지 않음
| 병합 요청의 소스 브랜치로 푸시할 권한이 없습니다. |
403
| 소스 브랜치가 강제 푸시로부터 보호됨
| 병합 요청의 소스 브랜치로 푸시할 권한이 없습니다. |
409
| 다시베이스 작업 대기열에 실패함
| 장기간 실행되는 트랜잭션이 요청을 차단했을 수 있습니다. |
요청이 성공적으로 대기열에 들어가면 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": true
}
비동기 요청 상태를 확인하기 위해 include_rebase_in_progress
매개변수와 함께 단일 MR 가져오기 엔드포인트를 폴링할 수 있습니다.
다시베이스 작업이 진행 중인 경우, 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": true,
"merge_error": null
}
다시베이스 작업이 성공적으로 완료된 후에는 응답에 다음이 포함됩니다:
{
"rebase_in_progress": false,
"merge_error": null
}
다시베이스 작업이 실패하는 경우, 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": false,
"merge_error": "다시베이스 실패. 로컬에서 다시베이스하세요"
}
병합 요청에 대한 코멘트
코멘트는 노트(notes) 리소스에 의해 생성됩니다.
병합 시 닫히는 이슈 목록
제공된 병합 요청을 통해 닫히게 되는 모든 이슈를 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/closes_issues
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/closes_issues"
GitLab 이슈 트래커를 사용하는 경우의 예시 응답:
[
{
"state" : "opened",
"description" : "Ratione dolores corrupti mollitia soluta quia.",
"author" : {
"state" : "active",
"id" : 18,
"web_url" : "https://gitlab.example.com/eileen.lowe",
"name" : "Alexandra Bashirian",
"avatar_url" : null,
"username" : "eileen.lowe"
},
"milestone" : {
"project_id" : 1,
"description" : "Ducimus nam enim ex consequatur cumque ratione.",
"state" : "closed",
"due_date" : null,
"iid" : 2,
"created_at" : "2016-01-04T15:31:39.996Z",
"title" : "v4.0",
"id" : 17,
"updated_at" : "2016-01-04T15:31:39.996Z"
},
"project_id" : 1,
"assignee" : {
"state" : "active",
"id" : 1,
"name" : "Administrator",
"web_url" : "https://gitlab.example.com/root",
"avatar_url" : null,
"username" : "root"
},
"updated_at" : "2016-01-04T15:31:51.081Z",
"id" : 76,
"title" : "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
"created_at" : "2016-01-04T15:31:51.081Z",
"iid" : 6,
"labels" : [],
"user_notes_count": 1,
"changes_count": "1"
}
]
외부 이슈 트래커(예: Jira)를 사용하는 경우의 예시 응답:
[
{
"id" : "PROJECT-123",
"title" : "이 이슈의 제목"
}
]
병합 요청 구독
인증된 사용자를 병합 요청에 구독하여 알림을 받습니다.
POST /projects/:id/merge_requests/:merge_request_iid/subscribe
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
사용자가 이미 병합 요청에 구독되어 있는 경우, 상태 코드 HTTP 304 Not Modified
가 반환됩니다.
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/17/subscribe"
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "관리자",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignee": {
"id": 1,
"name": "관리자",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignees": [{
"name": "미스 몬세라트 바이어",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
"reviewers": [{
"name": "미스 몬세라트 바이어",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"커뮤니티 기여",
"관리"
],
"draft": false,
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 3,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
},
"merge_when_pipeline_succeeds": true,
"merge_status": "can_be_merged",
"detailed_merge_status": "not_open",
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
"squash_commit_sha": null,
"user_notes_count": 1,
"discussion_locked": null,
"should_remove_source_branch": true,
"force_remove_source_branch": false,
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
"references": {
"short": "!1",
"relative": "!1",
"full": "my-group/my-project!1"
},
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
"id": 87854,
"name": "되위 만",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merge_user": {
"id": 87854,
"name": "되위 만",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"prepared_at": "2018-09-04T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
"first_deployed_to_production_at": null,
"pipeline": {
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
},
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
},
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
}
응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 노트를 참조하세요.
병합 요청 구독 취소
인증된 사용자가 해당 병합 요청으로부터 알림을 받지 않도록 병합 요청에서 구독을 취소합니다.
POST /projects/:id/merge_requests/:merge_request_iid/unsubscribe
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/17/unsubscribe"
사용자가 병합 요청에 구독되어 있지 않은 경우, 상태 코드 HTTP 304 Not Modified
가 반환됩니다.
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
...
(중략)
...
"task_completion_status":{
"count":0,
"completed_count":0
}
}
응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고를 참조하세요.
할 일 항목 생성
현재 사용자에 대한 병합 요청에 대해 수동으로 할 일 항목을 생성합니다. 사용자의 경우 해당 병합 요청에 이미 할 일 항목이 있는 경우 HTTP 304 Not Modified
상태 코드가 반환됩니다.
POST /projects/:id/merge_requests/:merge_request_iid/todo
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/27/todo"
예시 응답:
{
"id": 113,
"project": {
"id": 3,
"name": "GitLab CI/CD",
"name_with_namespace": "GitLab Org / GitLab CI/CD",
"path": "gitlab-ci",
"path_with_namespace": "gitlab-org/gitlab-ci"
},
"author": {
"name": "Administrator",
"username": "root",
"id": 1,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"web_url": "https://gitlab.example.com/root"
},
"action_name": "marked",
"target_type": "MergeRequest",
"target": {
"id": 27,
"iid": 7,
"project_id": 3,
"title": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
"description": "Veniam sunt nihil modi earum cumque illum delectus. Nihil ad quis distinctio quia. Autem eligendi at quibusdam repellendus.",
"state": "merged",
"created_at": "2016-06-17T07:48:04.330Z",
"updated_at": "2016-07-01T11:14:15.537Z",
"target_branch": "allow_regex_for_project_skip_ref",
"source_branch": "backup",
"upvotes": 0,
"downvotes": 0,
"author": {
"name": "Jarret O'Keefe",
"username": "francisca",
"id": 14,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/a7fa515d53450023c83d62986d0658a8?s=80&d=identicon",
"web_url": "https://gitlab.example.com/francisca",
"discussion_locked": false
},
"assignee": {
"name": "Dr. Gabrielle Strosin",
"username": "barrett.krajcik",
"id": 4,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/733005fcd7e6df12d2d8580171ccb966?s=80&d=identicon",
"web_url": "https://gitlab.example.com/barrett.krajcik"
},
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
"reviewers": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
"source_project_id": 3,
"target_project_id": 3,
"labels": [],
"draft": false,
"work_in_progress": false,
"milestone": {
"id": 27,
"iid": 2,
"project_id": 3,
"title": "v1.0",
"description": "Quis ea accusantium animi hic fuga assumenda.",
"state": "active",
"created_at": "2016-06-17T07:47:33.840Z",
"updated_at": "2016-06-17T07:47:33.840Z",
"due_date": null
},
"merge_when_pipeline_succeeds": false,
"merge_status": "unchecked",
"detailed_merge_status": "not_open",
"subscribed": true,
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
"squash_commit_sha": null,
"user_notes_count": 7,
"changes_count": "1",
"should_remove_source_branch": true,
"force_remove_source_branch": false,
"squash": false,
"web_url": "http://example.com/my-group/my-project/merge_requests/1",
"references": {
"short": "!1",
"relative": "!1",
"full": "my-group/my-project!1"
}
},
"target_url": "https://gitlab.example.com/gitlab-org/gitlab-ci/merge_requests/7",
"body": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
"state": "pending",
"created_at": "2016-07-01T11:14:15.530Z"
}
병합 요청(diff) 버전 가져오기
병합 요청(diff) 버전의 목록을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/versions
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| String | 예 | 프로젝트의 ID. |
merge_request_iid
| integer | 예 | 병합 요청의 내부 ID. |
응답에서 SHA에 대한 설명은 API 응답의 SHA를 참조하세요.
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions"
응답 예시:
[{
"id": 110,
"head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"created_at": "2016-07-26T14:44:48.926Z",
"merge_request_id": 105,
"state": "collected",
"real_size": "1",
"patch_id_sha": "d504412d5b6e6739647e752aff8e468dde093f2f"
}, {
"id": 108,
"head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24",
"base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"created_at": "2016-07-25T14:21:33.028Z",
"merge_request_id": 105,
"state": "collected",
"real_size": "1",
"patch_id_sha": "72c30d1f0115fc1d2bb0b29b24dc2982cbcdfd32"
}]
API 응답의 SHA
SHA 필드 | 목적 |
---|---|
base_commit_sha
| 소스 브랜치와 대상 브랜치 사이의 병합 베이스 커밋 SHA. |
head_commit_sha
| 소스 브랜치의 최신 커밋. |
start_commit_sha
| 병합 요청(diff) 버전이 생성된 시점의 대상 브랜치의 최신 커밋 SHA. |
단일 병합 요청(diff) 버전 가져오기
단일 병합 요청(diff) 버전을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/versions/:version_id
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| String | 예 | 프로젝트의 ID. |
merge_request_iid
| integer | 예 | 병합 요청의 내부 ID. |
version_id
| integer | 예 | 병합 요청(diff) 버전의 ID. |
unidiff
| boolean | 아니요 | 통합된 diff 형식으로 diffs 표시. 기본값은 거짓입니다. GitLab 16.5에서 도입되었습니다. |
응답에서 SHA에 대한 설명은 API 응답의 SHA를 참조하세요.
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions/1"
응답 예시:
{
"id": 110,
"head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"created_at": "2016-07-26T14:44:48.926Z",
"merge_request_id": 105,
"state": "collected",
"real_size": "1",
"patch_id_sha": "d504412d5b6e6739647e752aff8e468dde093f2f",
"commits": [{
"id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"short_id": "33e2ee85",
"title": "Change year to 2018",
"author_name": "Administrator",
"author_email": "admin@example.com",
"created_at": "2016-07-26T17:44:29.000+03:00",
"message": "Change year to 2018"
}, {
"id": "aa24655de48b36335556ac8a3cd8bb521f977cbd",
"short_id": "aa24655d",
"title": "Update LICENSE",
"author_name": "Administrator",
"author_email": "admin@example.com",
"created_at": "2016-07-25T17:21:53.000+03:00",
"message": "Update LICENSE"
}, {
"id": "3eed087b29835c48015768f839d76e5ea8f07a24",
"short_id": "3eed087b",
"title": "Add license",
"author_name": "Administrator",
"author_email": "admin@example.com",
"created_at": "2016-07-25T17:21:20.000+03:00",
"message": "Add license"
}],
"diffs": [{
"old_path": "LICENSE",
"new_path": "LICENSE",
"a_mode": "0",
"b_mode": "100644",
"diff": "@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\nCopyright (c) 2018 Administrator\n+\nPermission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n",
"new_file": true,
"renamed_file": false,
"deleted_file": false
}]
}
병합 요청에 대한 시간 추정 설정
이 병합 요청에 대한 작업 예상 소요 시간을 설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/time_estimate
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
duration
| 문자열 | 예 |
3h30m 과 같은 인간이 읽을 수 있는 형식의 소요 시간입니다.
|
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_estimate?duration=3h30m"
예시 응답:
{
"human_time_estimate": "3시간 30분",
"human_total_time_spent": null,
"time_estimate": 12600,
"total_time_spent": 0
}
병합 요청에 대한 시간 추정 재설정
이 병합 요청에 대한 예상 시간을 0초로 재설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/reset_time_estimate
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 프로젝트의 병합 요청의 내부 ID입니다. |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_time_estimate"
예시 응답:
{
"human_time_estimate": null,
"human_total_time_spent": null,
"time_estimate": 0,
"total_time_spent": 0
}
병합 요청에 대한 소요 시간 추가
이 병합 요청에 소요된 시간을 추가합니다.
POST /projects/:id/merge_requests/:merge_request_iid/add_spent_time
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
duration
| 문자열 | 예 |
3h30m 과 같은 인간이 읽을 수 있는 형식의 소요 시간입니다.
|
summary
| 문자열 | 아니요 | 시간을 사용한 방식에 대한 요약입니다. |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/add_spent_time?duration=1h"
예시 응답:
{
"human_time_estimate": null,
"human_total_time_spent": "1시간",
"time_estimate": 0,
"total_time_spent": 3600
}
병합 요청에 대한 소요된 시간 재설정
이 병합 요청에 대해 총 소요된 시간을 0초로 재설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/reset_spent_time
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 프로젝트의 병합 요청의 내부 ID입니다. |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_spent_time"
예시 응답:
{
"human_time_estimate": null,
"human_total_time_spent": null,
"time_estimate": 0,
"total_time_spent": 0
}
시간 추적 통계 가져오기
GET /projects/:id/merge_requests/:merge_request_iid/time_stats
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID입니다. |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_stats"
예시 응답:
{
"human_time_estimate": "2시간",
"human_total_time_spent": "1시간",
"time_estimate": 7200,
"total_time_spent": 3600
}
승인
승인과 관련된 내용은 병합 요청 승인을 참조하세요.
병합 요청 상태 이벤트 목록
어떤 상태가 설정되었는지, 누가 설정했는지, 언제 일어났는지를 추적하려면 리소스 상태 이벤트 API를 확인하세요.
문제 해결
새 병합 요청의 빈 API 필드
병합 요청이 생성되면 diff_refs
및 changes_count
필드는
초기에 비어 있습니다. 이러한 필드는 병합 요청이 생성된 후 비동기적으로 채워집니다. 더 자세한 정보는 아래 링크를 참조하세요.
병합 요청 API 필드 중 일부(diff_refs
, changes_count
)가 MR 생성 후에 비어 있는 문제 및
GitLab 포럼의 관련 토론을 확인하세요.