- API v5에서의 제거사항
- 병합 요청 목록
- 프로젝트 병합 요청 목록
- 그룹 병합 요청 목록
- 단일 MR 가져오기
- 단일 병합 요청 리뷰어 가져오기
- 단일 병합 요청 커밋 가져오기
- 병합 요청 의존성 가져오기
- 병합 요청 종속성 삭제
- 병합 요청 종속성 생성
- 단일 병합 요청 변경 사항 가져오기
- 병합 요청 차이점 목록
- 병합 요청 파이프라인 목록
- 병합 요청 파이프라인 생성
- MR 생성
- MR 업데이트
- 병합 요청 삭제
- 병합 요청 병합
- 기본 병합 참조 경로로 병합
- 파이프라인 성공 시 병합 취소
- 머지 요청 리베이스
- 머지 요청에 대한 코멘트
- 머지 시 닫히는 이슈 목록
- 병합 요청과 관련된 이슈 목록
- 병합 요청 구독
- 병합 요청 취소
- 할 일 항목 생성
- 단일 병합 요청 차이 버전 가져오기
- 병합 요청에 대한 시간 추정 설정
- 병합 요청에 대한 시간 추정 재설정
- 병합 요청에 소요된 시간 추가
- 병합 요청에 대한 소요된 시간 재설정
- 시간 추적 통계 가져오기
- 승인
- 병합 요청 상태 이벤트 목록
- 문제 해결
병합 요청 API
-
reference
deprecated in GitLab 12.7. -
merged_by
deprecated in GitLab 14.7. -
merge_status
deprecated를detailed_merge_status
로 대체함 in GitLab 15.6에 우선하여 사용합니다. -
with_merge_status_recheck
changed in GitLab 15.11 with a flag namedrestrict_merge_status_recheck
to be ignored for requests from users insufficient permissions. Disabled by default. -
approvals_before_merge
deprecated in GitLab 16.0. -
prepared_at
introduced in GitLab 16.1. -
merge_after
introduced in GitLab 17.5.
비공개 정보에 대한 모든 API 호출에는 인증이 필요합니다.
API v5에서의 제거사항
approvals_before_merge
속성이 더 이상 사용되지 않으며, 병합 요청 승인 API로 대체될 예정입니다.
병합 요청 목록
인증된 사용자가 액세스 할 수 있는 모든 병합 요청을 가져옵니다. 기본적으로 현재 사용자가 만든 병합 요청만 반환합니다. 모든 병합 요청을 가져오려면 scope=all
매개 변수를 사용합니다.
state
매개 변수를 사용하여 특정 상태(opened
, closed
, locked
, 또는 merged
) 또는 모든 상태(all
)의 병합 요청만 가져올 수 있습니다. 일반적으로 locked
로 검색하는 것은 결과를 반환하지 않습니다. 페이지네이션 매개 변수 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
| 정수 배열 | 아니요 | 지정된 id 를 가진 모든 사용자에 의해 승인된 병합 요청을 반환합니다. 최대 5명의 사용자. None 은 승인이 없는 병합 요청을, Any 는 승인이 있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용.
|
approver_ids
| 정수 배열 | 아니요 | 지정된 id 를 가진 사용자가 각각 별도의 승인자로 지정한 병합 요청을 반환합니다. None 은 승인자가 없는 병합 요청을, Any 는 적어도 한 명의 승인자가 있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용.
|
approved
| 문자열 | 아니요 | 병합 요청을 approved 상태로 필터링합니다. yes 는 승인된 병합 요청만, no 는 승인되지 않은 병합 요청만 반환합니다. 기본적으로 비활성화된 mr_approved_filter 플래그가 있는 GitLab 15.11에서 도입되었습니다.
|
assignee_id
| 정수 | 아니요 | 지정된 사용자 id 에 할당된 병합 요청을 반환합니다. None 은 미할당된 병합 요청을, Any 는 할당된 병합 요청을 반환합니다.
|
author_id
| 정수 | 아니요 | 지정된 사용자 id 가 만든 병합 요청을 반환합니다. author_username 와 상호 배타적입니다. scope=all 또는 scope=assigned_to_me 와 함께 사용합니다.
|
… |
(이하 생략)
병합 요청 목록 응답 노트
- 병합 요청을 나열하는 것은
merge_status
를 미리 업데이트하지 않을 수 있으며(이는has_conflicts
에도 영향을 미침), 이는 비용이 많이 들 수 있습니다. 이 엔드포인트에서이 필드의 값을 필요로 하는 경우에는 쿼리에서with_merge_status_recheck
매개변수를true
로 설정하십시오. - 병합 요청 개체 필드에 대한 참고사항은 단일 병합 요청 응답 노트를 참조하십시오.
프로젝트 병합 요청 목록
이 프로젝트의 모든 병합 요청을 가져옵니다.
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
| 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL-encoded 경로. |
approved_by_ids
| 정수 배열 | 아니요 | 주어진 id 를 가진 모든 사용자에 의해 승인된 병합 요청을 반환합니다. 최대 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 )
|
environment
| 문자열 | 아니요 | 주어진 환경에 배포된 병합 요청을 반환합니다. |
iids[]
| 정수 배열 | 아니요 | 주어진 iid 를 가진 요청을 반환합니다.
|
labels
| 문자열 | 아니요 | 쉼표로 구분된 레이블 목록과 일치하는 병합 요청을 반환합니다. None 은 레이블이없는 모든 병합 요청을 나열합니다. Any 는 적어도 하나의 레이블이있는 모든 병합 요청을 나열합니다. 사전 정의 된 이름은 대소문자를 구분하지 않습니다.
|
merge_user_id
| 정수 | 아니요 | 주어진 사용자 id 가 병합 요청을 병합 했을 때 병합 요청을 반환합니다. merge_user_username 과 상호 배타적입니다. 소개 : GitLab 17.0에서 사용 가능합니다.
|
merge_user_username
| 문자열 | 아니요 | 주어진 username 이 병합 요청을 병합 했을 때 병합 요청을 반환합니다. merge_user_id 와 상호 배타적입니다. 소개 : GitLab 17.0에서 사용 가능합니다.
|
milestone
| 문자열 | 아니요 | 특정 마일스톤의 병합 요청을 반환합니다. None 은 마일스톤이없는 모든 병합 요청을 반환합니다. Any 는 할당된 마일스톤이있는 모든 병합 요청을 반환합니다.
|
my_reaction_emoji
| 문자열 | 아니요 | 주어진 emoji 로 인증된 사용자가 반응한 병합 요청을 반환합니다. None 은 반응이없는 이슈를 반환합니다. Any 는적어도 한 가지 반응이있는 이슈를 반환합니다.
|
not
| 해시 | 아니요 | 제공된 매개 변수와 일치하지 않는 병합 요청을 반환합니다. labels , milestone , author_id , author_username , assignee_id , assignee_username , reviewer_id , reviewer_username , my_reaction_emoji 을 허용합니다.
|
order_by
| 문자열 | 아니요 |
created_at , title , 또는 updated_at 필드로 정렬된 요청을 반환합니다. 기본값은 created_at 입니다.
|
page
| 정수 | 아니요 | 반환할 결과의 페이지입니다. 기본값은 1입니다. |
per_page
| 정수 | 아니요 | 페이지당 결과 수입니다. 기본값은 20입니다. |
reviewer_id
| 정수 | 아니요 | 사용자를 리뷰어로 가진 병합 요청을 반환합니다. None 은 리뷰어가없는 병합 요청을 반환합니다. Any 은 리뷰어가있는 병합 요청을 반환합니다. reviewer_username 과 상호 배타적입니다.
|
reviewer_username
| 문자열 | 아니요 | 사용자를 리뷰어로 가진 병합 요청을 반환합니다. None 은 리뷰어가없는 병합 요청을 반환합니다. Any 은 리뷰어가있는 병합 요청을 반환합니다. reviewer_id 와 상호 배타적입니다.
|
scope
| 문자열 | 아니요 | 주어진 범위에 대한 병합 요청을 반환합니다: created_by_me , assigned_to_me , 또는 all .
|
search
| 문자열 | 아니요 |
title 및 description 에 대한 병합 요청을 검색합니다.
|
sort
| 문자열 | 아니요 |
asc 또는 desc 순서로 정렬된 요청을 반환합니다. 기본값은 desc 입니다.
|
source_branch
| 문자열 | 아니요 | 지정된 소스 브랜치의 병합 요청을 반환합니다. |
state
| 문자열 | 아니요 | 모든 병합 요청 (all ) 또는 opened , closed , locked , 또는 merged 인 병합 요청만 반환합니다.
|
target_branch
| 문자열 | 아니요 | 주어진 대상 브랜치가있는 병합 요청을 반환합니다. |
updated_after
| 날짜 및 시간 | 아니요 | 주어진 시간 이후 또는 이후에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 예상(2019-03-15T08:00:00Z )
|
updated_before
| 날짜 및 시간 | 아니요 | 주어진 시간 이전 또는 이전 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 예상(2019-03-15T08:00:00Z )
|
view
| 문자열 | 아니요 |
simple 이면, 병합 요청의 iid , URL, 제목, 설명 및 기본 상태를 반환합니다.
|
wip
| 문자열 | 아니요 | 병합 요청의 wip 상태에 따라 필터링합니다. draft 병합 요청만 반환하려면 yes 을 반환하고, non-draft 병합 요청을 반환하려면 no 를 반환합니다.
|
with_labels_details
| 부울 | 아니요 |
true 이면 응답에 labels 필드에 대한 자세한 정보가 포함됩니다: :name , :color , :description , :description_html , :text_color . 기본값은 false 입니다.
|
with_merge_status_recheck
| 부울 | 아니요 |
true 이면이 프로젝션은 merge_status 필드의 비동기적인 재계산을 요청하지만 (보장하지는 않음) 반환합니다. 기본값은 false 입니다. GitLab 15.11 이상에서는 고객 역할이 개발자 역할 이상인 사용자에 의해 요청된 경우 이 속성을 무시하려면 피처 플래그 restrict_merge_status_recheck 를 활성화하십시오.
|
성공하면 200 OK
과 다음을 반환합니다
응답 속성:
속성 | 유형 | 설명 |
---|---|---|
[].id
| 정수 | 병합 요청의 ID입니다. |
[].iid
| 정수 | 병합 요청의 내부 ID입니다. |
[].approvals_before_merge
| 정수 | 이 병합 요청이 병합되기 전에 필요한 승인 수입니다. 승인 규칙을 구성하려면 병합 요청 승인 API를 참조하십시오. GitLab 16.0에서 폐기되었습니다. 프리미엄과 얼티밋 전용입니다. |
[].assignee
| 객체 | 병합 요청의 첫 번째 담당자입니다. |
[].assignees
| 배열 | 병합 요청의 담당자입니다. |
[].author
| 객체 | 이 병합 요청을 만든 사용자입니다. |
[].blocking_discussions_resolved
| 부울 | 병합 요청이 병합되기 전에 모든 토론이 해결되었는지를 나타냅니다. |
[].closed_at
| 날짜 및 시간 | 병합 요청이 닫힌 타임스탬프입니다. |
[].closed_by
| 객체 | 이 병합 요청을 닫은 사용자입니다. |
[].created_at
| 날짜 및 시간 | 병합 요청이 만들어진 타임스탬프입니다. |
[].description
| 문자열 | 병합 요청의 설명입니다. |
[].detailed_merge_status
| 문자열 | 병합 요청의 자세한 병합 상태입니다. 가능한 값 목록을 보려면 병합 상태를 참조하십시오. |
[].discussion_locked
| 부울 | 병합 요청에 대한 코멘트가 멤버 전용으로 잠겨 있는지를 나타냅니다. |
[].downvotes
| 정수 | 병합 요청에 대한 싫어요 수입니다. |
[].draft
| 부울 | 병합 요청이 초안인지 나타냅니다. |
[].has_conflicts
| 부울 | 병합 요청에 충돌이 있으며 병합할 수 없는지를 나타냅니다. merge_status 속성에 따라 종속됩니다. merge_status 가 cannot_be_merged 인 경우에만 false 를 반환합니다.
|
[].labels
| 배열 | 병합 요청의 레이블입니다. |
[].merge_status
| 문자열 | 병합 요청의 상태입니다. unchecked , checking , can_be_merged , cannot_be_merged , 또는 cannot_be_merged_recheck 일 수 있습니다. has_conflicts 속성에 영향을 줍니다. 응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 노트를 참조하십시오. 폐기 : GitLab 15.6에서. 대신 detailed_merge_status 를 사용하십시오.
|
[].user
| 객체 | 이 병합 요청을 병합 한 사용자, 자동 병합한 사용자 또는 null 입니다. GitLab 14.7에서 소개되었습니다.
|
`[].merge_when_pipeline_succeed |
그룹 병합 요청 목록
이 그룹 및 하위 그룹의 모든 병합 요청을 가져옵니다.
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 는 적어도 하나의 라벨이 있는 모든 병합 요청을 반환합니다. 미리 정의된 이름은 대소문자를 구분하지 않습니다.
|
merge_user_id
| 정수 | 아니요 | 주어진 사용자 id 에 의해 병합된 병합 요청을 반환합니다. merge_user_username 과 상호 배타적입니다. GitLab 17.0에서 도입됨.
|
merge_user_username
| 문자열 | 아니요 | 주어진 username 에 의해 병합된 병합 요청을 반환합니다. merge_user_id 와 상호 배타적입니다. GitLab 17.0에서 도입됨.
|
milestone
| 문자열 | 아니요 | 특정 마일스톤의 병합 요청을 반환합니다. None 은 마일스톤이 지정되지 않은 모든 병합 요청을 반환합니다. Any 는 지정된 마일스톤을 가진 모든 병합 요청을 반환합니다.
|
my_reaction_emoji
| 문자열 | 아니요 | 인증된 사용자에 의해 지정된 emoji 로 반응한 병합 요청을 반환합니다. None 은 반응이 없는 이슈를 반환합니다. Any 는 적어도 하나의 반응이 있는 이슈를 반환합니다.
|
non_archived
| 부울 | 아니요 | 아카이브되지 않은 프로젝트에서의 병합 요청만 반환합니다. 기본값은 true 입니다.
|
not
| 해시 | 아니요 | 제공된 매개변수와 일치하지 않는 병합 요청을 반환합니다. labels , milestone , author_id , author_username , assignee_id , assignee_username , reviewer_id , reviewer_username , my_reaction_emoji 를 허용합니다.
|
order_by
| 문자열 | 아니요 |
created_at , title , 또는 updated_at 필드별로 정렬된 병합 요청을 반환합니다. 기본값은 created_at 입니다.
|
reviewer_id
| 정수 | 아니요 | 지정된 사용자 id 를 리뷰어로 가진 병합 요청을 반환합니다. None 은 리뷰어가 없는 병합 요청을 반환합니다. Any 는 리뷰어가 있는 병합 요청을 반환합니다. reviewer_username 과 상호 배타적입니다.
|
reviewer_username
| 문자열 | 아니요 | 지정된 username 을 리뷰어로 가진 병합 요청을 반환합니다. None 은 리뷰어가 없는 병합 요청을 반환합니다. Any 는 리뷰어가 있는 병합 요청을 반환합니다. reviewer_id 와 상호 배타적입니다.
|
scope
| 문자열 | 아니요 | 주어진 범위에 대한 병합 요청을 반환합니다: created_by_me , assigned_to_me 또는 all .
|
search
| 문자열 | 아니요 | 병합 요청을 title 및 description 에 대해 검색합니다.
|
source_branch
| 문자열 | 아니요 | 지정된 소스 브랜치를 가진 병합 요청을 반환합니다. |
sort
| 문자열 | 아니요 |
asc 또는 desc 순서로 정렬된 병합 요청을 반환합니다. 기본값은 desc 입니다.
|
state
| 문자열 | 아니요 | 모든 병합 요청 (all ) 또는 opened , closed , locked , 또는 merged 인 요청만 반환합니다.
|
target_branch
| 문자열 | 아니요 | 지정된 대상 브랜치를 가진 병합 요청을 반환합니다. |
updated_after
| 날짜/시간 | 아니요 | 주어진 시간 이후에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z )으로 예상됩니다.
|
updated_before
| 날짜/시간 | 아니요 | 주어진 시간 이전에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z )으로 예상됩니다.
|
view
| 문자열 | 아니요 |
simple 이면 병합 요청의 iid , URL, 제목, 설명, 및 기본 상태를 반환합니다.
|
with_labels_details
| 부울 | 아니요 |
true 이면 응답은 라벨 필드의 각 라벨에 대한 자세한 정보를 반환합니다: :name , :color , :description , :description_html , :text_color . 기본값은 false 입니다.
|
with_merge_status_recheck
| 부울 | 아니요 |
true 인 경우 이 프로젝션은(merge_status 필드의) 비동기적 다시 계산을 요청하지만 보장하지 않습니다. 기본값은 false입니다. GitLab 15.11 이상에서는 적어도 Developer 역할을 갖지 않은 사용자가 요청했을 때, 이 속성을 무시하려면 restrict_merge_status_recheck` 기능 플래그을 활성화해야 합니다.
|
병합 요청 목록을 제한하려면 페이지네이션 매개변수 page
및 per_page
를 사용합니다.
응답에는 group_id
가 병합 요청이 위치한 프로젝트를 포함하는 그룹의 ID를 나타냅니다.
응답 예시:
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"imported": false,
"imported_from": "none",
"merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
"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",
"merge_after": "2018-09-07T11:16:00.000Z",
"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"
},
...
}
]
응답 데이터에 대한 중요한 참고 사항은 병합 요청 목록 응답 노트를 참조하세요.
단일 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에서 사양 변경됨. 프리미엄 및 얼티밋 전용. |
assignee
| 객체 | 병합 요청의 첫 번째 지정 대상. |
assignees
| 배열 | 병합 요청의 지정 대상. |
author
| 객체 | 이 병합 요청을 생성한 사용자. |
blocking_discussions_resolved
| 부울 | 모든 논의가 해결되었는지 여부, 병합 요청이 병합되기 전에 필요한 경우에만 적용됩니다. |
changes_count
| 문자열 | 병합 요청에 대한 변경 사항의 수. 병합 요청이 작성되었을 때는 비어 있으며, 비동기적으로 채워집니다. 줄바꿈은 정수가 아니라 문자열입니다. 표시 및 저장할 변경이 너무 많은 병합 요청의 경우 값이 1000으로 제한되고 문자열 "1000+" 이 반환됩니다. 새 병합 요청에 대한 API 필드 삭제를 참조하십시오.
|
closed_at
| 날짜 및 시간 | 병합 요청이 닫힌 시간. |
closed_by
| 객체 | 이 병합 요청을 닫은 사용자. |
created_at
| 날짜 및 시간 | 병합 요청이 만들어진 시간. |
description
| 문자열 | 병합 요청의 설명. 캐싱을 위해 HTML로 렌더링된 마크다운이 포함됩니다. |
detailed_merge_status
| 문자열 | 병합 요청의 상세 병합 상태. 가능한 값은 병합 상태를 참조하십시오. |
diff_refs
| 객체 | 이 병합 요청의 기본 SHA, 헤드 SHA 및 시작 SHA에 대한 참조. 병합 요청이 작성된 경우 비어 있으며, 비동기적으로 채워집니다. 새 병합 요청에 대한 API 필드 삭제를 참조하십시오. |
discussion_locked
| 부울 | 병합 요청에 대한 코멘트가 회원 전용인지 여부. |
downvotes
| 정수 | 병합 요청에 대한 다운보트 수. |
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 대신 사용하십시오.
|
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 .
|
merge_status
| 문자열 | 병합 요청의 상태. unchecked , checking , can_be_merged , cannot_be_merged , 또는 cannot_be_merged_recheck 가 될 수 있습니다. has_conflicts 속성에 영향을 줍니다. 응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 사항를 참조하십시오. GitLab 15.6에서 사양 변경됨. 대신 detailed_merge_status 를 사용하십시오.
|
merge_when_pipeline_succeeds
| 부울 | 파이프라인이 성공할 때 병합이 수행되는지 여부를 나타냅니다. |
merged_at
| 날짜 및 시간 | 병합 요청이 병합된 시간. |
merged_by
| 객체 | 이 병합 요청을 병합한 사용자 또는 자동 병합한 사용자. GitLab 14.7에서 사양 변경됨 및 API 버전 5에서 제거 예정. 대신 merge_user 를 사용하십시오.
|
milestone
| 객체 | 병합 요청의 마일스톤. |
pipeline
| 객체 | 병합 요청의 브랜치 HEAD에서 실행되는 파이프라인. 보다 완전한 정보가 들어 있으므로 head_pipeline 대신 사용하십시오.
|
prepared_at
| 날짜 및 시간 | 병합 요청이 준비된 시간. 이 필드는 준비 단계가 완료된 후 한 번만 채워지며, 추가 변경 사항이 추가되는 경우에는 업데이트되지 않습니다. |
project_id
| 정수 | 병합 요청 프로젝트의 ID. |
reference
| 문자열 | 병합 요청의 내부 참조. 기본적으로 줄임 형식으로 반환됩니다. GitLab 12.7에서 사양 변경됨 및 API 버전 5에서 제거 예정. 대신 references 를 사용하십시오.
|
references
| 객체 | 병합 요청의 내부 참조. short , relative , full 참조를 포함합니다. references.relative 는 병합 요청의 그룹 또는 프로젝트에 상대적입니다. 병합 요청 프로젝트에서 요청된 경우 relative 및 short 형식은 동일합니다. 그룹 또는 프로젝트 간에 요청된 경우 relative 및 full 형식은 동일합니다.
|
reviewers
| 배열 | 병합 요청의 리뷰어. |
sha
| 문자열 | 병합 요청의 diff 헤드 SHA. |
should_remove_source_branch
| 부울 | 병합 요청의 소스 브랜치가 병합 후에 삭제되어야 하는지 여부를 나타냅니다. |
source_branch
| 문자열 | 병합 요청의 소스 브랜치. |
source_project_id
| 정수 | 병합 요청 소스 프로젝트의 ID. |
squash
| 부울 | 병합할 때 squash가 활성화되어 있는지 여부를 나타냅니다. |
squash_commit_sha
| 문자열 | squash 커밋의 SHA. 병합될 때까지 비어 있습니다. |
state
| 문자열 | 병합 요청의 상태. opened , closed , merged 또는 locked 가 될 수 있습니다.
|
subscribed
| 부울 | 현재 인증된 사용자가 이 병합 요청에 구독 중인지 여부를 나타냅니다. |
target_branch
| 문자열 | 병합 요청의 대상 브랜치. |
target_project_id
| 정수 | 병합 요청 대상 프로젝트의 ID. |
task_completion_status
| 객체 | 작업 완료 상태. |
title
| 문자열 | 병합 요청의 제목. |
updated_at
| 날짜 및 시간 | 병합 요청이 업데이트된 시간. |
upvotes
| 정수 | 병합 요청에 대한 Upvote 수. |
user
| 객체 | 병합 요청을 위해 요청된 사용자의 권한. |
user_notes_count
| 정수 | 병합 요청의 사용자 노트 수. |
web_url
| 문자열 | 병합 요청의 웹 URL. |
work_in_progress
| 부울 | 사용되지 않음: 대신 draft 를 사용하십시오. 병합 요청이 초안인지 여부를 나타냅니다.
|
예시 응답:
{
"id": 155016530,
"iid": 133,
"project_id": 15513260,
"title": "Manual job rules",
"description": "",
"state": "opened",
"imported": false,
"imported_from": "none",
"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,
"merge_after": "2018-09-07T11:16:00.000Z",
"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": "1604b0c46c395822e4e9478777f8e54ac99fe5b9",
"ref": "refs/merge-requests/133/merge",
"status": "failed",
"source": "merge_request_event",
"created_at": "2022-05-13T09:46:39.560Z",
### 단일 병합 요청 응답 노트
이 엔드포인트로 요청이 있을 때 각 병합 요청의 병합 가능성(`merge_status`)은 비동기적으로 확인됩니다. 업데이트된 상태를 얻으려면 이 API 엔드포인트를 주기적으로 확인하세요. 이는 `has_conflicts` 속성에 영향을 미치며, `merge_status`에 따라 `false`를 반환합니다. 이는 `merge_status`가 `cannot_be_merged`인 경우에만 해당합니다.
### 병합 상태
> - GitLab 15.6에서는 `merge_status`가 [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/3169#note_1162532204)되었습니다.
> - GitLab 15.6에서 `detailed_merge_status`가 [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/101724)되었습니다.
모든 잠재적인 상태를 고려하려면 `merge_status`대신 `detailed_merge_status`를 사용하세요.
- `detailed_merge_status` 필드에는 병합 요청과 관련된 다음 값 중 하나가 포함될 수 있습니다:
- `approvals_syncing`: 병합 요청의 승인이 동기화 중입니다.
- `checking`: Git이 유효한 병합이 가능한지 테스트 중입니다.
- `ci_must_pass`: 병합하기 전에 CI/CD 파이프라인이 성공해야 합니다.
- `ci_still_running`: CI/CD 파이프라인이 아직 실행 중입니다.
- `commits_status`: 소스 브랜치가 있고 커밋을 포함해야 합니다.
- `conflict`: 소스 및 대상 브랜치 사이에 충돌이 있습니다.
- `discussions_not_resolved`: 모든 토론은 병합되기 전에 해결되어야 합니다.
- `draft_status`: 병합 요청이 초안이므로 병합할 수 없습니다.
- `jira_association_missing`: 제목 또는 설명에 Jira 이슈가 있어야 합니다. 구성 방법은
[병합 요청을 병합하려면 관련 Jira 이슈가 필요합니다](../integration/jira/issues.md#require-associated-jira-issue-for-merge-requests-to-be-merged)를 참조하세요.
- `mergeable`: 브랜치를 대상 브랜치에 깔끔하게 병합할 수 있습니다.
- `merge_request_blocked`: 다른 병합 요청에 의해 차단됩니다.
- `merge_time`: 지정된 시간 이후에만 병합될 수 있습니다.
- `need_rebase`: 병합 요청을 다시베이스해야 합니다.
- `not_approved`: 병합하기 전에 승인이 필요합니다.
- `not_open`: 병합하기 전에 병합 요청이 열려야 합니다.
- `preparing`: 병합 요청 차이가 생성 중입니다.
- `requested_changes`: 변경 요청을 한 리뷰어가 있는 병합 요청입니다.
- `security_policy_evaluation`: 모든 보안 정책을 평가해야 합니다.
`policy_mergability_check` 기능 플래그가 활성화되어 있어야 합니다.
- `security_policy_violations`: 모든 보안 정책을 충족해야 합니다.
`policy_mergability_check` 기능 플래그가 활성화되어 있어야 합니다.
- `status_checks_must_pass`: 병합하기 전에 모든 상태 확인이 필요합니다.
- `unchecked`: Git이 아직 유효한 병합을 테스트하지 않았습니다.
- `locked_paths`: 다른 사용자에 의해 잠겨진 경로를 기본 브랜치로 병합하기 전에 잠금을 해제해야 합니다.
- `locked_lfs_files`: 다른 사용자에 의해 잠겨진 LFS 파일을 기본 브랜치로 병합하기 전에 잠금을 해제해야 합니다.
### 준비 단계
`prepared_at` 필드는 다음 단계가 완료된 후에 한 번만 채워집니다:
- 차이 생성
- 파이프라인 생성
- 병합 가능성 확인
- 모든 Git LFS 객체 링크
- 알림 보내기
더 많은 변경이 병합 요청에 추가되면 `prepared_at` 필드가 업데이트되지 않습니다.
## 단일 병합 요청 참여자 가져오기
병합 요청 참여자 목록을 가져옵니다.
```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. |
성공하면 200 OK
및 다음 응답 속성을 반환합니다.
속성 | 유형 | 설명 |
---|---|---|
commits
| 객체 배열 | 병합 요청의 커밋. |
commits[].id
| 문자열 | 커밋의 ID. |
commits[].short_id
| 문자열 | 커밋의 짧은 ID. |
commits[].created_at
| 날짜/시간 |
committed_date 필드와 동일합니다.
|
commits[].parent_ids
| 배열 | 상위 커밋의 ID. |
commits[].title
| 문자열 | 커밋 제목. |
commits[].message
| 문자열 | 커밋 메시지. |
commits[].author_name
| 문자열 | 커밋 작성자 이름. |
commits[].author_email
| 문자열 | 커밋 작성자 이메일 주소. |
commits[].authored_date
| 날짜/시간 | 커밋 작성일. |
commits[].committer_name
| 문자열 | 커미터의 이름. |
commits[].committer_email
| 문자열 | 커미터의 이메일 주소. |
commits[].committed_date
| 날짜/시간 | 커밋 날짜. |
commits[].trailers
| 객체 | 커밋에 대한 Git 트레일러. 중복 키는 마지막 값만 포함됩니다. |
commits[].extended_trailers
| 객체 | 커밋에 대한 Git 트레일러. |
commits[].web_url
| 문자열 | 병합 요청의 웹 URL. |
예시 요청:
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/commits"
예시 응답:
[
{
"id": "ed899a2f4b50b4370feeea94676502b42383c746",
"short_id": "ed899a2f4b5",
"title": "Replace sanitize with escape once",
"author_name": "Example User",
"author_email": "user@example.com",
"authored_date": "2012-09-20T11:50:22+03:00",
"committer_name": "Example User",
"committer_email": "user@example.com",
"committed_date": "2012-09-20T11:50:22+03:00",
"created_at": "2012-09-20T11:50:22+03:00",
"message": "Replace sanitize with escape once",
"trailers": {},
"extended_trailers": {},
"web_url": "https://gitlab.example.com/project/-/commit/ed899a2f4b50b4370feeea94676502b42383c746"
},
{
"id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
"short_id": "6104942438c",
"title": "Sanitize for network graph",
"author_name": "Example User",
"author_email": "user@example.com",
"authored_date": "2012-09-20T09:06:12+03:00",
"committer_name": "Example User",
"committer_email": "user@example.com",
"committed_date": "2012-09-20T09:06:12+03:00",
"created_at": "2012-09-20T09:06:12+03:00",
"message": "Sanitize for network graph",
"trailers": {},
"extended_trailers": {},
"web_url": "https://gitlab.example.com/project/-/commit/6104942438c14ec7bd21c6cd5bd995272b3faff6"
}
]
병합 요청 의존성 가져오기
병합하기 전에 해결해야 할 병합 요청 의존성에 대한 정보를 표시합니다.
GET /projects/:id/merge_requests/:merge_request_iid/blocks
지원되는 속성:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
예시 요청:
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks"
예시 응답:
[
{
"id": 1,
"blocking_merge_request": {
"id": 145,
"iid": 12,
"project_id": 7,
"title": "Interesting MR",
"description": "Does interesting things.",
"state": "opened",
"created_at": "2024-07-05T21:29:11.172Z",
"updated_at": "2024-07-05T21:29:11.172Z",
"merged_by": null,
"merge_user": null,
"merged_at": null,
"merge_after": "2018-09-07T11:16:00.000Z",
"closed_by": null,
"closed_at": null,
"target_branch": "master",
"source_branch": "v2.x",
"user_notes_count": 0,
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
},
"assignees": [
{
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
}
],
"assignee": {
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
},
"reviewers": [
{
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
},
{
"id": 1,
"username": "root",
"name": "Administrator",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/root"
}
],
"source_project_id": 7,
"target_project_id": 7,
"labels": [],
"draft": false,
"imported": false,
"imported_from": "none",
"work_in_progress": false,
"milestone": null,
"merge_when_pipeline_succeeds": false,
"merge_status": "unchecked",
"detailed_merge_status": "unchecked",
"sha": "ce7e4f2d0ce13cb07479bb39dc10ee3b861c08a6",
"merge_commit_sha": null,
"squash_commit_sha": null,
"discussion_locked": null,
"should_remove_source_branch": null,
"force_remove_source_branch": true,
"prepared_at": null,
"reference": "!12",
"references": {
"short": "!12",
"relative": "!12",
"full": "my-group/my-project!12"
},
"web_url": "https://localhost/my-group/my-project/-/merge_requests/12",
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"squash": false,
"squash_on_merge": false,
"task_completion_status": {
"count": 0,
"completed_count": 0
},
"has_conflicts": false,
"blocking_discussions_resolved": true,
"approvals_before_merge": null
},
"blocked_merge_request": {
"id": 146,
"iid": 13,
"project_id": 7,
"title": "Really cool MR",
"description": "Adds some stuff",
"state": "opened",
"created_at": "2024-07-05T21:31:34.811Z",
"updated_at": "2024-07-27T02:57:08.054Z",
"merged_by": null,
"merge_user": null,
"merged_at": null,
"merge_after": "2018-09-07T11:16:00.000Z",
"closed_by": null,
"closed_at": null,
"target_branch": "master",
"source_branch": "remove-from",
"user_notes_count": 0,
"upvotes": 1,
"downvotes": 0,
"author": {
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
},
"assignees": [
{
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
}
],
"assignee": {
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
},
"reviewers": [
{
"id": 1,
"username": "root",
"name": "Administrator",
}
],
"source_project_id": 7,
"target_project_id": 7,
"labels": [],
"draft": false,
"imported": false,
"imported_from": "none",
"work_in_progress": false,
"milestone": {
"id": 59,
"iid": 6,
"project_id": 7,
"title": "Sprint 1718897375",
"description": "Accusantium omnis iusto a animi.",
},
"merge_when_pipeline_succeeds": false,
"merge_status": "cannot_be_merged",
"detailed_merge_status": "not_approved",
"sha": "daa75b9b17918f51f43866ff533987fda71375ea",
"merge_commit_sha": null,
"squash_commit_sha": null,
"discussion_locked": null,
"should_remove_source_branch": null,
"force_remove_source_branch": true,
"prepared_at": "2024-07-11T18:50:46.215Z",
}
}
]
병합 요청 종속성 삭제
병합 요청 종속성을 삭제합니다.
DELETE /projects/:id/merge_requests/:merge_request_iid/blocks/:block_id
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
block_id
| 정수 | 예 | 블록의 내부 ID |
예시 요청:
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks/1"
응답:
- 종속성이 성공적으로 삭제된 경우
204 No Content
- 병합 요청을 업데이트하기 위한 권한이 없는 경우
403 Forbidden
- 차단 중인 병합 요청을 읽기 위한 권한이 없는 경우
403 Forbidden
병합 요청 종속성 생성
병합 요청 종속성을 생성합니다.
POST /projects/:id/merge_requests/:merge_request_iid/blocks
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 된 경로 |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID |
blocking_merge_request_id
| 정수 | 예 | 차단 중인 병합 요청의 내부 ID |
예시 요청:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks?blocking_merge_request_id=2"
응답:
- 종속성이 성공적으로 생성된 경우
201 Created
- 차단 중인 병합 요청이 저장에 실패한 경우
400 Bad request
- 차단 중인 병합 요청을 읽기 위한 권한이 없는 경우
403 Forbidden
- 차단 중인 병합 요청을 찾을 수 없는 경우
404 Not found
- 블록이 이미 존재하는 경우
409 Conflict
예시 응답:
[
{
"id": 1,
"blocking_merge_request": {
"id": 145,
"iid": 12,
"project_id": 7,
"title": "흥미로운 MR",
"description": "흥미로운 작업 수행",
"state": "opened",
"created_at": "2024-07-05T21:29:11.172Z",
"updated_at": "2024-07-05T21:29:11.172Z",
"merged_by": null,
"merge_user": null,
"merged_at": null,
"merge_after": "2018-09-07T11:16:00.000Z",
"closed_by": null,
"closed_at": null,
"target_branch": "master",
"source_branch": "v2.x",
"user_notes_count": 0,
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
},
"assignees": [
{
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
}
],
"assignee": {
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
},
"reviewers": [
{
"id": 2,
"username": "aiguy123",
"name": "AI GUY",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/aiguy123"
},
{
"id": 1,
"username": "root",
"name": "관리자",
"state": "active",
"locked": false,
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
"web_url": "https://localhost/root"
}
],
"source_project_id": 7,
"target_project_id": 7,
"labels": [],
"draft": false,
"imported": false,
"imported_from": "none",
"work_in_progress": false,
"milestone": null,
"merge_when_pipeline_succeeds": false,
"merge_status": "unchecked",
"detailed_merge_status": "unchecked",
"sha": "ce7e4f2d0ce13cb07479bb39dc10ee3b861c08a6",
"merge_commit_sha": null,
"squash_commit_sha": null,
"discussion_locked": null,
"should_remove_source_branch": null,
"force_remove_source_branch": true,
"prepared_at": null,
"reference": "!12",
"references": {
"short": "!12",
"relative": "!12",
"full": "my-group/my-project!12"
},
"web_url": "https://localhost/my-group/my-project/-/merge_requests/12",
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"squash": false,
"squash_on_merge": false,
"task_completion_status": {
"count": 0,
"completed_count": 0
},
"has_conflicts": false,
"blocking_discussions_resolved": true,
"approvals_before_merge": null
},
"project_id": 7
}
]
단일 병합 요청 변경 사항 가져오기
경고: 이 엔드포인트는 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
| 부울 | 아니오 | 변경된 사이를 통합된 diff 형식으로 나타냅니다. 기본값은 false입니다. GitLab 16.5에서 소개되었습니다. |
이 변경 세트와 관련된 diff에는 API 또는 UI를 통해 본 다른 diff에 적용된 동일한 크기 제한이 적용됩니다. 이러한 제한이 결과에 영향을 미치면 overflow
필드에 true
값이 포함됩니다. 데이터베이스에서가 아닌 Gitaly에서 직접 diff를 가져옴으로써 이러한 제한 없이 diff 데이터를 검색하려면 access_raw_diffs
매개변수를 추가합니다. 이 접근 방법은 일반적으로 더 느리고 리소스를 더 많이 사용하지만 데이터베이스 지원 diff에 적용된 크기 제한을 받지 않습니다. 여전히 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"
},
"assignee": {
"name": "Administrator",
"username": "root",
"id": 1,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40&d=identicon",
"web_url" : "https://gitlab.example.com/root"
},
"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": 4,
"target_project_id": 4,
"labels": [ ],
"description": "Qui voluptatibus placeat ipsa alias quasi. Deleniti rem ut sint. Optio velit qui distinctio.",
"draft": false,
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 4,
"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": null
},
"merge_when_pipeline_succeeds": true,
"merge_status": "can_be_merged",
"detailed_merge_status": "can_be_merged",
"subscribed" : true,
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
"squash_commit_sha": null,
"user_notes_count": 1,
"changes_count": "1",
"should_remove_source_branch": true,
"force_remove_source_branch": false,
"squash": 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"
},
"discussion_locked": false,
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"task_completion_status":{
"count":0,
"completed_count":0
},
"changes": [
{
"old_path": "VERSION",
"new_path": "VERSION",
"a_mode": "100644",
"b_mode": "100644",
"diff": "@@ -1 +1 @@\ -1.9.7\ +1.9.8",
"new_file": false,
"renamed_file": false,
"deleted_file": false
}
],
"overflow": false
}
병합 요청 차이점 목록
generated_file
도입됨 : GitLab 16.9에서collapse_generated_diff_files
라는 플래그로. 기본 설정은 비활성화.- GitLab 16.10에서 GitLab.com 및 Self-Managed에서 활성화됨.
generated_file
일반 사용 가능 : GitLab 16.11에서 기능 플래그collapse_generated_diff_files
가 제거됨.
병합 요청에서 변경된 파일의 차이점을 나열합니다.
GET /projects/:id/merge_requests/:merge_request_iid/diffs
지원되는 속성:
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 프로젝트의 URL-인코딩 된 경로 또는 ID. |
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에서 도입됨. |
예시 요청:
shell
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"
예시 응답:
json
[
{
"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
| 정수 또는 문자열 | 예 | 프로젝트의 URL-인코딩 된 경로 또는 ID. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
병합 요청 파이프라인 목록을 제한하려면 페이지네이션 매개변수 page
및 per_page
를 사용하세요.
예시 응답:
json
[
{
"id": 77,
"sha": "959e04d7c7a30600c894bd3c0cd0e1ce7f42c11d",
"ref": "main",
"status": "success"
}
]
병합 요청 파이프라인 생성
병합 요청을 위한 새로운 파이프라인을 생성합니다.
이 엔드포인트에서 생성된 파이프라인은 일반 브랜치/태그 파이프라인을 실행하지 않습니다.
작업을 만들려면 .gitlab-ci.yml
을 only: [merge_requests]
로 구성하세요.
새로운 파이프라인은 다음과 같을 수 있습니다:
- 분리된 병합 요청 파이프라인.
- 병합된 결과 파이프라인 (프로젝트 설정이 활성화되었을 경우).
POST /projects/:id/merge_requests/:merge_request_iid/pipelines
지원되는 속성:
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 프로젝트의 URL-인코딩 된 경로 또는 ID. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
예시 응답:
json
{
"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"
}
}
MR 생성
새로운 병합 요청을 생성합니다.
POST /projects/:id/merge_requests
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩 된 경로 |
source_branch
| 문자열 | 예 | 소스 브랜치 |
target_branch
| 문자열 | 예 | 대상 브랜치 |
title
| 문자열 | 예 | MR의 제목 |
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
| 부울 | 아니요 |
true 이면 모든 커밋을 병합시 하나의 커밋으로 스쿼시합니다. 프로젝트 설정이 이 값을 재정의할 수 있습니다.
|
target_project_id
| 정수 | 아니요 | 대상 프로젝트의 숫자 ID |
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"imported": false,
"imported_from": "none",
"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"
},
...
(중략)
...
(중략)
...
"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": "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",
"merge_after": "2018-09-07T11:16:00.000Z",
"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",
...
(중략)
...
(중략)
...
}
응답 데이터에 대한 중요 노트는 단일 병합 요청 응답 노트를 참조하세요.
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
| 부울 | 아니오 |
true 일 경우 모든 커밋을 병합 시 단일 커밋으로 통합합니다. 프로젝트 설정에서 본 값이 무시될 수 있습니다.
|
state_event
| 문자열 | 아니오 | 새 상태 (close/reopen). |
target_branch
| 문자열 | 아니오 | 대상 브랜치. |
title
| 문자열 | 아니오 | 병합 요청의 제목. |
위의 필수 사항 중 하나 이상을 포함해야 합니다.
예시 응답:
{
"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,
...
(내용이 길어 짧게 줄임)
...
"merged_at": "2018-09-07T11:16:17.520Z",
"merge_after": "2018-09-07T11:16:00.000Z",
"prepared_at": "2018-09-04T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
...
(내용이 길어 짧게 줄임)
...
}
기본 병합 참조 경로로 병합
병합 요청 소스 및 대상 브랜치 사이의 변경 사항을 가능한 경우 대상 프로젝트 저장소의 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
| Merge request is not mergeable
| 병합 요청에 충돌이 있습니다. |
400
| Merge ref cannot be updated
| |
400
| Unsupported operation
| 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
| Can't cancel the automatic merge
| 병합 요청이 닫혀 있습니다. |
응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고 사항을 참조하십시오.
예시 응답:
{
"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"
},
"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": 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-group/my-project/milestones/1"
},
"merge_when_pipeline_succeeds": false,
"merge_status": "can_be_merged",
"detailed_merge_status": "not_open",
"merge_error": null,
"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": "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",
"merge_after": "2018-09-07T11:16:00.000Z",
"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
}
}
머지 요청 리베이스
머지 요청의 source_branch
를 자동으로 해당 target_branch
에 맞춰 리베이스합니다.
PUT /projects/:id/merge_requests/:merge_request_iid/rebase
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | Yes | 프로젝트의 ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | Yes | 머지 요청의 내부 ID. |
skip_ci
| 부울 | No | 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
| 정수 또는 문자열 | Yes | ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | Yes | 머지 요청의 내부 ID. |
성공하면 GitLab 이슈 트래커를 사용할 때 200 OK
와 아래와 같은 응답 속성을 반환합니다:
속성 | 유형 | 설명 |
---|---|---|
[].assignee
| 객체 | 이 이슈의 첫 번째 담당자입니다. |
[].assignees
| 배열 | 이슈의 담당자입니다. |
[].author
| 객체 | 이 이슈를 생성한 사용자입니다. |
[].blocking_issues_count
| 정수 | 이 이슈가 차단하고 있는 이슈 수입니다. |
[].closed_at
| 날짜시간 | 이슈가 닫힌 시점입니다. |
[].closed_by
| 객체 | 이 문제를 닫은 사용자입니다. |
[].confidential
| 부울 | 이 문제가 비공개인지를 나타냅니다. |
[].created_at
| 날짜시간 | 이 문제가 생성된 시점입니다. |
[].description
| 문자열 | 이 문제의 설명입니다. |
[].discussion_locked
| 부울 | 이 문제의 코멘트가 회원만에게 제한되었는지를 나타냅니다. |
[].downvotes
| 정수 | 이 문제가 받은 싫어요의 수입니다. |
[].due_date
| 날짜시간 | 이 문제의 만기일입니다. |
[].id
| 정수 | 이 문제의 ID입니다. |
[].iid
| 정수 | 이 문제의 내부 ID입니다. |
[].issue_type
| 문자열 | 문제 종류입니다. issue , incident , test_case , requirement , task 가 될 수 있습니다.
|
[].labels
| 배열 | 문제의 라벨입니다. |
[].merge_requests_count
| 정수 | 머지 요청이 문제를 닫는 데 필요한 수입니다. |
[].milestone
| 객체 | 문제의 마일스톤입니다. |
[].project_id
| 정수 | 문제 프로젝트의 ID입니다. |
[].state
| 문자열 | 문제의 상태입니다. opened 또는 closed 가 될 수 있습니다.
|
[].task_completion_status
| 객체 | 문제에 대한 작업 완료 상태입니다. count 와 completed count 를 포함합니다.
|
[].time_stats
| 객체 | 문제에 대한 시간 통계입니다. time_estimate , total_time_spent , human_time_estimate , human_total_time_spent 를 포함합니다.
|
[].title
| 문자열 | 문제의 제목입니다. |
[].type
| 문자열 | 문제의 종류입니다. issue_type 와 동일하지만 대문자로 표시됩니다.
|
[].updated_at
| 날짜시간 | 문제가 마지막으로 업데이트된 시점입니다. |
[].upvotes
| 정수 | 이 문제가 받은 좋아요의 수입니다. |
[].user_notes_count
| 정수 | 문제의 사용자 코멘트 수입니다. |
[].web_url
| 문자열 | 문제의 웹 URL입니다. |
[].weight
| 정수 | 문제의 가중치입니다. |
성공하면 외부 이슈 트래커(예: Jira와 같은)를 사용할 때도 200 OK
와 아래와 같은 응답 속성을 반환합니다:
속성 | 유형 | 설명 |
---|---|---|
[].id
| 정수 | 이 문제의 ID입니다. |
[].title
| 문자열 | 이 문제의 제목입니다. |
예시 요청:
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/closes_issues"
GitLab 이슈 트래커를 사용할 때의 예시 응답:
[
{
"id": 76,
"iid": 6,
"project_id": 1,
"title": "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
"description": "Ratione dolores corrupti mollitia soluta quia.",
"state": "opened",
"created_at": "2024-09-06T10:58:49.002Z",
"updated_at": "2024-09-06T11:01:40.710Z",
"closed_at": null,
"closed_by": null,
"labels": [
"label"
],
"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"
},
"assignees": [
{
"id": 1,
"username": "root",
"name": "Administrator",
"state": "active",
"locked": false,
"avatar_url": null,
"web_url": "https://gitlab.example.com/root"
}
],
"author": {
"id": 18,
"username": "eileen.lowe",
"name": "Alexandra Bashirian",
"state": "active",
"locked": false,
"avatar_url": null,
"web_url": "https://gitlab.example.com/eileen.lowe"
},
"type": "ISSUE",
"assignee": {
"id": 1,
"username": "root",
"name": "Administrator",
"state": "active",
"locked": false,
"avatar_url": null,
"web_url": "https://gitlab.example.com/root"
},
"user_notes_count": 1,
"merge_requests_count": 1,
"upvotes": 0,
"downvotes": 0,
"due_date": null,
"confidential": false,
"discussion_locked": null,
"issue_type": "issue",
"web_url": "https://gitlab.example.com/my-group/my-project/-/issues/6",
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"task_completion_status": {
"count": 0,
"completed_count": 0
},
"weight": null,
"blocking_issues_count": 0
}
]
외부 이슈 트래커를 사용할 때의 예시 응답:
[
{
"id" : "PROJECT-123",
"title" : "이 문제의 제목"
}
]
병합 요청과 관련된 이슈 목록
병합 요청의 제목, 설명, 커밋 메시지, 댓글 및 토론에서 모든 관련 이슈를 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/related_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/related_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" : "Title of this issue"
}
]
병합 요청 구독
인증된 사용자를 병합 요청에 구독하여 알림을 받습니다.
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": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
... (생략)
}
응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고 사항을 참조하세요.
병합 요청 취소
인증된 사용자를 병합 요청에서 구독을 해지하여 해당 병합 요청으로부터 알림을 받지 않습니다.
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"
},
...
...
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
}
응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 노트를 참조하세요.
할 일 항목 생성
현재 사용자의 병합 요청에 대한 할 일 항목을 수동으로 생성합니다.
해당 병합 요청에 이미 사용자의 할 일 항목이 있는 경우, 이 엔드포인트는 HTTP 304 Not Modified
상태 코드를 반환합니다.
POST /projects/:id/merge_requests/:merge_request_iid/todo
속성 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL-encoded path. |
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"
}
## 병합 요청 차이 버전 가져오기
병합 요청 차이 버전의 목록을 가져옵니다.
```plaintext
GET /projects/:id/merge_requests/:merge_request_iid/versions
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 문자열 | 예 | 프로젝트의 ID. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
응답에서의 SHAs에 대한 설명은 API 응답의 SHAs를 참조하세요.
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 응답의 SHAs
SHA 필드 | 목적 |
---|---|
base_commit_sha
| 소스 브랜치와 대상 브랜치 사이의 병합 기준 커밋 SHA. |
head_commit_sha
| 소스 브랜치의 최신 커밋. |
start_commit_sha
| 이 차이 버전이 생성된 때의 대상 브랜치의 최신 커밋 SHA. |
단일 병합 요청 차이 버전 가져오기
단일 병합 요청 차이 버전을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/versions/:version_id
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 문자열 | 예 | 프로젝트의 ID. |
merge_request_iid
| 정수 | 예 | 병합 요청의 내부 ID. |
version_id
| 정수 | 예 | 병합 요청 차이 버전의 ID. |
unidiff
| 부울 | 아니요 | 통합된 차이 형식으로 차이 표시. 기본값은 false. GitLab 16.5에서 도입됨. |
성공 시 200 OK
와 다음과 같은 응답 속성을 반환합니다:
속성 | 유형 | 설명 |
---|---|---|
id
| 정수 | 병합 요청 차이 버전의 ID. |
base_commit_sha
| 문자열 | 소스 브랜치와 대상 브랜치 사이의 병합 기준 커밋 SHA. |
commits
| 객체 배열 | 병합 요청 차이에 포함된 커밋. |
commits[].id
| 문자열 | 커밋의 ID. |
commits[].short_id
| 문자열 | 커밋의 짧은 ID. |
commits[].created_at
| 날짜 및 시간 | 커밋 생성 날짜 및 시간. |
commits[].parent_ids
| 배열 | 부모 커밋의 ID. |
… |
(중략)
real_size
| 문자열 | 병합 요청 차이의 변경 사항 수. |
start_commit_sha
| 문자열 | 이 차이 버전이 생성된 때의 대상 브랜치의 최신 커밋 SHA. |
state
| 문자열 | 병합 요청 차이의 상태. collected , overflow , without_files . 폐기된 값: timeout , overflow_commits_safe_size , overflow_diff_files_limit , overflow_diff_lines_limit .
|
예제 요청:
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,
...
(중략)
"commits": [{
"id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"short_id": "33e2ee85",
...
}, {
...
}, {
...
}],
"diffs": [{
"old_path": "LICENSE",
"new_path": "LICENSE",
...
}]
}
병합 요청에 대한 시간 추정 설정
이 병합 요청에 대한 작업 예상 시간을 설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/time_estimate
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| integer 또는 string | 필수 | 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| integer | 필수 | 병합 요청의 내부 ID |
duration
| string | 필수 |
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": "3h 30m",
"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
| integer 또는 string | 필수 | 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| integer | 필수 | 프로젝트의 병합 요청의 내부 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
| integer 또는 string | 필수 | 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| integer | 필수 | 병합 요청의 내부 ID |
duration
| string | 필수 |
3h30m 과 같은 인간이 이해할 수 있는 형식의 기간
|
summary
| string | 아니오 | 시간이 어떻게 사용되었는지에 대한 요약 |
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": "1h",
"time_estimate": 0,
"total_time_spent": 3600
}
병합 요청에 대한 소요된 시간 재설정
이 병합 요청에 대한 총 소요된 시간을 0초로 재설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/reset_spent_time
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| integer 또는 string | 필수 | 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| integer | 필수 | 프로젝트의 병합 요청의 내부 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
| integer 또는 string | 필수 | 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| integer | 필수 | 병합 요청의 내부 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": "2h",
"human_total_time_spent": "1h",
"time_estimate": 7200,
"total_time_spent": 3600
}
승인
승인에 대해서는 병합 요청 승인을 확인하십시오.
병합 요청 상태 이벤트 목록
설정된 상태, 수행자 및 발생 시간을 추적하려면 리소스 상태 이벤트 API를 확인하십시오.
문제 해결
새로운 병합 요청의 빈 API 필드
병합 요청을 생성하면 diff_refs
및 changes_count
필드가 처음에는 비어 있습니다. 이러한 필드는 병합 요청을 생성한 후에 비동기적으로 채워집니다. 자세한 내용은 issue 386562 및 GitLab 포럼의 관련 토론을 참조하십시오.