マージリクエストの依存関係

ひとつの機能が複数のプロジェクトにまたがるマージリクエストにまたがることがあり、マージする順番が重要になることがあります。特定の順序で作業をマージすることが重要な場合は、マージリクエストの依存関係を使用してください。いくつかの例を示します:

  • 必要なライブラリの変更が、そのライブラリをインポートするプロジェクトの変更の前にマージされるようにします。
  • 機能作業がマージされる前に、ドキュメントのみのマージリクエストがマージされないようにします。
  • 権限がまだ与えられていない人の作業をマージする前に、権限マトリックスを更新するマージリクエストをマージするよう要求します。

あなたのプロジェクトme/myexample が .NET のライブラリをインポートしている場合、myfriend/library.NET の新機能を使うようにプロジェクトを更新したくなるかも myfriend/libraryしれません。 しかし、内部ライブラリが新機能を追加する前にプロジェクトの変更をマージすると、プロジェクトのデフォルトブランチを壊してしまうことになります。マージリクエスト依存関係は、あなたの作業が早急にマージされるのを防ぎます:

graph TB A['me/myexample' project] B['myfriend/library' project] C[Merge request #1:<br>Create new version 2.5] D[Merge request #2:<br>Add version 2.5<br>to build] A-->|contains| D B---->|contains| C D-.->|depends on| C C-.->|blocks| D

me/myexample のマージリクエストをドラフトとしてマークし、その理由をコメントで説明することもできます。しかし、この方法は手動であり、特にあなたのマージリクエストが複数のプロジェクトに依存している場合、拡張性がありません。代わりに、個々のマージリクエストの準備状況を追跡するためにドラフト(または準備完了)状態を使用し、マージ順序を強制するためにマージリクエスト依存関係を使用します。

note
マージリクエストの依存関係はPREMIUM機能ですが、この制限は依存関係にあるマージリクエストに対してのみ適用されます。PREMIUMプロジェクトのマージリクエストはFREEプロジェクトのマージリクエストに依存することができますが、FREEプロジェクトのマージリクエストは依存としてマークすることができません。

マージリクエストの依存関係を見る

マージリクエストが他のリクエストに依存している場合、マージリクエストレポートセクションは依存関係についての情報を表示します:

Dependencies in merge request widget

マージリクエストの依存関係を表示するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを特定します。
  3. マージリクエストレポートエリアまでスクロールします。(status-warning) マージされている 1 つのマージリクエストに依存します。
  4. 各依存関係のタイトル、マイルストーン、担当者、パイプラインステータスを表示するには、展開を選択します。

マージ要求の依存関係がすべてマージされるまで、マージ要求はマージできません。マージがブロックされました: 上記の項目が解決された後にのみマージできます

クローズされたマージリクエスト

マージリクエストは、計画された作業が実際にマージされたかどうかにかかわらず閉じることができるからです。

マージリクエストが閉じて依存関係がなくなった場合、依存関係のあるマージリクエストのブロックを解除するために、依存関係として削除してください。

新しい依存マージリクエストを作成してください。

新しいマージリクエストを作成すると、そのマージリクエストが別のプロジェクトにある場合でも、他の特定の作業がマージされるまでマージしないようにすることができます。

前提条件:

  • 少なくとも開発者ロールを持っているか、プロジェクトでマージリクエストを作成することが許可されている必要があります。
  • 依存マージリクエストは、PremiumまたはUltimate階層のプロジェクトでなければなりません。

新しいマージリクエストを作成し、別のマージリクエストに依存するようにマークするには、次の手順を実行します:

  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. リクエストの依存関係のマージまでスクロールし、削除する各依存関係の参照の横にある削除を選択します。

    note
    アクセスできないマージリクエストの依存関係は、アクセスできないマージリクエストとして表示され、同じ方法で削除できます。
  5. 変更を保存を選択します。

トラブルシューティング

マージリクエストの依存関係を管理するためのAPIサポート

依存関係を管理するための API サポートはありません。詳細については、イシュー#12551 を参照してください。

プロジェクトのインポートやエクスポート時の依存関係の保持

プロジェクトのインポートまたはエクスポート時に依存関係が保持されません。詳しくは、イシュー#12549 を参照してください。

複雑なマージ順序の依存関係はサポートされていません。

間接的でネストされた依存関係を作成しようとすると、GitLab は以下のエラーメッセージのいずれかを表示します:

  • 依存関係の保存に失敗しました:ブロックされたマージリクエストは他をブロックできません。
  • 依存関係の保存に失敗しました:マージリクエストをブロックすることはできません。

GitLab はマージリクエスト間の直接的な依存関係をサポートしていますが、間接的な(ネストされた)依存関係はサポートしていません。

使用可能な依存関係のパターンには次のようなものがあります:

  • 一つのマージリクエストは一つのマージリクエストに直接依存することができます。
  • ひとつのマージリクエストは複数のマージリクエストに直接依存することができます。
  • 複数のマージリクエストは一つのマージリクエストに直接依存することができます。

この例で示されているmyfriend/library!10mycorp/example!100 の間の間接的で入れ子になった依存関係はサポートされていません:

graph LR; A[myfriend/library!10]-->|depends on| B[herfriend/another-lib!1] B-->|depends on| C[mycorp/example!100]