Merge Request 의존성

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated
  • GitLab 16.6에서 remove_mr_blocking_constraints란 플래그를 사용하여 복잡한 Merge 의존성이 지원되었습니다. 기본적으로 비활성화되어 있습니다.
  • GitLab 16.7에서 복잡한 Merge 의존성이 일반적으로 사용 가능해졌습니다. remove_mr_blocking_constraints 피처 플래그가 제거되었습니다.

단일 기능이 여러 Merge Request 및 여러 프로젝트에 걸쳐 있을 수 있으며 작업이 Merge되는 순서는 중요할 수 있습니다. 특정 순서로 작업을 Merge하는 것이 중요한 경우 Merge Request 의존성을 사용하세요. 몇 가지 예시:

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

프로젝트 me/myexamplemyfriend/library에서 라이브러리를 가져온다면, myfriend/library에서 새로운 기능을 사용하도록 프로젝트를 업데이트하고 싶을 수 있습니다. 그러나 외부 라이브러리가 새 기능을 추가하기 전에 프로젝트 변경 사항을 Merge하면 프로젝트의 기본 브랜치가 손상됩니다. Merge Request 의존성을 사용하여 작업이 너무 일찍 Merge되지 않도록합니다:

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

me/myexample Merge Request을 임시로 표시하고 댓글에서 이유를 설명할 수 있습니다. 그러나 이 접근 방법은 매뉴얼이고 여러 프로젝트에서 여러 다른 Merge Request에 의존하는 경우에는 확장되지 않습니다. 대신, 개별 Merge Request의 준비 상태를 추적하고 Merge Request 의존성을 사용하여 Merge 순서를 강제하세요.

note
Merge Request 의존성은 PREMIUM 기능이지만이 제한은 의존하는 Merge Request에 대해서만 적용됩니다. PREMIUM 프로젝트의 Merge Request은 FREE 프로젝트의 Merge Request에 의존할 수 있지만 FREE 프로젝트의 Merge Request은 의존 Merge Request으로 표시할 수 없습니다.

중첩된 의존성

GitLab 16.7 이상에서 간접적인 중첩된 의존성이 지원됩니다. 단일 Merge Request은 최대 10개의 Merge Request에 차단될 수 있으며, 연쇄적으로 최대 10개의 Merge Request을 차단할 수 있습니다. 이 예에서 myfriend/library!10herfriend/another-lib!1에 의존하고, 이는 다시 mycorp/example!100에 의존합니다:

%%{init: { "fontFamily": "GitLab Sans" }}%% graph LR; accTitle: Merge Request 의존성 체인 accDescr: Merge Request A가 Merge Request B에 의존하는 방법을 보여주는 플로우차트 A[myfriend/library!10]-->|의존함| B[herfriend/another-lib!1] B-->|의존함| C[mycorp/example!100]

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

note
Merge Request 자체를 자기에게 의존적으로 만들 수는 없지만(circular dependencies), 순환적인 의존성을 만들 수는 있습니다.

Merge Request의 의존성 보기

Merge Request이 다른 요청에 의존하는 경우 Merge Request 보고서 섹션에 의존성에 대한 정보가 표시됩니다:

Merge Request 위젯에 표시된 의존성

Merge Request의 의존성 정보를 보려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
  2. 코드 > Merge Request을 선택하고 Merge Request을 식별합니다.
  3. Merge Request 보고서 영역으로 스크롤합니다. 의존하는 Merge Request에 대한 총 의존성 수 등의 정보가 표시됩니다.
  4. 각 의존성의 제목, 마일스톤, 담당자 및 파이프라인 상태를 보려면 확장을 선택합니다.

Merge Request의 모든 의존성이 Merge되기 전까지 Merge Request을 Merge할 수 없습니다. 메시지 Merge 차단: 위의 항목이 해결된 후에만 Merge할 수 있습니다가 표시됩니다.

닫힌 Merge Request

닫힌 Merge Request은 계획된 작업이 실제로 Merge되었는지에 관계없이 의존하는 Merge Request을 차단합니다.

Merge Request이 닫혔고 의존성이 더 이상 관련이 없으면 의존성을 제거하여 의존하는 Merge Request을 차단 해제할 수 있습니다.

새로운 의존 Merge Request 생성

새로운 Merge Request을 생성하고 특정 작업이 Merge된 후에만 Merge되지 않도록 설정할 수 있습니다. 이 작업은 다른 프로젝트에 있는 경우에도 가능합니다.

전제 조건:

  • 프로젝트에서 적어도 Developer 역할이 있거나 Merge Request을 생성할 수 있는 권한이 있어야 합니다.
  • 의존 Merge Request은 Premium 또는 Ultimate 티어의 프로젝트에 있어야 합니다.

새로운 Merge Request을 생성하고 의존하는 Merge Request으로 표시하려면:

  1. 새 Merge Request을 생성합니다.
  2. Merge Request 의존성에서 이 작업이 Merge되기 전에 Merge되어야 하는 Merge Request의 참조 또는 전체 URL을 붙여넣습니다. 참조는 path/to/project!merge_request_id 형식입니다.
  3. Merge Request 생성을 선택합니다.

Merge Request 편집하여 의존성 추가

기존의 Merge Request을 편집하고 다른 Merge Request에 의존하도록 표시할 수 있습니다.

전제 조건:

  • 프로젝트에서 적어도 Developer 역할이 있거나 Merge Request을 편집할 수 있는 권한이 있어야 합니다.

다음을 수행하세요:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
  2. 코드 > Merge Request을 선택하고 Merge Request을 식별합니다.
  3. 편집을 선택합니다.
  4. Merge Request 의존성에서 이 작업이 Merge되기 전에 Merge되어야 하는 Merge Request의 참조 또는 전체 URL을 붙여넣습니다. 참조는 path/to/project!merge_request_id 형식입니다.

Merge Request에서 의존성 제거

의존하는 Merge Request을 편집하고 의존성을 제거할 수 있습니다.

전제 조건:

  • Merge Request을 편집할 수 있도록 프로젝트에서 역할이 있어야 합니다.
  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
  2. 코드 > Merge Request을 선택하고 Merge Request을 식별합니다.
  3. 편집을 선택합니다.
  4. Merge Request 의존성으로 스크롤하여 각 의존성 옆의 제거를 선택합니다. 참고: 액세스할 수 없는 Merge Request에 대한 의존성은 접근할 수 없는 Merge Request으로 표시되며 동일한 방법으로 제거할 수 있습니다.
  5. 변경 사항 저장을 선택합니다.

문제 해결

Merge Request 의존성 관리를 위한 API 지원

의존성을 관리하기 위한 API 지원이 없습니다. 자세한 내용은 issue #12551을 읽어보세요.

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

프로젝트 가져오기 또는 내보내기 시 의존성은 보존되지 않습니다. 자세한 내용은 issue #12549을 읽어보세요.