株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

GitLab 16.0の新機能 ~フォーク先とフォーク元の差分の有無をGUIから確認 & 反映させる編~

皆様こんにちは。SEの小池と申します。

今回のブログは、 GitLabでフォーク先とフォーク元の差分の有無をGUIから確認 & 反映させる方法 を紹介いたします。

本機能は GitLab16.0 の新機能の一つで、この機能のおかげでフォークの利便性が大きく向上していると存じます。

本記事の対象の方

  • GitLab 16.0で追加されたフォークに関する機能について情報収集なさっている方。
  • GitLabでフォークしている方 もしくは フォークを検討中の方。

今回のブログのゴール

このブログのゴールはこちらです。


今回のゴール
  • GitLab 16.0で実装されたフォークに関する機能の概要を把握する。

事前ご連絡事項

  • 本記事は筆者の独断と偏見に基づき、GitLab 16.0で実装されたフォークに関する追加機能の概要を説明しています。この記事は機能の詳細な説明ではなく、あくまでも筆者独自の表現による概要の説明に過ぎないことをご了承ください。
  • 本記事はSaaS版 (GitLab.com) の Enterprise Edition 16.2.0-pre における仕様をベースに記載しております。それ以外のエディションやバージョンではこの記事に記載の通りではない可能性がございます。
  • 本記事の操作説明と画面ショットはGitLabのローカライズを日本語にした状態で説明しております。それ以外の言語をご利用の方は適宜読み替えてください。
  • 本記事に掲載されている情報は正確性・安全性を保証するものではありません。本記事の情報を利用することによって発生した損失や損害については、一切の責任を負いかねます。

GitLab 16.0で実装されたフォークに関する機能概要

GitLab 16.0 では、フォーク元 もしくは フォーク先でコミットが生じた場合、GUIからそれらの有無を確認し、フォーク先 もしくは フォーク元に反映させることが可能になりました。

参考 : GitLab 16.0 released with Value Streams Dashboards and improvements to AI-powered Code Suggestions | GitLab

この機能で、以下が可能になりました。

GitLab 16.0で実装されたフォークに関する追加機能

  • フォーク後にフォーク元で変更があった場合、その変更をGUIからワンクリックでフォーク先に反映できる
  • フォーク後にフォーク先で変更があった場合、その変更を含むマージリクエスト (マージ先はフォーク元) をGUIから数クリックで作成できる

以降の章でこれらの機能の詳細を説明いたします。

フォーク元で変更をコミットした場合

前章で紹介いたしました機能の一つ目、フォーク後にフォーク元で変更があった場合、その変更をGUIからワンクリックでフォーク先に反映できる機能について説明いたします。

まず、プロジェクトA を プロジェクトB としてフォークします。

プロジェクトA (フォーク元) で、ブランチ feature-branch-A01 を作成します。この時点ではブランチ master に変更はないため、プロジェクトB (フォーク先) のGUIにも変化はありません。

プロジェクトA (フォーク元) で、ブランチ feature-branch-A01 をブランチ master にマージします。
すると、プロジェクトB (フォーク先) のGUIに、コミット遅れがある というメッセージが表示されます。

コミット遅れとは?
コミット遅れとはGitLab特有の表現で、フォーク元で発生したコミットがフォーク先に反映されていない状況を指します。

このコミット遅れを解消するため、プロジェクトB (フォーク先) のGUIから [フォークを更新] というボタンをクリックするだけで、生じていたコミット遅れを全てプロジェクトB (フォーク先) に反映させることができるのです!すごい!!
なお、この例の場合、プロジェクトB (フォーク先) 側のリポジトリグラフ (リポジトリの履歴) は、完全にプロジェクトA (フォーク元) のリポジトリグラフと同じになります。(コミットの日時等も完全に同じになります。)

この様に、フォーク後にフォーク元で行われた変更 (コミット遅れ) を、フォーク先のGUIのボタンをワンクリックするだけ でフォーク先に反映することができます。

フォーク先で変更をコミットした場合

先の章で紹介いたしました機能の二つ目、フォーク後にフォーク先で変更があった場合、その変更を含むマージリクエスト (マージ先はフォーク元) をGUIから数クリックで作成できる機能について説明いたします。

下の図のようにプロジェクトAからプロジェクトBをフォークしたとします。

プロジェクトB (フォーク先) で、ブランチ feature-branch-B01 を作成します。この時点ではブランチ master に変更はないため、プロジェクトA (フォーク元) のGUIにも変化はありません。

