- API v5의 삭제
- Merge Request 디렉터리
- 그룹 Merge Request 디렉터리
- 단일 MR 가져오기
- 단일 Merge Request 리뷰어 가져오기
- 단일 Merge Request 커밋 가져오기
- 단일 Merge Request 변경 사항 가져오기
- Merge Request 차이점 디렉터리
- Merge Request 파이프라인 디렉터리
- Merge Request 파이프라인 생성
- MR 생성
- MR 업데이트
- Merge Request 삭제
- Merge Request Merge
- 기본 Merge 참조 경로로 마지막 수정사항 Merge
- 파이프라인 성공 시 Merge 취소
- Merge Request(rebase) 재베이스하기
- Merge Request에 대한 코멘트
- Merge에 따라 닫힌 이슈 디렉터리
- Merge Request 구독하기
- Merge Request 구독 취소
- 할 일 항목 생성
- Merge Request 차이 버전 가져오기
- 단일 Merge Request 차이 버전 가져오기
- Merge Request에 대한 시간 추정 설정
- Merge Request에 대한 시간 추정 재설정
- Merge Request에 대한 소요시간 추가
- Merge Request에 대한 소요된 시간 재설정
- 시간 추적 통계 가져오기
- 승인
- Merge Request 상태 이벤트 디렉터리
- 문제 해결
Merge Request API
reference
는 GitLab 12.7에서 폐기되었습니다.draft
는 GitLab 14.0에서work_in_progress
의 대체로 도입되었습니다.merged_by
는 GitLab 14.7에서 폐기되었습니다.merge_user
는 GitLab 14.7에서merged_by
의 잠재적인 대체로 도입되었습니다.merge_status
는 GitLab 15.6에서detailed_merge_status
를 선호하여 폐기되었습니다.with_merge_status_recheck
는 GitLab 15.11에서 변경되었습니다 사용자에게 권한이 충분하지 않은 요청의 경우 무시될restrict_merge_status_recheck
라는 플래그로 기본적으로 비활성화됨.approvals_before_merge
는 GitLab 16.0에서 폐기되었습니다.prepared_at
는 GitLab 16.1에서 도입되었습니다.
API 호출을 위해서는 인증이 필요합니다.
API v5의 삭제
approvals_before_merge
속성이 폐기되었으며, API v5에서는 Merge Request 승인 API를 대신하여 제거될 예정입니다.
Merge Request 디렉터리
인증된 사용자가 액세스할 수있는 모든 Merge Request을 가져옵니다. 기본적으로 현재 사용자가 생성한 Merge Request만 반환됩니다. 모든 Merge Request을 가져오려면 scope=all
매개 변수를 사용하세요.
state
매개 변수를 사용하여 특정 상태(opened
, closed
, locked
, 또는 merged
)의 Merge Request만 또는 모든 Merge Request(all
)만 가져올 수 있습니다. locked
로 검색할 때 대부분 결과가 없어서 주로 짧은 수명의 전환 상태입니다. 페이지네이션 매개 변수 page
와 per_page
는 Merge Request 디렉터리을 제한하는 데 사용될 수 있습니다.
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 를 가진 모든 사용자에 의해 승인된 Merge Request을 반환합니다. 최대 5개까지. None 은 승인되지 않은 Merge Request을 반환합니다. Any 는 승인이있는 Merge Request을 반환합니다. Premium 및 Ultimate 전용.
|
approver_ids
| 정수 배열 | 아니요 | 개별 승인자로 지정된 모든 사용자가 있는 Merge Request을 반환합니다. None 은 승인자가없는 Merge Request을 반환합니다. Any 는 승인자가있는 Merge Request을 반환합니다. Premium 및 Ultimate 전용.
|
approved
| 문자열 | 아니요 | Merge Request을 approved 상태 yes 로 필터링합니다. yes 는 승인된 Merge Request만 반환합니다. no 는 승인되지 않은 Merge Request만 반환합니다. GitLab 15.11에서 사용 가능한 피처 플래그 mr_approved_filter 가 활성화된 경우에만 사용 가능합니다.
|
assignee_id
| 정수 | 아니요 | 특정 사용자 id 에 할당된 Merge Request을 반환합니다. None 은 할당되지 않은 Merge Request을 반환합니다. Any 는 할당된 Merge Request을 반환합니다.
|
author_id
| 정수 | 아니요 | 특정 사용자 id 가 작성한 Merge Request을 반환합니다. author_username 와 상호 배타적입니다. scope=all 또는 scope=assigned_to_me 와 결합하세요.
|
author_username
| 문자열 | 아니요 | 특정 username 을 작성한 Merge Request을 반환합니다. author_id 와 상호 배타적입니다.
|
created_after
| 날짜시간 | 아니요 | 지정된 시간 이후 또는 해당 시간에 생성된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
created_before
| 날짜시간 | 아니요 | 지정된 시간 이전 또는 해당 시간에 생성된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
deployed_after
| 날짜시간 | 아니요 | 지정된 날짜/시간 이후에 배포된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
deployed_before
| 날짜시간 | 아니요 | 지정된 날짜/시간 이전에 배포된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
environment
| 문자열 | 아니요 | 특정 환경으로 배포된 Merge Request을 반환합니다. |
in
| 문자열 | 아니요 |
search 속성의 범위를 수정합니다. title , description 또는 그것들을 쉼표로 구분하여 결합한 문자열. 기본값은 title,description 입니다.
|
labels
| 문자열 | 아니요 | 쉼표로 구분된 레이블 디렉터리과 일치하는 Merge Request을 반환합니다. None 은 레이블이없는 모든 Merge Request을 나열합니다. Any 은 적어도 하나의 레이블이있는 모든 Merge Request을 나열합니다. 미리 정의된 이름은 대소문자를 구분하지 않습니다.
|
merge_user_id
| 정수 | 아니요 | 지정된 사용자 id 에 의해 Merge된 Merge Request을 반환합니다. merge_user_username 과 상호 배타적입니다. GitLab 16.9에서 사용 가능한 피처 플래그 mr_merge_user_filter 가 활성화된 경우에만 사용 가능합니다.
|
merge_user_username
| 문자열 | 아니요 | 지정된 username 에 의해 Merge된 Merge Request을 반환합니다. merge_user_id 와 상호 배타적입니다. GitLab 16.9에서 사용 가능한 피처 플래그 mr_merge_user_filter 가 활성화된 경우에만 사용 가능합니다.
|
milestone
| 문자열 | 아니요 | 특정 이정표에 대한 Merge Request을 반환합니다. None 는 이정표가없는 Merge Request을 반환합니다. Any 는 할당된 이정표가있는 모든 Merge Request을 반환합니다.
|
my_reaction_emoji
| 문자열 | 아니요 | 특정 emoji 로 인증된 사용자가 반응한 Merge Request을 반환합니다. None 은 반응을하지 않은 이슈를 반환합니다. Any 은 적어도 한 번 이상 반응한 이슈를 반환합니다.
|
not
| 해시 | 아니요 | 제공된 매개 변수와 일치하지 않는 Merge Request을 반환합니다. 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 입니다. GitLab 14.8에서 도입되었습니다.
|
reviewer_id
| 정수 | 아니요 | 특정 사용자 id 가 Merge Request에 리뷰어로 있는지 여부를 반환합니다. None 은 리뷰어가없는 Merge Request을 반환합니다. Any 는 리뷰어가있는 Merge Request을 반환합니다. reviewer_username 과 상호 배타적입니다.
|
reviewer_username
| 문자열 | 아니요 | 특정 username 이 Merge Request에 리뷰어로 있는지 여부를 반환합니다. None 은 리뷰어가없는 Merge Request을 반환합니다. Any 는 리뷰어가있는 Merge Request을 반환합니다. reviewer_id 와 상호 배타적입니다.
|
scope
| 문자열 | 아니요 | 지정된 범위(created_by_me , assigned_to_me 또는 all )에 대한 Merge Request을 반환합니다. 기본값은 created_by_me 입니다.
|
search
| 문자열 | 아니요 |
title 과 description 에 대한 Merge Request을 검색합니다.
|
sort
| 문자열 | 아니요 |
asc 또는 desc 순서로 정렬된 요청을 반환합니다. 기본값은 desc 입니다.
|
source_branch
| 문자열 | 아니요 | 특정 소스 브랜치의 Merge Request을 반환합니다. |
state
| 문자열 | 아니요 | 모든 Merge Request 또는 opened , closed , locked , 또는 merged 만 반환합니다.
|
target_branch
| 문자열 | 여부 | 지정된 대상 브랜치의 Merge Request을 반환합니다. |
updated_after
| 날짜시간 | 아니요 | 지정된 시간 이후 또는 해당 시간에 업데이트된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
updated_before
| 날짜시간 | 아니요 | 지정된 시간 이전 또는 해당 시간에 업데이트된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
view
| 문자열 | 아니요 |
simple 로 반환하면 Merge Request의 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 를 활성화하세요.
|
wip
| 문자열 | 아니요 |
wip 상태에 따라 Merge Request을 필터링합니다. :only임시 Merge Request을 반환하려면 yes 를, 임시아 아닌 Merge Request을 반환하려면 no 를 사용하세요.
|
예시 응답:
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "로그인 페이지 CSS padding 수정",
"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": "
### Merge Request 디렉터리 응답 노트
- [소개됨](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/31890) in GitLab 13.0, Merge Request 디렉터리을 가져오는 것은 미리 `merge_status`를 업데이트하지 않을 수 있습니다(`has_conflicts`에도 영향을 미침). 비용이 많이 들 수 있는 작업이기 때문입니다. 이 엔드포인트에서 이 필드의 값을 필요로 하는 경우, 쿼리에서 `with_merge_status_recheck` 매개변수를 `true`로 설정하세요.
- Merge Request 객체 필드에 대한 노트는 [단일 Merge Request 응답 노트](#단일-Merge-요청-응답-노트)를 참조하세요.
## 프로젝트 Merge Request 디렉터리
이 프로젝트의 모든 Merge Request을 가져옵니다.
```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 or string | Yes | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. |
approved_by_ids
| integer array | No | 지정된 id 를 가진 모든 사용자에 의해 승인된 Merge Request을 반환하며, 최대 5개입니다. None 은 승인이 없는 Merge Request을 반환합니다. Any 는 승인이 있는 Merge Request을 반환합니다. Premium 및 Ultimate 전용.
|
approver_ids
| integer array | No | 특정 id 를 가진 모든 사용자가 개별적인 승인자로 지정한 Merge Request을 반환합니다. None 은 승인자가 없는 Merge Request을 반환합니다. Any 는 하나 이상의 승인자가 있는 Merge Request을 반환합니다. Premium 및 Ultimate 전용.
|
approved
| string | No |
approved 상태로 Merge Request을 필터링합니다. yes 는 승인된 Merge Request만 반환합니다. no 는 승인되지 않은 Merge Request만 반환합니다. GitLab 15.11에 추가되었습니다. 특성 플래그 mr_approved_filter 가 활성화되었을 때에만 사용할 수 있습니다.
|
… | |||
… (중략) | |||
… |
응답에서:
-
project_id
는 Merge Request이 위치한 프로젝트의 ID를 나타냅니다.project_id
는 항상target_project_id
와 동일합니다. - 디렉터리의 Merge Request을 제한하는 페이지네이션 매개변수
page
와per_page
를 사용하세요. - 프로젝트 ID는 Merge Request이 프로젝트에서 시작한 것인지 또는 fork에서 시작한 것인지에 따라 다릅니다.
- 동일한 프로젝트의 경우:
target_project_id
,project_id
및source_project_id
는 동일합니다. - fork에서는:
target_project_id
및project_id
가 동일하지만source_project_id
는 fork 프로젝트의 ID입니다.
- 동일한 프로젝트의 경우:
응답의 예:
[
{
"id": 1,
"iid": 1,
...
...
...
}
]
응답 데이터에 대한 중요한 노트는 Merge Request 디렉터리 응답 노트를 참조하세요.
그룹 Merge Request 디렉터리
이 그룹과 하위 그룹의 모든 Merge Request을 가져옵니다.
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 를 가진 모든 사용자에 의해 승인된 Merge Request을 최대 5개까지 반환합니다. None 은 승인이 없는 Merge Request을, Any 은 승인된 Merge Request을 반환합니다. Premium 및 Ultimate 전용입니다.
|
approved_by_usernames
| 문자열 배열 | 아니오 | 주어진 username 을 가진 모든 사용자에 의해 승인된 Merge Request을 최대 5개까지 반환합니다. None 은 승인이 없는 Merge Request을, Any 은 승인된 Merge Request을 반환합니다. Premium 및 Ultimate 전용입니다.
|
approver_ids
| 정수 배열 | 아니오 | 지정된 모든 id 를 가진 사용자에 의해 승인된 Merge Request을 반환합니다. None 은 승인자가 없는 Merge Request을, Any 은 승인자가 있는 Merge Request을 반환합니다. Premium 및 Ultimate 전용입니다.
|
approved
| 문자열 | 아니오 |
approved 상태별로 Merge Request을 필터링합니다. yes 는 승인된 Merge Request만 반환합니다. no 는 미승인 Merge Request만 반환합니다. 도입됨: GitLab 15.11에서만 사용 가능하며 피처 플래그 mr_approved_filter 가 활성화되어 있는 경우에만 사용할 수 있습니다.
|
assignee_id
| 정수 | 아니오 | 주어진 사용자 id 에 할당된 Merge Request을 반환합니다. None 은 미할당된 Merge Request을, Any 은 담당자가 있는 Merge Request을 반환합니다.
|
author_id
| 정수 | 아니오 | 주어진 사용자 id 에 의해 생성된 Merge Request을 반환합니다. author_username 과 상호 배타적입니다.
|
author_username
| 문자열 | 아니오 | 주어진 username 에 의해 생성된 Merge Request을 반환합니다. author_id 와 상호 배타적입니다.
|
created_after
| 날짜 및 시간 | 아니오 | 주어진 시간 이후에 생성된 Merge Request을 반환합니다. ISO 8601 형식으로 예상됩니다 (2019-03-15T08:00:00Z ).
|
… (이하생략) … | |||
state
| 문자열 | 아니오 | 모든 Merge Request (all ) 또는 opened , closed , locked , 또는 merged 만을 반환합니다.
|
응답 데이터에 대한 중요한 참고 사항은 Merge Request 디렉터리 응답 사항을 참조하십시오.
단일 MR 가져오기
단일 Merge Request에 대한 정보를 표시합니다.
GET /projects/:id/merge_requests/:merge_request_iid
지원되는 속성:
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID입니다. |
include_diverged_commits_count
| 부울 | 아니요 |
true 인 경우 응답에 대상 브랜치 뒤에 있는 커밋이 포함됩니다.
|
include_rebase_in_progress
| 부울 | 아니요 |
true 인 경우 리베이스 작업이 진행 중인지에 대한 응답이 포함됩니다.
|
render_html
| 부울 | 아니요 |
true 인 경우 제목 및 설명에 대한 렌더링된 HTML이 응답에 포함됩니다.
|
응답
속성 | 유형 | 설명 |
---|---|---|
approvals_before_merge
| 정수 | 이 Merge Request을 Merge하기 전에 필요한 승인 수입니다. 승인 규칙을 구성하려면 Merge Request 승인 API를 참조하십시오. GitLab 16.0에서 폐기됨. Premium 및 Ultimate 전용입니다. |
assignee
| 객체 | Merge Request의 첫 번째 담당자입니다. |
assignees
| 배열 | Merge Request의 담당자입니다. |
author
| 객체 | 이 Merge Request을 생성한 사용자입니다. |
blocking_discussions_resolved
| 부울 | 모든 논의가 해결되었는지 표시합니다. 모든 논의가 Merge Request이 Merge되기 전에 필요한 경우에만 해당됩니다. |
changes_count
| 문자열 | Merge Request에 대한 변경 수입니다. Merge Request이 작성될 때는 비어 있으며, 비동기적으로 작성됩니다. 문자열이며 정수가 아닙니다. 표시 및 저장해야 할 변경 사항이 너무 많은 경우, 값이 1000으로 제한되고 문자열 "1000+" 이 반환됩니다. 새 Merge Request에 대한 비어있는 API 필드를 참조하십시오.
|
closed_at
| 날짜 및 시간 | Merge Request이 닫힌 시점의 타임스탬프입니다. |
closed_by
| 객체 | 이 Merge Request을 닫은 사용자입니다. |
created_at
| 날짜 및 시간 | Merge Request이 생성된 시점의 타임스탬프입니다. |
description
| 문자열 | Merge Request에 대한 설명입니다. 캐싱을 위해 HTML로 렌더링된 마크다운을 포함합니다. |
detailed_merge_status
| 문자열 | Merge Request의 자세한 Merge 상태입니다. 가능한 값은 Merge 상태를 참조하십시오. |
diff_refs
| 객체 | Merge Request의 베이스 SHA, 헤드 SHA 및 시작 SHA에 대한 참조입니다. Merge Request의 최신 diff 버전에 해당합니다. Merge Request이 작성된 경우 비어 있으며, 비동기적으로 작성됩니다. 비어 있는 API 필드에 대한를 참조하십시오. |
discussion_locked
| 부울 | Merge Request에 대한 코멘트가 멤버 전용인지를 표시합니다. |
downvotes
| 정수 | Merge Request에 대한 반대 투표 수입니다. |
draft
| 부울 | Merge Request이 임시 저장 상태인지 표시합니다. |
first_contribution
| 부울 | Merge Request이 저자의 첫 번째 기여인지 표시합니다. |
first_deployed_to_production_at
| 날짜 및 시간 | 첫 번째 배포가 완료된 시점의 타임스탬프입니다. |
force_remove_source_branch
| 부울 | 프로젝트 설정이 Merge 후에 소스 브랜치 삭제로 이어지는지 표시합니다. |
has_conflicts
| 부울 | Merge Request에 충돌이 있어서 Merge할 수 없는지를 표시합니다. merge_status 속성에 따라서 의존적입니다. merge_status 가 cannot_be_merged 인 경우에만 false 를 반환합니다.
|
head_pipeline
| 객체 | Merge Request의 브랜치 HEAD에서 실행되는 파이프라인입니다. pipeline 보다 더 완전한 정보를 포함하며, 대신 사용해야 합니다.
|
id
| 정수 | Merge Request의 ID입니다. |
iid
| 정수 | Merge Request의 내부 ID입니다. |
labels
| 배열 | Merge Request의 라벨입니다. |
latest_build_finished_at
| 날짜 및 시간 | Merge Request에 대한 최신 빌드가 완료된 시점의 타임스탬프입니다. |
latest_build_started_at
| 날짜 및 시간 | Merge Request에 대한 최신 빌드가 시작된 시점의 타임스탬프입니다. |
merge_commit_sha
| 문자열 | Merge Request 커밋의 SHA입니다. Merge되기 전까지 null 을 반환합니다.
|
merge_error
| 문자열 | Merge에 실패했을 때 표시되는 오류 메시지입니다. Merge 가능성을 확인하려면 대신 detailed_merge_status 를 사용하십시오.
|
merge_user
| 객체 | 이 Merge Request을 Merge한 사용자 또는 자동 Merge 설정한 사용자, 또는 null 을 반환합니다. GitLab 14.7에서 도입.
|
merge_status
| 문자열 | Merge Request의 상태입니다. unchecked , checking , can_be_merged , cannot_be_merged , cannot_be_merged_recheck 가 될 수 있습니다. has_conflicts 속성에 영향을 줍니다. 응답 데이터에 대한 중요한 참고 사항은 단일 Merge Request 응답 참고를 참조하십시오. GitLab 15.6에서 폐기. 대신 detailed_merge_status 를 사용하십시오.
|
merge_when_pipeline_succeeds
| 부울 | 파이프라인이 성공할 때 Merge이 이루어지도록 설정되었는지를 표시합니다. |
merged_at
| 날짜 및 시간 | Merge Request이 Merge된 시점의 타임스탬프입니다. |
merged_by
| 객체 | 이 Merge Request을 Merge한 사용자 또는 자동 Merge 설정한 사용자입니다. GitLab 14.7에서 폐기. 대신 merge_user 를 사용하십시오.
|
milestone
| 객체 | Merge Request의 마일스톤입니다. |
pipeline
| 객체 | Merge Request의 브랜치 HEAD에서 실행되는 파이프라인입니다. head_pipeline 대신 사용하는 것을 고려하십시오.
|
prepared_at
| 날짜 및 시간 | Merge Request이 준비된 시점의 타임스탬프입니다. 이 필드는 준비 단계가 모두 완료되면 한 번만 채워지며, 추가 변경 사항이 있는 경우에는 업데이트되지 않습니다. |
project_id
| 정수 | Merge Request 프로젝트의 ID입니다. |
reference
| 문자열 | Merge Request의 내부 참조입니다. 기본값으로 짧은 형식으로 반환됩니다. GitLab 12.7에서 폐기. API 버전 5에서 삭제 예정입니다. 대신 references 를 사용하십시오.
|
references
| 객체 | Merge Request의 내부 참조입니다. short , relative , full 참조를 포함합니다. references.relative 는 Merge Request의 그룹이나 프로젝트에 상대적입니다. Merge Request의 프로젝트에서 요청된 경우, relative 및 short 형식이 동일합니다. 그룹이나 프로젝트 간 요청된 경우, relative 및 full 형식이 동일합니다.
|
reviewers
| 배열 | Merge Request의 리뷰어입니다. |
sha
| 문자열 | Merge Request의 Diff 헤드 SHA입니다. |
should_remove_source_branch
| 부울 | Merge Request의 소스 브랜치가 Merge 후에 삭제되어야 하는지를 표시합니다. |
source_branch
| 문자열 | Merge Request의 소스 브랜치입니다. |
source_project_id
| 정수 | Merge Request 소스 프로젝트의 ID입니다. |
squash
| 부울 | Merge 시 스쿼시가 활성화되었는지를 표시합니다. |
squash_commit_sha
| 문자열 | 스쿼시 커밋의 SHA입니다. Merge할 때까지 비어 있습니다. |
state
| 문자열 | Merge Request의 상태입니다. opened , closed , merged , locked 가 될 수 있습니다.
|
subscribed
| 부울 | 현재 인증된 사용자가 이 Merge Request에 구독했는지를 표시합니다. |
target_branch
| 문자열 | Merge Request의 대상 브랜치입니다. |
target_project_id
| 정수 | Merge Request 대상 프로젝트의 ID입니다. |
task_completion_status
| 객체 | 작업의 완료 상태입니다. |
title
| 문자열 | Merge Request의 제목입니다. |
updated_at
| 날짜 및 시간 | Merge Request이 업데이트된 시점의 타임스탬프입니다. |
upvotes
| 정수 | Merge Request에 대한 찬성 투표 수입니다. |
user
| 객체 | Merge Request을 요청한 사용자의 권한입니다. |
user_notes_count
| 정수 | Merge Request의 사용자 노트 수입니다. |
web_url
| 문자열 | Merge Request의 웹 URL입니다. |
work_in_progress
| 부울 | 폐기됨: 대신 draft 를 사용하십시오. Merge Request이 임시 상태인지를 표시합니다.
|
예시 응답:
{
"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, // 폐기되었으며 API v5에서 제거될 예정입니다. `merge_user`를 사용하십시오.
"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", // 폐기됨. `references`를 사용하십시오.
"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, // 폐기됨, [Merge Request 승인 API]를 사용하십시오.
"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": { // `head_pipeline`를 대
### 단일 Merge Request 응답 참고사항
이 엔드포인트에 요청을 보낼 때 각 Merge Request의 Merge 가능성(`merge_status`)은 비동기적으로 확인됩니다. 업데이트된 상태를 얻으려면 이 API 엔드포인트를 주기적으로 확인하세요. 이는 `has_conflicts` 속성에 영향을 미치며 `merge_status`에 종속되어 있으므로 `merge_status`가 `cannot_be_merged`인 경우를 제외하고는 `false`를 반환합니다.
### Merge 상태
> - `merge_status` 필드는 GitLab 15.6에서 [폐기되었습니다](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` 필드에는 Merge Request과 관련된 다음 값 중 하나가 포함될 수 있습니다:
- `blocked_status`: 다른 Merge Request에 의해 차단됨.
- `broken_status`: 잠재적인 충돌로 대상 브랜치에 Merge할 수 없음.
- `checking`: 유효한 Merge이 가능한지 Git에서 테스트 중.
- `unchecked`: 유효한 Merge이 가능한지 Git에서 아직 테스트되지 않음.
- `ci_must_pass`: Merge하기 전에 CI/CD 파이프라인을 성공시켜야 함.
- `ci_still_running`: CI/CD 파이프라인이 아직 실행 중.
- `discussions_not_resolved`: Merge하기 전에 모든 토론을 해결해야 함.
- `draft_status`: Merge Request이 초안이므로 Merge할 수 없음.
- `external_status_checks`: Merge하기 전에 모든 상태 확인을 통과해야 함.
- `mergeable`: 브랜치가 대상 브랜치에 깔끔하게 Merge될 수 있음.
- `not_approved`: Merge하기 전에 승인이 필요함.
- `not_open`: Merge하기 전에 Merge Request이 열려 있어야 함.
- `jira_association_missing`: 제목 또는 설명에 Jira 이슈를 참조해야 함.
### 준비 단계
`prepared_at` 필드는 모든 준비 단계가 완료된 후에만 한 번만 채워집니다. Merge Request에 추가 변경 사항이 있는 경우에는 업데이트되지 않습니다:
- 차이가 생성됨.
- 파이프라인이 생성됨.
- Merge 가능성이 확인됨.
- Git LFS 객체가 연결됨.
- 알림이 전송됨.
## 단일 Merge Request 참가자 가져오기
Merge Request 참가자 디렉터리을 가져옵니다.
```plaintext
GET /projects/:id/merge_requests/:merge_request_iid/participants
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩 된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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"
}
]
단일 Merge Request 리뷰어 가져오기
Merge Request 리뷰어 디렉터리을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/reviewers
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩 된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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"
}
]
단일 Merge Request 커밋 가져오기
Merge Request 커밋 디렉터리을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/commits
지원되는 속성:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID. |
예시 응답:
[
{
"id": "ed899a2f4b50b4370feeea94676502b42383c746",
"short_id": "ed899a2f4b5",
"title": "sanitize를 escape로 한 번으로 대체",
"author_name": "예시 사용자",
"author_email": "user@example.com",
"created_at": "2012-09-20T11:50:22+03:00",
"message": "sanitize를 escape로 한 번으로 대체"
},
{
"id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
"short_id": "6104942438c",
"title": "네트워크 그래프용 살균",
"author_name": "예시 사용자",
"author_email": "user@example.com",
"created_at": "2012-09-20T09:06:12+03:00",
"message": "네트워크 그래프용 살균"
}
]
단일 Merge Request 변경 사항 가져오기
Merge Request에 대한 파일 및 변경 사항을 표시합니다.
GET /projects/:id/merge_requests/:merge_request_iid/changes
지원되는 속성:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID |
access_raw_diffs
| 부울 | 아니요 | Gitaly를 통해 변경 차이를 검색합니다. |
unidiff
| 부울 | 아니요 | 변경 차이를 통합된 차이 형식으로 나타냅니다. 기본값은 false입니다. GitLab 16.5에서 도입되었습니다. |
변경 세트와 관련된 diff에는 API 또는 UI를 통해 반환된 기타 diff에 적용된 크기 제한이 적용됩니다. 이러한 제한이 결과에 영향을 미칠 때 overflow
필드에 true
값이 포함됩니다. 이러한 제한이 적용되지 않은 diff 데이터는 access_raw_diffs
매개변수를 추가하여 데이터베이스가 아닌 Gitaly에서 diff를 액세스함으로써 검색할 수 있습니다. 이 방법은 일반적으로 더 느리고 더 많은 리소스를 소비하지만 데이터베이스를 백업하는 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
}
Merge Request 차이점 디렉터리
generated_file
는 GitLab 16.9에 도입되었으며 기본으로 비활성화된collapse_generated_diff_files
라는 플래그가 있습니다.- GitLab 16.10에서 GitLab.com 및 Self-managed에 활성화되었습니다.
Merge Request에서 변경된 파일의 차이를 나열합니다.
GET /projects/:id/merge_requests/:merge_request_iid/diffs
지원되는 속성:
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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
}
]
Merge Request 파이프라인 디렉터리
Merge Request 파이프라인 디렉터리을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/pipelines
지원되는 속성:
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID. |
페이지네이션 매개변수 page
및 per_page
를 사용하여 변환의 디렉터리을 제한할 수 있습니다.
예시 응답:
[
{
"id": 77,
"sha": "959e04d7c7a30600c894bd3c0cd0e1ce7f42c11d",
"ref": "main",
"status": "success"
}
]
Merge Request 파이프라인 생성
Merge Request을 위한 새 파이프라인을 생성합니다.
이 엔드포인트에서 생성된 파이프라인은 일반 브랜치/태그 파이프라인을 실행하지 않습니다.
작업을 만들려면 .gitlab-ci.yml
을 only: [merge_requests]
로 구성해야 합니다.
새로운 파이프라인은 다음과 같을 수 있습니다:
- 분리된 Merge Request 파이프라인.
- 결합된 결과 파이프라인 프로젝트 설정이 활성화되었을 경우.
POST /projects/:id/merge_requests/:merge_request_iid/pipelines
지원되는 속성:
속성 | 유형 | 필수여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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"
}
}
MR 생성
새로운 Merge Request을 생성합니다.
POST /projects/:id/merge_requests
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-encoded path |
source_branch
| 문자열 | 예 | 소스 브랜치 |
target_branch
| 문자열 | 예 | 대상 브랜치 |
title
| 문자열 | 예 | Merge Request의 제목 |
allow_collaboration
| 부울 | 아니요 | 대상 브랜치에 Merge할 수 있는 멤버의 커밋을 허용합니다. |
approvals_before_merge
| 정수 | 아니요 | 이 Merge Request이 Merge되기 전에 필요한 승인 횟수 (아래 참조). 승인 규칙을 구성하려면 Merge Request 승인 API를 참조하십시오. GitLab 16.0에서 Deprecated. Premium 및 Ultimate 전용. |
allow_maintainer_to_push
| 부울 | 아니요 |
allow_collaboration 의 별칭
|
assignee_id
| 정수 | 아니요 | 할당된 사용자 ID |
assignee_ids
| 정수 배열 | 아니요 | Merge Request을 할당할 사용자의 ID. 모든 할당을 해제하려면 0 을 설정하거나 빈 값을 제공하십시오.
|
description
| 문자열 | 아니요 | Merge Request에 대한 설명. 1,048,576자로 제한됩니다. |
labels
| 문자열 | 아니요 | Merge Request의 레이블을 쉼표로 구분된 디렉터리으로 지정합니다. |
milestone_id
| 정수 | 아니요 | 마일스톤의 전역 ID |
remove_source_branch
| 부울 | 아니요 | Merge 시 소스 브랜치를 제거해야 하는지 여부를 나타내는 플래그 |
reviewer_ids
| 정수 배열 | 아니요 | Merge Request에 리뷰어로 추가된 사용자의 ID. 0 으로 설정하거나 비워둘 경우 리뷰어가 추가되지 않습니다.
|
squash
| 부울 | 아니요 | Merge Request이 Merge될 때 스쿼시 여부를 나타냅니다. 프로젝트 설정에서이 값을 재정의 할 수 있습니다. |
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"
},
…
}
응답 데이터에 대한 중요한 참고 사항은 단일 Merge Request 응답 노트를 참조하십시오.
MR 업데이트
기존의 Merge Request을 업데이트할 수 있습니다. 대상 브랜치, 제목을 변경하거나 Merge Request을 닫을 수 있습니다.
PUT /projects/:id/merge_requests/:merge_request_iid
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| integer or string | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| integer | 예 | Merge Request의 ID |
add_labels
| string | 아니요 | Merge Request에 추가할 쉼표로 구분된 라벨 이름 |
allow_collaboration
| boolean | 아니요 | 대상 브랜치로 Merge할 수 있는 멤버의 커밋 허용 여부 |
allow_maintainer_to_push
| boolean | 아니요 |
allow_collaboration 의 별칭
|
assignee_id
| integer | 아니요 | Merge Request을 할당할 사용자의 ID. 모든 담당자를 할당 해제하려면 0 을 설정하거나 비어 있는 값을 제공하세요.
|
assignee_ids
| integer array | 아니요 | Merge Request을 할당할 사용자의 ID 디렉터리. 모든 담당자를 할당 해제하려면 0 을 설정하거나 비어 있는 값을 제공하세요.
|
description
| string | 아니요 | Merge Request의 설명. 1,048,576자로 제한됩니다. |
discussion_locked
| boolean | 아니요 | Merge Request의 토론이 잠겨 있는지 여부를 나타내는 플래그. 토론이 잠겨 있으면 프로젝트 멤버만 코멘트를 추가, 편집 또는 해결할 수 있습니다. |
labels
| string | 아니요 | Merge Request을 위한 쉼표로 구분된 라벨 이름. 모든 라벨을 할당 해제하려면 빈 문자열로 설정하세요. |
milestone_id
| integer | 아니요 | Merge Request을 할당 할 마일스톤의 글로벌 ID. 마일스톤을 할당 해제하려면 0 을 설정하거나 비어 있는 값을 제공하세요.
|
remove_labels
| string | 아니요 | Merge Request에서 제거할 쉼표로 구분된 라벨 이름 |
remove_source_branch
| boolean | 아니요 | Merge할 때 소스 브랜치를 제거해야 하는지 여부를 나타내는 플래그 |
reviewer_ids
| integer array | 아니요 | Merge Request을 리뷰어로 설정한 사용자의 ID. 모든 리뷰어를 할당 해제하려면 0 을 설정하거나 비어 있는 값을 제공하세요.
|
squash
| boolean | 아니요 | Merge Request을 Merge할 때 스쿼시할지 여부를 나타냅니다. 프로젝트 설정에서 이 값을 무시할 수 있습니다. |
state_event
| string | 아니요 | 새 상태 (close/reopen). |
target_branch
| string | 아니요 | 대상 브랜치 |
title
| string | 아니요 | Merge Request의 제목 |
위에서 하나 이상의 필수가 아닌 속성을 반드시 포함해야 합니다.
예시 응답:
{
"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,
...
}
응답 데이터에 대한 중요한 참고 사항은 단일 Merge Request 응답 참고 사항을 참조하세요.
Merge Request 삭제
관리자 및 프로젝트 소유자 전용. 문제의 Merge Request을 삭제합니다.
DELETE /projects/:id/merge_requests/:merge_request_iid
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID. |
curl --request DELETE \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/4/merge_requests/85"
Merge Request Merge
이 API를 사용하여 Merge Request으로 제출된 변경 사항을 수락하고 Merge합니다.
PUT /projects/:id/merge_requests/:merge_request_iid/merge
지원되는 속성:
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩된 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID. |
merge_commit_message
| 문자열 | 아니오 | 사용자 정의 Merge 커밋 메시지. |
merge_when_pipeline_succeeds
| 부울 | 아니오 |
true 이면, 파이프라인이 성공하면 Merge Request이 Merge됩니다.
|
sha
| 문자열 | 아니오 | 존재하는 경우, 이 SHA는 출처 브랜치의 HEAD와 일치해야 합니다. 그렇지 않은 경우 Merge이 실패합니다. |
should_remove_source_branch
| 부울 | 아니오 |
true 이면 출처 브랜치가 제거됩니다.
|
squash_commit_message
| 문자열 | 아니오 | 사용자 정의 스쿼시 커밋 메시지. |
squash
| 부울 | 아니오 |
true 이면 Merge 시 커밋이 하나의 커밋으로 스쿼시됩니다.
|
이 API는 실패 시 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 코드 | 메시지 | 이유 |
---|---|---|
401
| 401 Unauthorized
| 이 사용자는 해당 Merge Request을 수락할 권한이 없습니다. |
405
| 405 Method Not Allowed
| Merge Request을 Merge할 수 없습니다. |
409
| SHA does not match HEAD of source branch
| 제공된 sha 매개변수가 출처의 HEAD와 일치하지 않습니다.
|
422
| Branch cannot be merged
| Merge Request을 Merge하는 데 실패했습니다. |
응답 데이터의 추가 중요 사항에 대한 자세한 내용은 단일 Merge Request 응답 노트를 참조하십시오.
예시 응답:
{
"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"
},
...
}
기본 Merge 참조 경로로 마지막 수정사항 Merge
가능한 경우, Merge Request 소스와 대상 브랜치 간의 변경 사항을 대상 프로젝트 리포지터리의 refs/merge-requests/:iid/merge
참조로 Merge합니다. 이 참조는 일반적인 Merge 작업을 수행한 경우 대상 브랜치가 가지는 상태를 나타냅니다.
본 작업은 Merge Request 대상 브랜치의 상태를 어떠한 방식으로도 변경하지 않기 때문에 일반적인 Merge 작업과는 다릅니다.
이 참조(refs/merge-requests/:iid/merge
)는 API에 요청을 제출할 때 덮어쓰여질 필요는 없지만, 최신 상태를 보장합니다.
GET /projects/:id/merge_requests/:merge_request_iid/merge_ref
지원되는 속성:
속성 | 타입 | 필요 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID |
이 API는 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 코드 | 메시지 | 이유 |
---|---|---|
200
| (없음) | 성공. refs/merge-requests/:iid/merge 의 HEAD 커밋을 반환합니다.
|
400
| Merge request is not mergeable
| Merge Request에 충돌이 있습니다. |
400
| Merge ref cannot be updated
| |
400
| Unsupported operation
| GitLab 데이터베이스가 읽기 전용 모드에 있습니다. |
예시 응답:
{
"commit_id": "854a3a7a17acbcc0bbbea170986df1eb60435f34"
}
파이프라인 성공 시 Merge 취소
POST /projects/:id/merge_requests/:merge_request_iid/cancel_merge_when_pipeline_succeeds
지원되는 속성:
속성 | 타입 | 필요 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID |
이 API는 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 코드 | 메시지 | 이유 |
---|---|---|
201
| (없음) | 성공 또는 Merge Request이 이미 Merge되었습니다. |
406
| Can't cancel the automatic merge
| Merge Request이 닫혀 있습니다. |
응답 데이터에 대한 중요한 참고 사항은 단일 Merge Request 응답 참고를 참조하세요.
예시 응답:
{
"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,
// 이하 생략...
}
Merge Request(rebase) 재베이스하기
Merge Request의 source_branch
를 해당 target_branch
에 자동으로 재베이스합니다.
PUT /projects/:id/merge_requests/:merge_request_iid/rebase
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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
| Cannot push to source branch
| Merge Request의 소스 브랜치로 푸시할 수 없음. |
403
| Source branch does not exist
| Merge Request의 소스 브랜치가 존재하지 않음. |
403
| Source branch is protected from force push
| Merge Request의 소스 브랜치에 대한 강제 푸시가 보호됨. |
409
| Failed to enqueue the rebase operation
| 오랜 지속 트랜잭션이 요청을 차단했을 수 있음. |
요청이 성공적으로 대기열에 추가되면 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": true
}
비동기 요청의 상태를 확인하려면 단일 MR 가져오기 엔드포인트에 include_rebase_in_progress
매개변수를 사용할 수 있습니다.
재베이스 작업이 진행 중이면 응답에 다음이 포함됩니다:
{
"rebase_in_progress": true,
"merge_error": null
}
재베이스 작업이 성공적으로 완료된 후 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": false,
"merge_error": null
}
재베이스 작업이 실패한 경우 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": false,
"merge_error": "Rebase failed. Please rebase locally"
}
Merge Request에 대한 코멘트
코멘트는 notes 리소스에 의해 생성됩니다.
Merge에 따라 닫힌 이슈 디렉터리
제공된 Merge Request을 통해 닫히게 될 모든 이슈를 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/closes_issues
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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" : "Title of this issue"
}
]
Merge Request 구독하기
인증된 사용자를 Merge Request에 구독하여 알림을 수신합니다.
POST /projects/:id/merge_requests/:merge_request_iid/subscribe
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 경로. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID. |
사용자가 이미 Merge Request에 구독되어 있는 경우, 상태 코드 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",
...
// (내용이 매우 길어 중략)
...
"subscribed": false,
"changes_count": "1",
"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 Request 응답 노트를 참조하십시오.
Merge Request 구독 취소
인증된 사용자를 특정 Merge Request에서의 알림을 받지 않도록 Merge Request에서 구독을 취소합니다.
POST /projects/:id/merge_requests/:merge_request_iid/unsubscribe
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩된 경로 |
merge_request_iid
| integer | 예 | Merge Request의 내부 ID |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/merge_requests/17/unsubscribe"
사용자가 Merge Request에 구독되어 있지 않은 경우, 상태 코드 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"
},
"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": 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": "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,
"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
}
}
응답 데이터에 대한 중요한 노트는 단일 Merge Request 응답 노트를 참조하십시오.
할 일 항목 생성
현재 사용자의 머지 요청에 대한 할 일 항목을 매뉴얼으로 작성합니다. 만약 해당 머지 요청에 대한 사용자의 할 일 항목이 이미 존재한다면, 상태 코드 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"
}
Merge Request 차이 버전 가져오기
Merge Request 차이 버전 디렉터리을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/versions
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| 문자열 | 예 | 프로젝트의 ID입니다. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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
| 소스 브랜치와 대상 브랜치간의 Merge 베이스 커밋 SHA입니다. |
head_commit_sha
| 소스 브랜치의 HEAD 커밋입니다. |
start_commit_sha
| Merge Request 차이 버전을 생성할 때 대상 브랜치의 HEAD 커밋 SHA입니다. |
단일 Merge Request 차이 버전 가져오기
단일 Merge Request 차이 버전을 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/versions/:version_id
속성 | 유형 | 필요 여부 | 설명 |
---|---|---|---|
id
| 문자열 | 예 | 프로젝트의 ID입니다. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 ID입니다. |
version_id
| 정수 | 예 | Merge Request 차이 버전의 ID입니다. |
unidiff
| 부울 | 아니오 | 통합된 diff 형식으로 차이를 표시합니다. 기본값은 false입니다. 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\nof this software and associated documentation files (the \"Software\"), to deal\nin the software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the software, and to permit persons to whom the software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
"new_file": true,
"renamed_file": false,
"deleted_file": false
}]
}
Merge Request에 대한 시간 추정 설정
이 Merge Request에 대한 작업 예상 소요 시간을 설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/time_estimate
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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": "3h 30m",
"human_total_time_spent": null,
"time_estimate": 12600,
"total_time_spent": 0
}
Merge Request에 대한 시간 추정 재설정
이 Merge Request에 대한 추정 시간을 0초로 재설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/reset_time_estimate
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 프로젝트의 Merge Request의 내부 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
}
Merge Request에 대한 소요시간 추가
이 Merge Request에 대한 소요 시간을 추가합니다.
POST /projects/:id/merge_requests/:merge_request_iid/add_spent_time
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | Merge Request의 내부 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": "1h",
"time_estimate": 0,
"total_time_spent": 3600
}
Merge Request에 대한 소요된 시간 재설정
이 Merge Request에 대한 총 소요된 시간을 0초로 재설정합니다.
POST /projects/:id/merge_requests/:merge_request_iid/reset_spent_time
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로입니다. |
merge_request_iid
| 정수 | 예 | 프로젝트의 Merge Request의 내부 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
| 정수 | 예 | Merge Request의 내부 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
}
승인
승인에 대한 자세한 내용은 Merge Request 승인을 참조하세요.
Merge Request 상태 이벤트 디렉터리
설정된 상태, 설정한 사용자 및 설정한 시간을 추적하는 상태 이벤트 디렉터리은 리소스 상태 이벤트 API에서 확인하세요.
문제 해결
새 Merge Request에 대한 빈 API 필드
Merge Request이 생성되면 diff_refs
및 changes_count
필드가
처음에는 비어 있습니다. 이러한 필드는 Merge Request이 생성된 후 비동기적으로
채워집니다. 자세한 내용은 이슈
Some merge request API fields (diff_refs
, changes_count
) empty after MR is created 및 GitLab 포럼의
관련 토론을 참조하세요.