🍟

GitLab 18.3から使えるようになったDownload branch comparisonsがすごくいい

に公開

差分をダウンロードする2つの方法

GitLabでの開発作業中、「このブランチとmainブランチの差分だけをファイルで欲しいな」と思ったことはありませんか?

GitLab 18.3から、ブランチ比較の結果をdiffpatch形式のファイルとして簡単にダウンロードできる機能が導入されました。

https://docs.gitlab.com/user/project/repository/branches/#download-branch-comparisons

これにより、GitLabのUIを離れることなく、コマンドライン上で差分を確認・適用するといった操作がよりスムーズになります。

機能の使い方は非常にシンプルで、ブランチを比較する際のCompare View URLに特定のパラメータを追加するだけです。

1. diff形式でダウンロード (git apply)

差分をdiff形式で取得したい場合は、Compare View URLの末尾に?format=diffを追記します。
すでに他のパラメータがある場合は&format=diffとなります。

例えば、mainブランチとfeature-branchの差分を取得するURLは以下のようになります。

https://gitlab.example.com/my-group/my-project/-/compare/main...feature-branch?format=diff

ブランチに限らず、タグやコミットでも比較できます。

試しに自作コーディングエージェントShaftのリポジトリでショートコミットハッシュからmainブランチまでのdiffを取得してみました。

https://gitlab.com/tkithrta/shaft/-/compare/fa26031c...main?format=diff

curlgit applyを組み合わせれば、ダウンロードとパッチの適用を一行で実行できます。

curl "https://gitlab.example.com/my-group/my-project/-/compare/main...feature-branch?format=diff" | git apply

2. patch形式でダウンロード (git am)

コミット情報を含んだpatch形式で取得したい場合は、Compare View URLの末尾に?format=patch&format=patchを追記します。

https://gitlab.example.com/my-group/my-project/-/compare/main...feature-branch?format=patch

自作コーディングエージェントShaftのリポジトリでショートコミットハッシュからmainブランチまでのpatchを取得してみました。

https://gitlab.com/tkithrta/shaft/-/compare/fa26031c...main?format=patch

patch形式の場合、一度ファイルとして保存し、git apply --checkで内容を確認してから適用するのが安全です。

# パッチをダウンロードしてファイルに保存
curl "https://gitlab.example.com/my-group/my-project/-/compare/main...feature-branch?format=patch" > changes.patch

# パッチが問題なく適用できるかチェック
git apply --check changes.patch

# パッチを適用
git am changes.patch

もちろん、こちらもワンライナーで直接適用することも可能です。

curl "https://gitlab.example.com/my-group/my-project/-/compare/main...feature-branch?format=patch" | git am

まとめ

今回紹介した新機能により、以下のようなメリットが考えられます。

  • CLIでの作業効率化: GitLabの画面を開かずに、ターミナル上で差分の取得から適用までを完結できます。
  • レビューや共有の簡素化: マージリクエストを作成する前のちょっとした差分確認や、特定の内容だけを他の開発者に共有したい場合に、差分ファイルを簡単に添付できます。
  • スクリプトへの組み込み: CI/CDパイプラインや自動化スクリプトの中で、特定のブランチ間の差分を利用した処理を組み込みやすくなります。

特に注目すべきは、AIのコンテキストエンジニアリングへの応用です。

例えば、「このコード変更の要約を生成して」「潜在的なバグを指摘して」といったタスクをAIに依頼する際、変更箇所の差分情報(diff)は極めて重要なコンテキストとなります。

この機能を使えば、AIへの入力となる差分データをURL一つで簡単に取得できるため、コードレビューやドキュメント生成を自動化するAI連携ツールの開発が非常に容易になります。

Compare View URLにパラメータを追加するだけの簡単な操作で、日々の開発が少し便利になる機能です。
数ヶ月前に追加されたばかりの機能ですが、GitLab 18.3以降をお使いの方はぜひ活用してみてください。

https://gitlab.com/gitlab-org/gitlab/-/issues/217206#note_2634822400

ちなみに

GitHubではCompare View URLの末尾に.diff.patchをつけると同じことができます。

https://dev.classmethod.jp/articles/show-diff-as-patches-on-github/

軽く調べた感じだと12年以上前からできるらしいな?[1]

脚注
  1. https://gist.github.com/lehnerpat/5689882/revisions ↩︎

Discussion