병합 요청 종속성

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • 복잡한 병합 종속성에 대한 지원이 도입됨 GitLab 16.6에서 remove_mr_blocking_constraints라는 플래그와 함께. 기본적으로 비활성화되어 있습니다.
  • 복잡한 병합 종속성에 대한 지원이 일반 제공됨 GitLab 16.7에서. 기능 플래그 remove_mr_blocking_constraints가 제거되었습니다.

하나의 기능은 여러 개의 병합 요청에 걸쳐 있으며, 여러 프로젝트에 분산될 수 있습니다.

작업 병합 순서가 중요할 때 병합 요청 종속성을 사용하세요. 몇 가지 예:

  • 필수 라이브러리에 대한 변경 사항이 해당 라이브러리를 가져오는 프로젝트의 변경 사항보다 먼저 병합되도록 합니다.
  • 기능 작업이 병합되기 전에 문서 전용 병합 요청이 병합되는 것을 방지합니다.
  • 권한 매트릭스를 업데이트하는 병합 요청이 병합되기 전에, 권한을 아직 부여받지 않은 사람의 작업을 병합할 수 있도록 요구합니다.

프로젝트 me/myexamplemyfriend/library에서 라이브러리를 가져오는 경우, myfriend/library의 새 기능을 사용하도록 프로젝트를 업데이트하려고 할 수 있습니다. 그러나 외부 라이브러리에 새 기능이 추가되기 전에 프로젝트에 대한 변경 사항을 병합하면 프로젝트의 기본 브랜치가 손상됩니다. 병합 요청 종속성은 작업이 너무 일찍 병합되는 것을 방지합니다:

%%{init: { "fontFamily": "GitLab Sans" }}%% graph TB accTitle: 병합 요청 종속성 accDescr: 병합 요청 종속성이 작업이 너무 일찍 병합되는 것을 방지하는 방법을 보여줍니다. A['me/myexample' 프로젝트] B['myfriend/library' 프로젝트] C[병합 요청 #1:<br>버전 2.5 생성] D[병합 요청 #2:<br>버전 2.5 추가<br>빌드에] A-->|포함| D B---->|포함| C D-.->|의존| C C-.->|차단| D

me/myexample 병합 요청을 초안으로 표시하고 댓글로 그 이유를 설명할 수 있습니다. 그러나 이 접근 방식은 수동적이며 확장성이 없으며, 특히 병합 요청이 여러 프로젝트의 여러 다른 요청에 의존하는 경우 더욱 그렇습니다. 대신, 개별 병합 요청의 준비 상태를 추적하기 위해 초안(또는 준비 완료) 상태를 사용하고, 병합 순서를 강제하기 위해 병합 요청 종속성을 사용하세요.

note
병합 요청 종속성은 PREMIUM 기능이지만, 이 제한은 종속 병합 요청에 대해서만 적용됩니다. PREMIUM 프로젝트의 병합 요청은 FREE 프로젝트의 병합 요청에 의존할 수 있지만, FREE 프로젝트의 병합 요청은 종속적으로 표시될 수 없습니다.

중첩 종속성

간접적이고 중첩된 종속성은 GitLab 16.7 및 이후 버전에서 지원됩니다.

단일 병합 요청은 최대 10개의 병합 요청에 의해 차단될 수 있으며, 또 최대 10개의 병합 요청을 차단할 수 있습니다. 이 예제에서 myfriend/library!10herfriend/another-lib!1에 의존하며, 이는 다시 mycorp/example!100에 의존합니다:

%%{init: { "fontFamily": "GitLab Sans" }}%% graph LR; accTitle: 병합 요청 종속성 체인 accDescr: 병합 요청 A가 병합 요청 B에 의존하고, 병합 요청 B가 병합 요청 C에 의존하는 흐름도 A[myfriend/library!10]-->|의존| B[herfriend/another-lib!1] B-->|의존| C[mycorp/example!100]

중첩 종속성은 GitLab UI에 표시되지 않지만, UI 지원이 에픽 5308에서 제안되었습니다.

note
병합 요청은 자기 자신에 의존하도록 만들 수는 없지만(자기 참조), 순환 종속성을 만드는 것은 가능합니다.

병합 요청에 대한 종속성 보기

병합 요청이 다른 요청에 의존하는 경우, 병합 요청 보고서 섹션에는 종속성에 대한 정보가 표시됩니다:

병합 요청 위젯의 종속성

병합 요청의 종속성 정보를 보려면:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. Code > Merge requests를 선택하고 병합 요청을 식별합니다.

  3. 병합 요청 보고서 영역으로 스크롤합니다. 종속 병합 요청은 (status-warning) 1개의 병합 요청이 병합될 때까지 의존합니다와 같은 총 종속성 수에 대한 정보를 표시합니다.

  4. Expand를 선택하여 각 종속성의 제목, 마일스톤, 담당자 및 파이프라인 상태를 확인합니다.

병합 요청의 모든 종속성이 병합되기 전까지는 병합 요청을 병합할 수 없습니다.

메시지 병합 차단: 위 항목이 해결된 후에만 병합할 수 있습니다가 표시됩니다.

닫힌 병합 요청

닫힌 병합 요청은 여전히 종속 요청의 병합을 차단합니다. 왜냐하면 병합 요청은 계획된 작업이 실제로 병합되었는지와 관계없이 닫힐 수 있기 때문입니다.

병합 요청이 닫히고 종속성이 더 이상 관련이 없다면, 종속성을 제거하여 종속 병합 요청의 차단을 해제할 수 있습니다.

새로운 종속 병합 요청 생성

새로운 병합 요청을 생성할 때, 다른 특정 작업이 병합될 때까지 병합을 방지할 수 있습니다. 병합 요청이 다른 프로젝트에 있더라도 가능합니다.

요구 사항:

  • Developer 역할 이상이어야 하거나 프로젝트에서 병합 요청 생성이 허용되어야 합니다.

  • 종속 병합 요청은 Premium 또는 Ultimate 티어의 프로젝트에 있어야 합니다.

다른 요청에 의존하도록 새로운 병합 요청을 생성하려면:

  1. 새 병합 요청 생성합니다.

  2. Merge request dependencies에서 병합되어야 하는 병합 요청의 참조 또는 전체 URL을 붙여넣습니다. 참조는 path/to/project!merge_request_id 형식입니다.

  3. Create merge request를 선택합니다.

병합 요청에 종속성 추가를 위해 병합 요청 수정

기존 병합 요청을 편집하고 다른 요청에 의존하도록 표시할 수 있습니다.

요구 사항:

  • Developer 역할 이상이어야 하거나 프로젝트에서 병합 요청 편집이 허용되어야 합니다.

이렇게 하려면:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. Code > Merge requests를 선택하고 병합 요청을 식별합니다.

  3. Edit를 선택합니다.

  4. Merge request dependencies에서 병합되어야 하는 병합 요청의 참조 또는 전체 URL을 붙여넣습니다. 참조는 path/to/project!merge_request_id 형식입니다.

병합 요청에서 종속성 제거

종속 병합 요청을 편집하고 종속성을 제거할 수 있습니다.

요구 사항:

  • 병합 요청을 편집할 수 있는 역할이 있어야 합니다.
  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. Code > Merge requests를 선택하고 병합 요청을 식별합니다.

  3. Edit를 선택합니다.

  4. Merge request dependencies로 스크롤하고 제거할 각 종속성의 참조 옆에 있는 Remove를 선택합니다.

    note
    접근할 수 없는 병합 요청의 종속성은 1 inaccessible merge request로 표시되며, 같은 방법으로 제거할 수 있습니다.
  5. Save changes를 선택합니다.

문제 해결

프로젝트 가져오기 또는 내보내기 시 종속성 보존

종속성은 프로젝트가 가져오거나 내보낼 때 보존되지 않습니다. 자세한 내용은 issue #12549를 읽어보세요.