- API v5에서 제거된 사항
- Merge Request 디렉터리
- 프로젝트 Merge Request 디렉터리
- 그룹 Merge Request 디렉터리
- 단일 MR 가져오기
- 단일 Merge Request 참여자 가져오기
- 단일 Merge Request 리뷰어 가져오기
- 단일 Merge Request 커밋 가져오기
- 단일 Merge Request 변경 내용 가져오기
- Merge Request 차이점 디렉터리
- Merge Request 파이프라인 디렉터리
- Merge Request 파이프라인 생성
- MR 생성
- MR 업데이트
- Merge Request 삭제
- Merge Request Merge
- 기본 Merge 참조 경로에 Merge
- 파이프라인이 성공한 경우 Merge 취소
- 머지 요청의 다시베이스
- 머지 요청에 대한 코멘트
- 머지 시 닫히는 이슈 디렉터리
- 머지 요청 구독
- Merge Request 취소
- 단일 Merge Request 차이 버전 가져오기
- Merge Request의 시간 추정 설정
- Merge Request의 시간 추정 재설정
- Merge Request에 소요된 시간 추가
- Merge Request의 소요 시간 재설정
- 시간 추적 통계 가져오기
Merge Request API
reference
는 GitLab 12.7에서 폐지되었습니다.merged_by
는 GitLab 14.7에서 폐지되었습니다.merge_status
는 GitLab 15.6에서detailed_merge_status
로 대체되어 폐지되었습니다.with_merge_status_recheck
는 GitLab 15.11에서 변경되었습니다 with a flag“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만 또는 모두(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
| integer array | 아니요 | 주어진 id 를 가진 모든 사용자에서 승인 된 Merge Request을 반환합니다. 최대 5개. None 은 승인이없는 Merge Request을 반환합니다. Any 는 승인이있는 Merge Request을 반환합니다. Premium 및 Ultimate 전용입니다.
|
approver_ids
| integer array | 아니요 | 주어진 id 를 가진 사용자를 개별 승인자로 지정한 Merge Request을 반환합니다. None 은 승인자가없는 Merge Request을 반환합니다. Any 는 승인자가있는 Merge Request을 반환합니다. Premium 및 Ultimate 전용입니다.
|
approved
| string | 아니요 |
approved 상태로 Merge Request을 필터링합니다. yes 는 승인된 Merge Request 만 반환합니다. no 는 미승인 Merge Request만 반환합니다. GitLab 15.11에 도입되었으며 기본적으로 비활성화된 ‘mr_approved_filter’ 플래그로 제공됩니다.
|
assignee_id
| integer | 아니요 | 주어진 사용자 id 에 할당된 Merge Request을 반환합니다. None 은 할당되지 않은 Merge Request을 반환합니다. Any 는 할당 된 Merge Request을 반환합니다.
|
author_id
| integer | 아니요 | 주어진 사용자 id 가 만든 Merge Request을 반환합니다. author_username 과 상호 배타적입니다. scope=all 이나 scope=assigned_to_me 와 결합하십시오.
|
author_username
| string | 아니요 | 주어진 username 이 만든 Merge Request을 반환합니다. author_id 와 상호 배타적입니다.
|
created_after
| datetime | 아니요 | 주어진 시간 이후 또는 같이 만들어진 Merge Request을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z )으로 예상됩니다.
|
created_before
| datetime | 아니요 | 주어진 시간 이후 또는 같이 만들어진 Merge Request을 반환합니다. created_at 으로 기본 설정되어있습니다. 도입되었습니다.
|
reviewer_id
| integer | 아니요 | 사용자를 리뷰어로 지정한 Merge Request을 반환합니다. None 은 리뷰어가없는 Merge Request을 반환합니다. Any 는 리뷰어가있는 Merge Request을 반환합니다. reviewer_username 과 상호 배타적입니다.
|
reviewer_username
| string | 아니요 | 주어진 username 으로 지정된 리뷰어로 Merge Request을 반환합니다. reviewer_id 와 상호 배타적입니다.
|
state
| string | 아니요 | 모든 Merge Request 또는 opened , closed , locked , 또는 merged 상태 만 반환합니다.
|
updated_after
| datetime | 아니요 | 주어진 시간 이후 또는 같이 업데이트된 Merge Request을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z )으로 예상됩니다.
|
updated_before
| datetime | 아니요 | 주어진 시간 이전 또는 같이 업데이트된 Merge Request을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z )으로 예상됩니다.
|
예시 응답:
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
...
}
]
Merge Request 디렉터리 응답 노트
- Merge Request 디렉터리을 나열하는 것은 ‘merge_status’ (또한 ‘has_conflicts’에 영향을 미침)을 미리 활성화하지 않을 수 있습니다. 이는 비용이 많이들 수 있기 때문입니다. 이 엔드포인트에서 이러한 필드의 값을 필요로 하는 경우 쿼리에서
with_merge_status_recheck
매개변수를true
로 설정하세요. - Merge Request 개체 필드에 대한 주의사항은 단일 Merge Request 응답 노트를 참조하세요.
프로젝트 Merge Request 디렉터리
이 프로젝트에 대한 모든 Merge Request을 가져옵니다.
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로 인코딩된 경로입니다. |
approved_by_ids
| 정수 배열 | 아니요 | 주어진 id 를 가진 모든 사용자에 의해 승인된 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
| 문자열 | 아니요 | Merge Request을 approved 상태에 따라 필터링합니다. 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 )으로 예상됩니다.
|
created_before
| 날짜/시간 | 아니요 | 주어진 시간 이전에 생성된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 예상됩니다.
|
environment
| 문자열 | 아니요 | 주어진 환경에 배포된 Merge Request을 반환합니다. |
iids[]
| 정수 배열 | 아니요 | 주어진 iid 를 가진 요청을 반환합니다.
|
labels
| 문자열 | 아니요 | 쉼표로 구분된 라벨 디렉터리과 일치하는 Merge Request을 반환합니다. None 은 라벨이 없는 모든 Merge Request을 나열하고, Any 는 적어도 하나의 라벨이 있는 모든 Merge Request을 반환합니다. 미리 정의된 이름은 대소문자를 구분하지 않습니다.
|
merge_user_id
| 정수 | 아니요 | 주어진 사용자 id 가 Merge한 Merge Request을 반환합니다. merge_user_username 과 상호 배타적입니다. GitLab 17.0에서 도입되었습니다.
|
merge_user_username
| 문자열 | 아니요 | 주어진 username 이 Merge한 Merge Request을 반환합니다. merge_user_id 와 상호 배타적입니다. GitLab 17.0에서 도입되었습니다.
|
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 입니다.
|
reviewer_id
| 정수 | 아니요 | 주어진 사용자 id 가 리뷰어로 있는 Merge Request을 반환합니다. None 은 리뷰어가 없는 Merge Request을 반환하고, Any 는 리뷰어가 있는 Merge Request을 반환합니다. 상호 배타적입니다.
|
reviewer_username
| 문자열 | 아니요 | 주어진 username 이 리뷰어로 있는 Merge Request을 반환합니다. None 은 리뷰어가 없는 Merge Request을 반환하고, Any 는 리뷰어가 있는 Merge Request을 반환합니다. 상호 배타적입니다.
|
scope
| 문자열 | 아니요 | 주어진 범위에 대한 Merge Request을 반환합니다: created_by_me , assigned_to_me , 또는 all .
|
search
| 문자열 | 아니요 | Merge Request을 title 및 description 에 대해 검색합니다.
|
sort
| 문자열 | 아니요 |
asc 또는 desc 순으로 요청을 반환합니다. 기본값은 desc 입니다.
|
source_branch
| 문자열 | 아니요 | 주어진 소스 브랜치의 Merge Request을 반환합니다. |
state
| 문자열 | 아니요 | 모든 Merge Request (all ) 또는 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, 제목, 설명 및 기본 상태를 반환합니다.
|
wip
| 문자열 | 아니요 | Merge Request을 wip 상태에 대해 필터링합니다. draft Merge Request만 반환하려면 yes 를, draft가 아닌 Merge Request을 반환하려면 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 이상에서는 사용자가 최소한 Developer 역할을 가지지 않은 경우 이 속성은 무시될 수 있도록 하려면 restrict_merge_status_recheck 피처 플래그을 활성화하세요.
|
응답에서:
-
project_id
는 Merge Request이 있는 프로젝트의 ID를 나타냅니다.project_id
는 항상target_project_id
와 동일합니다. - 디렉터리의 Merge Request을 제한하려면 페이징 매개변수
page
와per_page
를 사용하세요. - 프로젝트 ID는 Merge Request이 프로젝트에서 시작한 것과 포크에서 시작한 것에 따라 다릅니다.
- 동일한 프로젝트에서:
target_project_id
,project_id
, 및source_project_id
는 동일합니다. - 포크에서:
target_project_id
와project_id
는 동일하지만,source_project_id
는 포크 프로젝트의 ID입니다.
- 동일한 프로젝트에서:
예시 응답:
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"imported": false,
"imported_from": "none",
.
.
.
}
]
응답 데이터에 대한 중요한 주의사항은 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-encoded path. |
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
| 문자열 | 아니오 | Merge Request을 approved 상태에 따라 필터링합니다. 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 )으로 입력합니다.
|
created_before
| 날짜 및 시간 | 아니오 | 주어진 시간 이전에 생성된 Merge Request을 반환합니다. ISO 8601 형식(2019-03-15T08:00:00Z )으로 입력합니다.
|
labels
| 문자열 | 아니오 | 쉼표로 구분된 라벨 디렉터리과 일치하는 Merge Request을 반환합니다. None 은 라벨이 없는 모든 Merge Request을 나열합니다. Any 는 적어도 하나의 라벨이 있는 모든 Merge Request을 나열합니다. 미리 정의된 이름은 대소문자를 가리지 않습니다.
|
merge_user_id
| 정수 | 아니오 | 주어진 사용자 id 에 의해 Merge된 Merge Request을 반환합니다. merge_user_username 과 상호 배타적입니다. GitLab 17.0에서 도입되었습니다.
|
milestone
| 문자열 | 아니오 | 특정 목표에 대한 Merge Request을 반환합니다. None 은 목표가 없는 Merge Request을 반환합니다. Any 는 할당된 목표가 있는 Merge Request을 반환합니다.
|
my_reaction_emoji
| 문자열 | 아니오 | 인증된 사용자가 주어진 emoji 로 반응한 Merge Request을 반환합니다. None 은 반응이 없는 이슈를 반환합니다. Any 는 적어도 하나의 반응이 있는 이슈를 반환합니다.
|
non_archived
| 부울 | 아니오 | 아카이브되지 않은 프로젝트에서의 Merge Request만 반환합니다. 기본값은 true 입니다.
|
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 필드로 정렬된 Merge Request을 반환합니다. 기본값은 created_at 입니다.
|
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
| 문자열 | 아니오 | 주어진 범위에 대한 Merge Request을 반환합니다: created_by_me , assigned_to_me , 또는 all .
|
search
| 문자열 | 아니오 |
title 및 description 에 대한 Merge Request을 검색합니다.
|
source_branch
| 문자열 | 아니오 | 지정된 소스 브랜치로 Merge Request을 반환합니다. |
sort
| 문자열 | 아니오 |
asc 또는 desc 순서로 정렬된 Merge Request을 반환합니다. 기본값은 desc 입니다.
|
state
| 문자열 | 아니오 | 모든 Merge Request(all ) 또는 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 기능 플래그를 활성화해야 합니다.
|
페이지네이션 매개변수인 page
및 per_page
를 사용하여 Merge Request 디렉터리을 제한할 수 있습니다.
응답에서, group_id
는 Merge Request이 있는 프로젝트를 포함하는 그룹의 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",
"prepared_at": "2018-09-04T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignee": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
"reviewers": [{
"id": 2,
"name": "Sam Bauch",
"username": "kenyatta_oconnell",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon",
"web_url": "http://gitlab.example.com//kenyatta_oconnell"
}],
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
"draft": false,
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 3,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
"due_date": "2018-10-22",
"start_date": "2018-09-08",
"web_url": "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,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
"references": {
"short": "!1",
"relative": "my-project!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,
"task_completion_status":{
"count":0,
"completed_count":0
},
"has_conflicts": false,
"blocking_discussions_resolved": true
}
]
응답 데이터의 중요한 참고 사항은 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을 생성한 사용자. |
… (중략) … | ||
first_contribution
| 부울 | Merge Request이 저자의 첫 번째 기여인지 여부를 나타냄. |
… (중략) … |
예시 응답:
{
"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, // 사용 중단되었으며 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,
... (중략) ...
}
단일 Merge Request 응답 노트
이 API 엔드포인트에 요청을 보낼 때 각 Merge Request의 Merge 가능성(merge_status
)은 비동기적으로 확인됩니다.
업데이트된 상태를 얻으려면 이 API 엔드포인트를 폴링하세요. 이는 has_conflicts
속성에 영향을 미치는데,
이는 merge_status
에 의존합니다. merge_status
가 cannot_be_merged
인 경우를 제외하고는
false
를 반환합니다.
Merge 상태
- GitLab 15.6에서
merge_status
필드가 사용되지 않게 되었습니다.- GitLab 15.6에서
detailed_merge_status
필드가 도입되었습니다.
모든 잠재적인 상태를 확인하려면 merge_status
대신 detailed_merge_status
를 사용하세요.
-
detailed_merge_status
필드에는 Merge Request과 관련된 다음 값 중 하나가 포함될 수 있습니다:-
approvals_syncing
: Merge Request의 승인이 현재 동기화 중입니다. -
blocked_status
: 다른 Merge Request에 의해 차단됨. -
checking
: Git이 유효한 Merge이 가능한지 테스트 중입니다. -
ci_must_pass
: Merge하기 전에 CI/CD 파이프라인이 성공해야 합니다. -
ci_still_running
: CI/CD 파이프라인이 아직 실행 중입니다. -
conflict
: 소스 및 대상 브랜치 간에 충돌이 있습니다. -
discussions_not_resolved
: Merge하기 전에 모든 토론을 해결해야 합니다. -
draft_status
: Merge Request이 초안이기 때문에 Merge할 수 없습니다. -
external_status_checks
: Merge하기 전에 모든 상태 확인이 통과해야 합니다. -
jira_association_missing
: 제목 또는 설명이 Jira 이슈를 참조해야 합니다. 구성하려면 Merge Request을 Merge하기 위해 연결된 Jira 이슈를 필요로 합니다. -
mergeable
: 브랜치가 깨끗하게 대상 브랜치로 Merge할 수 있습니다. -
need_rebase
: Merge Request을 다시베이스해야 합니다. -
not_approved
: Merge하기 전에 승인이 필요합니다. -
not_open
: Merge하기 전에 Merge Request이 열려야 합니다. -
requested_changes
: 리뷰어가 변경을 요청한 Merge Request입니다. -unchecked
: Git이 아직 유효한 Merge을 테스트하지 않았습니다.
-
준비 단계
prepared_at
필드는 모든 준비 단계가 완료된 후에만 한 번 채워집니다.
Merge Request에 더 많은 변경 사항이 추가되더라도 업데이트되지 않습니다:
- diff가 생성됩니다.
- 파이프라인이 생성됩니다.
- Merge 가능성이 확인됩니다.
- Git LFS 개체가 연결됩니다.
- 알림이 전송됩니다.
단일 Merge Request 참여자 가져오기
Merge Request 참여자 디렉터리을 가져옵니다.
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를 통해 변경 사항 diffs를 검색합니다. |
| unidiff
| 부울 | 아니요 | 변경 사항 diffs를 단일 diff 형식으로 표시합니다. 기본값은 false입니다.
GitLab 16.5에서 도입되었습니다.
이러한 변경 세트와 관련된 diffs는 API 또는 UI를 통해 검색된 다른 diffs와 동일한 크기 제한이 적용됩니다.
이러한 제한이 결과에 영향을 미칠 때 overflow
필드에 true
값이 포함됩니다. 이러한 제한이 적용되지 않은
Diffs 데이터는 일반적으로 느리고 자원이 많이 소모되는 Gitaly에서 직접 검색할 수 있습니다. 하지만 데이터베이스에
백업된 diffs에 적용된 크기 제한이 없습니다.
Git에 내재된 제한은 여전히 적용됩니다.
예시 응답:
{
"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,
...
(생략됨)
...
"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 차이점 디렉터리
- GitLab 16.9에서
generated_file
은collapse_generated_diff_files
라는 플래그로 도입되었습니다. 기본적으로 비활성화됨.- GitLab 16.10에서 GitLab.com 및 Self-Managed에서 활성화되었습니다.
generated_file
은 GitLab 16.11에서 일반적으로 사용 가능해졌습니다. 피처 플래그collapse_generated_diff_files
제거됨.
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
를 사용하여 Merge Request 파이프라인 디렉터리을 제한할 수 있습니다.
응답 예시:
[
{
"id": 77,
"sha": "959e04d7c7a30600c894bd3c0cd0e1ce7f42c11d",
"ref": "main",
"status": "success"
}
]
Merge Request 파이프라인 생성
Merge Request용 파이프라인을 생성합니다.
이 엔드포인트에서 생성된 파이프라인은 일반 브랜치/태그 파이프라인을 실행하지 않습니다.
작업을 생성하려면 .gitlab-ci.yml
에서 only: [merge_requests]
로 구성해야 합니다.
신규 파이프라인은 다음과 같을 수 있습니다:
- 분리된 Merge Request 파이프라인.
- Merge된 결과 파이프라인 프로젝트 설정이 활성화된 경우.
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-인코딩된 경로 |
source_branch
| 문자열 | 예 | 소스 브랜치 |
target_branch
| 문자열 | 예 | 대상 브랜치 |
title
| 문자열 | 예 | Merge Request의 제목 |
allow_collaboration
| 부울 | 아니오 | 대상 브랜치로 Merge할 수 있는 멤버의 커밋을 허용합니다. |
approvals_before_merge
| 정수 | 아니오 | Merge 전에 필요한 승인 수 (아래 참조). 승인 규칙을 구성하려면 Merge Request 승인 API를 참조하십시오. GitLab 16.0 이후로는 사용되지 않음. 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의 라벨, 쉼표로 구분된 디렉터리으로 지정합니다. 라벨이 이미 존재하지 않는 경우, 새 프로젝트 라벨을 생성하고 Merge Request에 할당합니다. |
milestone_id
| 정수 | 아니오 | 마일스톤의 전역 ID |
remove_source_branch
| 부울 | 아니오 | Merge시 소스 브랜치를 제거해야 하는지 여부를 나타내는 플래그 |
reviewer_ids
| 정수 배열 | 아니오 | Merge Request에 리뷰어로 추가된 사용자의 ID. 0 으로 설정하거나 빈 값으로 남겨두면 리뷰어가 추가되지 않습니다.
|
squash
| 부울 | 아니오 | Merge Request이 Merge될 때 squash 여부를 나타냅니다. 프로젝트 설정이 이 값을 무시할 수 있습니다. |
target_project_id
| 정수 | 아니오 | 대상 프로젝트의 숫자 ID |
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
...
}
응답 데이터에 대한 중요한 참고 사항은 단일 Merge Request 응답 노트를 참조하십시오.
MR 업데이트
기존 Merge Request을 업데이트합니다. 대상 브랜치, 제목 또는 MR을 닫을 수 있습니다.
PUT /projects/:id/merge_requests/:merge_request_iid
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 사용자 계정이 소유한 프로젝트의 ID 또는 URL-encoded path |
merge_request_iid
| 정수 | 예 | Merge Request의 ID |
add_labels
| 문자열 | 아니오 | Merge Request에 추가할 쉼표로 구분된 라벨 이름. 라벨이 이미 존재하지 않으면 새로운 프로젝트 라벨을 생성하고 Merge Request에 할당합니다. |
allow_collaboration
| 부울 | 아니오 | 대상 브랜치에 Merge할 수 있는 멤버의 커밋을 허용합니다. |
allow_maintainer_to_push
| 부울 | 아니오 |
allow_collaboration 의 별칭
|
assignee_id
| 정수 | 아니오 | Merge Request을 할당할 사용자의 ID. 모든 할당 사용자를 미할당으로 설정하려면 0 을 설정하거나 빈 값을 제공하세요.
|
assignee_ids
| 정수 배열 | 아니오 | Merge Request을 할당할 사용자들의 ID. 모든 할당 사용자를 미할당으로 설정하려면 0 을 설정하거나 빈 값을 제공하세요.
|
description
| 문자열 | 아니오 | Merge Request의 설명. 1,048,576자로 제한됩니다. |
discussion_locked
| 부울 | 아니오 | Merge Request의 토론이 잠겨 있는지 여부를 나타내는 플래그. 토론이 잠겨 있으면 프로젝트 멤버만 코멘트를 추가, 편집 또는 해결할 수 있습니다. |
labels
| 문자열 | 아니오 | Merge Request을 위한 쉼표로 구분된 라벨 이름. 모든 라벨을 미할당으로 설정하려면 빈 문자열을 설정하세요. 라벨이 이미 존재하지 않으면 새로운 프로젝트 라벨을 생성하고 Merge Request에 할당합니다. |
milestone_id
| 정수 | 아니오 | Merge Request을 할당할 마일스톤의 글로벌 ID. 마일스톤을 미할당으로 설정하려면 0 을 설정하거나 빈 값을 제공하세요.
|
remove_labels
| 문자열 | 아니오 | Merge Request에서 제거할 쉼표로 구분된 라벨 이름 |
remove_source_branch
| 부울 | 아니오 | Merge될 때 소스 브랜치를 제거해야 하는지 여부를 나타내는 플래그 |
reviewer_ids
| 정수 배열 | 아니오 | Merge Request의 리뷰어로 설정된 사용자의 ID. 모든 리뷰어를 해제하려면 값에 0 을 설정하거나 빈 값을 제공하세요.
|
squash
| 부울 | 아니오 | Merge Request이 Merge될 때 스쿼시될지 여부 |
state_event
| 문자열 | 아니오 | 새 상태 (닫힘/재오픈) |
target_branch
| 문자열 | 아니오 | 대상 브랜치 |
title
| 문자열 | 아니오 | MR의 제목 |
상기 속성 중 적어도 하나의 필수가 아닌 속성을 포함해야 합니다.
예시 응답:
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
"state": "merged",
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "main",
"source_branch": "test1",
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
...
}
응답 데이터에 대한 중요한 사항은 단일 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에 실패함 |
응답 데이터에 대한 추가 중요 노트는 Single merge request response notes를 참조하세요.
예시 응답:
{
"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",
...
}
기본 Merge 참조 경로에 Merge
Merge Request 소스와 대상 브랜치 간의 변경 사항을 대상 프로젝트 리포지터리의 refs/merge-requests/:iid/merge
참조에 Merge합니다. 가능한 경우에만, 정상적인 Merge 작업을 수행한 경우 대상 브랜치가 갖게 될 상태를 나타냅니다.
이 작업은 일반적인 Merge 작업과 달리 Merge Request 대상 브랜치 상태를 어떤 방식으로든 변경하지 않습니다.
이 참조(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_requst_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",
... (기타 응답 데이터)
}
머지 요청의 다시베이스
머지 요청의 source_branch
를 그것의 target_branch
에 대해 자동으로 다시베이스합니다.
PUT /projects/:id/merge_requests/:merge_request_iid/rebase
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 머지 요청의 내부 ID |
skip_ci
| 부울값 | 아니요 | CI 파이프라인 생성을 건너뛰려면 true 로 설정합니다.
|
curl --request PUT \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/rebase"
이 API는 특정 HTTP 상태 코드를 반환합니다:
HTTP 상태 | 메시지 | 이유 |
---|---|---|
202
| (메시지 없음) | 성공적으로 큐에 들어감 |
403
| 소스 브랜치로 푸시할 수 없음
| 머지 요청의 소스 브랜치로 푸시할 권한이 없습니다. |
403
| 소스 브랜치가 존재하지 않음
| 머지 요청의 소스 브랜치로 푸시할 권한이 없습니다. |
403
| 소스 브랜치는 강제 푸시로부터 보호됨
| 머지 요청의 소스 브랜치로 푸시할 권한이 없습니다. |
409
| 다시베이스 작업을 큐에 넣지 못했습니다
| 장기간 실행되는 트랜잭션이 요청을 차단했을 수 있습니다. |
요청이 성공적으로 큐에 들어간 경우, 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": true
}
비동기 요청의 상태를 확인하려면 include_rebase_in_progress
매개변수를 사용하여 단일 MR 가져오기 엔드포인트를 폴링할 수 있습니다.
재베이스 작업이 진행 중인 경우, 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": true,
"merge_error": null
}
재베이스 작업이 성공적으로 완료된 후, 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": false,
"merge_error": null
}
재베이스 작업에 실패한 경우, 응답에는 다음이 포함됩니다:
{
"rebase_in_progress": false,
"merge_error": "다시베이스 실패. 로컬에서 다시베이스하세요"
}
머지 요청에 대한 코멘트
코멘트는 노트 리소스에 의해 생성됩니다.
머지 시 닫히는 이슈 디렉터리
제공된 머지 요청을 통해 닫힐 모든 이슈를 가져옵니다.
GET /projects/:id/merge_requests/:merge_request_iid/closes_issues
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 머지 요청의 내부 ID |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/closes_issues"
GitLab 이슈 트래커를 사용하는 경우의 예시 응답:
[
{
"state" : "opened",
"description" : "Ratione dolores corrupti mollitia soluta quia.",
"author" : {
"state" : "active",
"id" : 18,
"web_url" : "https://gitlab.example.com/eileen.lowe",
"name" : "Alexandra Bashirian",
"avatar_url" : null,
"username" : "eileen.lowe"
},
"milestone" : {
"project_id" : 1,
"description" : "Ducimus nam enim ex consequatur cumque ratione.",
"state" : "closed",
"due_date" : null,
"iid" : 2,
"created_at" : "2016-01-04T15:31:39.996Z",
"title" : "v4.0",
"id" : 17,
"updated_at" : "2016-01-04T15:31:39.996Z"
},
"project_id" : 1,
"assignee" : {
"state" : "active",
"id" : 1,
"name" : "Administrator",
"web_url" : "https://gitlab.example.com/root",
"avatar_url" : null,
"username" : "root"
},
"updated_at" : "2016-01-04T15:31:51.081Z",
"id" : 76,
"title" : "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
"created_at" : "2016-01-04T15:31:51.081Z",
"iid" : 6,
"labels" : [],
"user_notes_count": 1,
"changes_count": "1"
}
]
외부 이슈 트래커(예: Jira)가 사용되는 경우의 예시 응답:
[
{
"id" : "PROJECT-123",
"title" : "Title of this issue"
}
]
머지 요청 구독
인증된 사용자를 머지 요청에 구독시켜 알림을 받습니다.
POST /projects/:id/merge_requests/:merge_request_iid/subscribe
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로 |
merge_request_iid
| 정수 | 예 | 머지 요청의 내부 ID |
사용자가 이미 머지 요청을 구독한 경우, 상태 코드 HTTP 304 변경되지 않음
이 반환됩니다.
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"
},
"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": { // 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,
"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 취소
인증된 사용자를 Merge Request에서 구독 취소하여 해당 Merge Request으로부터 알림을 받지 않습니다.
POST /projects/:id/merge_requests/:merge_request_iid/unsubscribe
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
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/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"
},
...
}
응답 데이터에 대한 중요한 참고 사항은 단일 Merge Request 응답 참고 사항을 참조하십시오.
현재 사용자의 Merge Request에 대한 to-do 항목을 매뉴얼으로 생성합니다. 사용자에게 이미 해당 Merge Request에 대한 to-do 항목이 있는 경우 `HTTP 304 Not Modified` 상태 코드가 반환됩니다.
```plaintext
POST /projects/:id/merge_requests/:merge_request_iid/todo
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
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/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 diff 버전의 디렉터리을 가져옵니다.
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 응답의 SHAs
SHA 필드 | 목적 |
---|---|
base_commit_sha
| 소스 브랜치와 대상 브랜치 간의 Merge 베이스 커밋 SHA. |
head_commit_sha
| 소스 브랜치의 HEAD 커밋. |
start_commit_sha
| 이 버전의 차이가 생성된 때의 대상 브랜치의 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에서 도입되었습니다. |
성공하면 200 OK
와 다음과 같은 응답 속성을 반환합니다:
속성 | 유형 | 설명 |
---|---|---|
id
| 정수 | Merge Request 차이 버전의 ID. |
base_commit_sha
| 문자열 | 소스 브랜치와 대상 브랜치 간의 Merge 베이스 커밋 SHA. |
commits
| 객체 배열 | Merge Request 차이의 커밋들. |
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 trailers. 중복 키는 마지막 값만을 포함합니다. |
commits[].extended_trailers
| 객체 | 커밋에서 구문 분석된 Git trailers. |
commits[].web_url
| 문자열 | Merge Request의 웹 URL. |
created_at
| 일시 | Merge Request이 생성된 타임스탬프. |
diffs
| 객체 배열 | Merge Request 차이 버전의 차이들. |
diffs[].diff
| 문자열 | diff의 내용. |
diffs[].new_path
| 문자열 | 파일의 새 경로. |
diffs[].old_path
| 문자열 | 파일의 이전 경로. |
diffs[].a_mode
| 문자열 | 파일의 이전 모드. |
diffs[].b_mode
| 문자열 | 파일의 새 모드. |
diffs[].new_file
| 부울 | 파일이 새로 추가되었는지를 나타냅니다. |
diffs[].renamed_file
| 부울 | 파일이 이름이 바뀌었는지를 나타냅니다. |
diffs[].deleted_file
| 부울 | 파일이 삭제되었는지를 나타냅니다. |
diffs[].generated_file
| 부울 | 파일이 생성된 것으로 표시되었는지를 나타냅니다. GitLab 16.9에서 도입되었습니다. |
head_commit_sha
| 문자열 | 소스 브랜치의 HEAD 커밋. |
merge_request_id
| 정수 | Merge Request의 ID. |
patch_id_sha
| 문자열 | Merge Request diff의 Patch ID. |
real_size
| 문자열 | Merge Request diff의 변경 사이즈. |
start_commit_sha
| 문자열 | 이 버전의 차이가 생성된 때의 대상 브랜치의 HEAD 커밋 SHA. |
state
| 문자열 | Merge Request diff의 상태. collected , overflow , without_files 가 될 수 있습니다. Deprecated 값: 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,
"state": "collected",
"real_size": "1",
"patch_id_sha": "d504412d5b6e6739647e752aff8e468dde093f2f",
"commits": [{
"id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"short_id": "33e2ee85",
"parent_ids": [],
"title": "Change year to 2018",
"author_name": "Administrator",
"author_email": "admin@example.com",
"authored_date": "2016-07-26T17:44:29.000+03:00",
"committer_name": "Administrator",
"committer_email": "admin@example.com",
"committed_date": "2016-07-26T17:44:29.000+03:00",
"created_at": "2016-07-26T17:44:29.000+03:00",
"message": "Change year to 2018",
"trailers": {},
"extended_trailers": {},
"web_url": "https://gitlab.example.com/project/-/commit/33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30"
}, {
"id": "aa24655de48b36335556ac8a3cd8bb521f977cbd",
"short_id": "aa24655d",
"parent_ids": [],
"title": "Update LICENSE",
"author_name": "Administrator",
"author_email": "admin@example.com",
"authored_date": "2016-07-25T17:21:53.000+03:00",
"committer_name": "Administrator",
"committer_email": "admin@example.com",
"committed_date": "2016-07-25T17:21:53.000+03:00",
"created_at": "2016-07-25T17:21:53.000+03:00",
"message": "Update LICENSE",
"trailers": {},
"extended_trailers": {},
"web_url": "https://gitlab.example.com/project/-/commit/aa24655de48b36335556ac8a3cd8bb521f977cbd"
}, {
"id": "3eed087b29835c48015768f839d76e5ea8f07a24",
"short_id": "3eed087b",
"parent_ids": [],
"title": "Add license",
"author_name": "Administrator",
"author_email": "admin@example.com",
"authored_date": "2016-07-25T17:21:20.000+03:00",
"committer_name": "Administrator",
"committer_email": "admin@example.com",
"committed_date": "2016-07-25T17:21:20.000+03:00",
"created_at": "2016-07-25T17:21:20.000+03:00",
"message": "Add license",
"trailers": {},
"extended_trailers": {},
"web_url": "https://gitlab.example.com/project/-/commit/3eed087b29835c48015768f839d76e5ea8f07a24"
}],
"diffs": [{
"old_path": "LICENSE",
"new_path": "LICENSE",
"a_mode": "0",
"b_mode": "100644",
"diff": "@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2018 Administrator\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n",
"new_file": true,
"renamed_file": false,
"deleted_file": false,
"generated_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
}