Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

大規模なGitリポジトリの初回ダウンロードを抑えたいなら、必要なオブジェクトを後から取得する「パーシャルクローン」と、ローカルに持つコミット履歴を制限する「シャロークローン」を使い分けます。前者は主にオブジェクトの取得範囲、後者は履歴の深さを変える仕組みです。開発で継続利用するならブロブレス、使い捨てのCI環境ならツリーレスやシャローも候補になります。

パーシャルクローンとシャロークローンの違い

Gitのコミットはツリーを参照し、ツリーはファイル内容を格納するブロブを参照します。パーシャルクローンは、--filterで取得するオブジェクトを絞り、操作に必要なオブジェクトを後から取得する方法です。シャロークローンは、取得するコミット履歴の深さを制限します。この二つは別の軸であり、同じ仕組みではありません。Git公式文書も、パーシャルクローンを不完全なリポジトリコピー上で動かすための性能最適化と位置づけ、コミット範囲を制限するシャロークローンと区別しています(Gitの公式 partial-clone 文書)。

方式 クローン時に取得するもの 主なトレードオフ
ブロブレス 到達可能なコミットとツリー。ブロブは必要時に取得 ファイル内容を初めて読むときに取得が発生する
ツリーレス コミット。ツリーとブロブは必要時に取得 欠落したツリーを必要とする操作で追加取得が起こり得る
シャロー 指定した深さまでのコミット履歴 制限した履歴に依存する操作が使えず、後続の取得に負担がかかる場合がある
フルクローン 通常の複製に必要なデータ ダウンロード時間とディスク容量を要する一方、必要なデータがローカルに揃う

継続利用する開発環境にはブロブレス

ブロブレスクローンは、コミットとツリーをローカルに持ち、ファイル内容を表すブロブを必要になった時点で取得します。履歴を保ちながら最初の転送量を抑えたい開発者や、同じ作業環境で複数回ビルドする場合に向いています。

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
git clone --filter=blob:none <url>

たとえば、あるファイルの内容を初めて開くときにはブロブ取得が起きることがあります。一度取得されたブロブはローカルに残るため、同じデータを使う操作のたびに毎回ダウンロードするわけではありません。パスを指定した履歴の確認ではコミットとツリーを使えるため、履歴そのものを切り詰めるシャローより扱いやすい選択肢です。

一度のビルドで破棄する環境にはツリーレス

ツリーレスクローンはコミットを取得し、ツリーとブロブを必要に応じて取得します。コミット履歴を利用したい一方、ビルド後に作業領域を消すようなCI環境で検討できます。

git clone --filter=tree:0 <url>

ツリーがローカルにないため、パス単位の履歴表示やblameなど、対象パスのツリーを必要とする操作では後からデータ取得が発生し、遅くなることがあります。ビルド手順でどのGit操作を行うかを確認してから選びましょう。

履歴が不要な使い捨てCIならシャローも候補

シャロークローンは--depthで履歴の深さを制限します。たとえば--depth=1は、通常、先端付近のコミットだけを対象にします。

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
git clone --depth=1 <url>

対象ブランチを絞る設定と組み合わせる方法もあります。ビルドに必要なファイルを取得できればよく、古いコミットを調べない使い捨て環境では選択肢になります。一方で、git logやgit merge-baseのように履歴を参照する操作は、必要なコミットが浅い複製に含まれないと期待どおりに使えません。後から履歴を追加取得する場合、処理が高コストになることもあります。日常の開発用としては、履歴制限の影響を考慮してください。

どの方式を選ぶか

  • リポジトリを継続利用し、履歴も扱う: ブロブレスから検討します。ファイル内容は必要時に取得されますが、取得済みのブロブはローカルに残ります。
  • 一度ビルドしたら作業領域を破棄し、コミット履歴を使う: ツリーレスが候補です。パスをたどるGit操作で追加取得が起こる点を確認します。
  • 履歴を使わない単発のビルド: シャローを候補にできます。ビルドや自動化処理が必要な履歴操作を行わないか確かめます。
  • 通常のGit操作を幅広く行い、遅延取得や履歴制限を避けたい: フルクローンを選びます。代わりに初回のダウンロードとローカル容量が増えます。
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

クローン前に互換性と必要な操作を確認する

部分クローンを使うには、Gitクライアントだけでなく、リポジトリを提供するサーバー側の対応も関係します。サーバーがフィルターを受け付けず、フルクローンになる場合もあります。クローン先のホスティングサービスとGitの現行仕様を確認し、実際のCIや開発手順で必要なコマンドを試してください。GitHub Blogの2021年1月13日の記事は、当時のGitHubおよびGitHub Enterprise Server 2.22以降の対応を説明していますが、その記述は現在の互換性一覧としては扱えません(GitHub Blogの記事)。

効果はリポジトリの大きさや、後から必要になるデータ、実行する操作によって異なります。特定の短縮率や速度向上率を一律に見込まず、初回転送を減らす効果と、後から必要なデータを取得するコストのどちらが重要かで判断しましょう。

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.