병합 요청 종속성

Tier: 프리미엄, 얼티밋 Offering: GitLab.com, Self-managed, GitLab Dedicated
History
  • GitLab 16.6에 introducedremove_mr_blocking_constraints이라는 플래그와 함께 복잡한 병합 종속성을 지원합니다. 기본적으로 비활성화 상태입니다.
  • GitLab 16.7에서 복잡한 병합 종속성이 generally available 되었습니다. 기능 플래그 remove_mr_blocking_constraints이 삭제되었습니다.

단일 기능은 여러 병합(merge) 요청에 걸쳐 있을 수 있으며 여러 프로젝트에 퍼져 있을 수 있으며 작업의 병합 순서가 중요할 수 있습니다. 특정한 순서로 작업을 병합하는 것이 중요할 때 병합 요청 종속성을 사용하세요. 몇 가지 예시는 다음과 같습니다:

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

만약 당신의 프로젝트 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 추가] A-->|포함| D B---->|포함| C D-.->|종속| C C-.->|차단| D

당신은 me/myexample의 병합 요청을 임시(draft)로 표시하고 댓글에서 이유를 설명할 수 있습니다. 그러나 이 방법은 수동적이며 특히 여러 프로젝트에서 여러 작업에 의존하는 경우 규모가 확장되지 않습니다. 대신, 개별 병합 요청의 준비 상태를 추적하고 병합 요청 종속성을 사용하여 병합 순서를 강제하세요.

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: GitLab 16.7부터 지원된 중첩된 종속성의 플로우차트 A[myfriend/library!10]-->|종속| B[herfriend/another-lib!1] B-->|종속| C[mycorp/example!100]

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

note
병합 요청은 스스로(자기 참조)에 종속적이 되지 않지만, 순환적인 종속성을 만들 수 있습니다.

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

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

병합 요청 위젯에서의 종속성

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

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 코드 > 병합 요청을 선택하고 병합 요청을 식별합니다.
  3. 병합 요청 보고서 영역으로 스크롤합니다. 종속 병합 요청에 대한 정보가 (status-warning) 와 같이 종속성이 설정된 총 수에 대한 정보가 표시됩니다.
  4. 각 종속성의 제목, 마일스톤, 담당자 및 파이프라인 상태를 보려면 확장을 선택합니다.

당신의 병합 요청의 종속성이 모두 병합되기 전에는, 병합 요청이 병합될 수 없습니다. 병합 차단: 위의 아이템이 해결된 후에만 병합할 수 있습니다. 메시지가 표시됩니다.

닫힌 병합 요청

계획된 작업이 실제로 병합되었는지 여부와 관계없이 병합 요청은 종료될 수 있기 때문에, 닫힌 병합 요청은 여전히 해당 종속 병합 요청이 병합되는 것을 막습니다.

병합 요청이 닫히고 종속성이 더는 관련이 없다면, 종속성을 제거하여 종속 병합 요청의 차단을 해제하세요.

새로운 종속적인 병합 요청 생성

새로운 병합 요청을 만들 때, 다른 특정 작업이 병합된 후에도 해당 작업이 병합되지 않도록 할 수 있습니다. 이 병합 요청이 다른 프로젝트에 있더라도 해당 작업이 병합된 후에만 병합되지 않도록 할 수 있습니다.

준비 사항:

  • 적어도 개발자 역할을 가지고 있거나 프로젝트에서 병합 요청을 만들 수 있는 권한을 가지고 있어야 합니다.
  • 종속 병합 요청이 프리미엄 또는 얼티밋 티어의 프로젝트에 있어야 합니다.

새로운 병합 요청을 만들고 다른 작업이 병합되기 전까지 해당 작업이 병합되지 않도록 표시하는 방법은 다음과 같습니다:

  1. 새로운 병합 요청을 생성.
  2. 병합 요청 종속성에서 이 작업이 병합된 후에 이 작업이 병합되어야 하는 병합 요청에 대한 참조 또는 전체 URL을 붙여넣으세요. 참조는 path/to/project!merge_request_id 형식입니다.
  3. 병합 요청 생성을 선택하세요.

병합 요청을 편집하여 종속성 추가

기존의 병합 요청을 편집하고 다른 병합 요청에 종속적으로 표시할 수 있습니다.

준비 사항:

  • 적어도 개발자 역할을 가지고 있거나 프로젝트에서 병합 요청을 편집할 수 있는 권한을 가지고 있어야 합니다.

다음과 같이 할 수 있습니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 코드 > 병합 요청을 선택하고 병합 요청을 식별합니다.
  3. 편집을 선택하세요.
  4. 병합 요청 종속성에 이 작업이 병합된 후에 이 작업이 병합되어야 하는 병합 요청에 대한 참조 또는 전체 URL을 붙여넣으세요. 참조는 path/to/project!merge_request_id 형식입니다.

병합 요청에서 종속성 제거하기

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

필수 조건:

  • 병합 요청을 편집할 수 있는 프로젝트의 역할이 있어야 합니다.
  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 코드 > 병합 요청을 선택하고 병합 요청을 식별합니다.
  3. 편집을 선택합니다.
  4. 병합 요청 종속성으로 스크롤하여 제거하려는 각 종속성 옆의 제거를 선택합니다.

    참고: 액세스할 수 없는 병합 요청의 종속성은 액세스할 수 없는 병합 요청 1개로 표시되며, 동일한 방식으로 제거할 수 있습니다.

  5. 변경 저장을 선택합니다.

문제 해결

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

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