プロジェクトB (フォーク先) で作成したブランチ feature-branch-B01 をプロジェクトB (フォーク先) のブランチ master にマージします。 すると、プロジェクトB (フォーク先) のGUIに、コミット先行がある というメッセージが表示されます。

コミット先行とは?
コミット先行とはGitLab特有の表現で、フォーク先でコミットした変更がフォーク元に反映されていない状況を指します。

このプロジェクトB (フォーク先) のコミット先行をプロジェクトA (フォーク元) に反映するために、プロジェクトB (フォーク先) のGUIから [マージリクエストを作成] というボタンをクリックします。すると、プロジェクトB をソース、プロジェクトAをマージ先としたマージリクエストが数クリックで作成できます!
なお、この例でプロジェクトA側がマージした場合、プロジェクトA (フォーク元) 側のリポジトリグラフ (リポジトリの履歴) は、プロジェクトB (フォーク元) 側のコミット履歴が追加され、その変更がコミットされた履歴になります。(下図の状態)

この様に、フォーク後にフォーク先で発生したコミットをフォーク元に提案したい場合、その変更を含むマージリクエスト (マージ先はフォーク元) をGUIから数クリックで作成することが可能です。

【余談】本機能の天邪鬼的なところ

本機能は、仕様上ちょっとだけ天邪鬼的なところがあります。

それは、前章で紹介いたしました フォーク先で変更をコミットした場合 で、フォーク先のコミットをフォーク元に提案 (マージリクエストを作成) し、それがフォーク元で承認されてマージされた場合に発生します。

プロジェクトB (フォーク先) から提案した内容がプロジェクトA (フォーク元) でマージされたので、この時点でプロジェクトA (フォーク元) とプロジェクトB (フォーク先) のブランチ master には差分は無いはずです。

しかし、この状況でプロジェクトB (フォーク先) のGUIを確認してみると・・・コ、コミット遅れが1個がある!?

このコミット遅れの内容は、実はさっき実施したプロジェクトB (フォーク先) をソースとしたプロジェクトA (フォーク元) へのマージリクエストのマージ (コミット) ・・・となっています!
つまり「実質差分が無いコミット遅れが存在するよ!」と表示されるという不思議な状況になります。

結論として、この例の場合、赤丸の部分が「コミット遅れ1個」として認識されているのです。
この赤丸部分のコミットは、青丸2個の変更をプロジェクトAのブランチ master にマージした時のコミットです。しかし青丸2個のコミットは、プロジェクトB (フォーク先) のコミットと全く同じ。これにより、プロジェクトB (フォーク先) に「実質差分が無いコミット遅れが1個存在する」という表示がされているのです。

筆者はGitLabにおけるフォークの処理内容の詳細を存じ上げませんが、おそらくGitLab的には フォーク元に存在する全コミット = フォーク先に存在する全コミット となった場合に「差分なし」と判断され、それを満たさない場合は、コミット先行 or コミット遅れ or 両方 があるという表示になるのだと推測されます。そしてこのコミット先行 および コミット遅れの有無のチェックは、変更内容ではなくコミットのハッシュ値 (識別番号、コミット番号、リビジョン 等とも呼ばれます) で判断しているものと推測されます。

なお、プロジェクトB (フォーク先) に「実質差分が無いコミット遅れが存在する」と表示されても特に害はありません。[フォークを更新] をクリックすると、リポジトリの変更は特に発生せず、リポジトリグラフが以下のように更新され (赤丸部分が追加され) 、最終的にプロジェクトA (フォーク元) との差分はない旨が表示されるようになります。

最後に

この度はGitもCI/CDもよくわかっていないど素人SEによるGitLab検証ブログをお読みいただき、誠にありがとうございます。
このブログの目標は以下のとおりでしたが、皆さまはいかがでしたでしょうか。


今回のゴール
  • GitLab 16.0で実装されたフォークに関する機能の概要を把握する。

今回の機能追加によってフォークの利便性が大きく向上しています。
日ごろからフォークを使う方はもちろん、あまりフォークを利用したことが無い方も試していただければと存じます。

この記事がGitLabを触り始めた方の一助となれば幸いにございます。


GitLabに関するお問い合わせは、以下のフォームからお願い致します。
GitLab製品 お問い合わせ

今までのGitLabの検証ブログはこちらです。
GitLab カテゴリーの記事一覧 - ネットワールド らぼ

GitLab操作デモ動画 (基本編) を作ってみました。(音声の録音は自宅でiPhoneのボイスメモ使うという超低クオリティですが…。)
つたない内容ではありますが、ご興味がおありでしたら是非ご視聴いただければと存じます。

www.youtube.com