Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →大きなGitリポジトリの初回クローンを軽くしたいなら、必要なGitオブジェクトを後から取得する「パーシャルクローン」と、ローカルに持つコミット履歴を制限する「シャロークローン」を区別しましょう。開発で継続利用するならブロブレス、使い捨てのCIならツリーレスやシャローが候補です。必要な履歴操作と、クローン後にデータを追加取得するコストで選びます。
パーシャルクローンとシャロークローンの違い
パーシャルクローンは、最初に取得するGitオブジェクトをフィルターで選び、欠けているオブジェクトを必要になった時点で取得する方法です。シャロークローンは、ローカルに保持するコミット履歴の範囲を制限します。つまり、前者は主にオブジェクトの種類、後者は履歴の深さを変える別々の仕組みです。Git公式のpartial clone文書も、パーシャルクローンを不完全なリポジトリコピーでGitを動かすための性能最適化と位置づけ、シャロークローンとは別の機能として説明しています。
As an Amazon Associate I earn from qualifying purchases.
コミットはツリーを参照し、ツリーはファイル内容を格納するブロブを参照します。どの種類を省くかで、初回転送量と、後のGit操作が必要とする追加取得のバランスが変わります。
4つのクローン方法を比較する
| 方法 | 最初に取得するもの | 後から取得するもの・主な影響 | 向いている用途 |
|---|---|---|---|
| フルクローン | 通常、必要なリポジトリデータをすべて取得 | 必要なデータがローカルにそろう。ダウンロード時間とディスク容量が大きくなる | 通常のGit操作を制約なく使いたい場合 |
| ブロブレス・パーシャルクローン | 到達可能なコミットとツリー。ブロブは省く | ファイル内容が必要な操作でブロブを取得する。取得済みブロブはローカルに残る | 日常開発や、同じ作業環境で複数回ビルドする場合 |
| ツリーレス・パーシャルクローン | コミット。ツリーとブロブは省く | 必要なツリーやブロブを取得する。パス単位の履歴表示やblameが遅くなる場合がある | コミット履歴が必要な、使い捨てのビルド環境 |
| シャロークローン | 指定した深さまでのコミット履歴。例では深さ1 | 取得していない過去の履歴を前提とする操作が制限される。後続のshallow fetchは計算コストが高くなる場合がある | 履歴をほとんど使わない一時的なCI環境 |
この比較は方式の性質を示すもので、転送量や速度の短縮率を保証するものではありません。実際の効果はリポジトリ、必要なファイル、実行する操作に左右されます。
#1 Best Overall
開発用にはブロブレスを第一候補にする
ブロブレスではコミットとツリーを取得し、ファイルの内容にあたるブロブを必要になるまで保留します。コミット履歴とツリーが手元にあるため、履歴をたどりながら普段の開発を続けやすい方式です。
git clone --filter=blob:none <url>
ファイル内容を表示・処理する操作では、初回にブロブの転送が発生することがあります。取得したブロブはローカルに残るため、同じデータを使う後続の操作で毎回必ず取得し直すわけではありません。リポジトリを長く使う開発者や、同じ環境で複数回ビルドする場合に適しています。
Rank #2
一時的なビルド環境ではツリーレスを検討する
ツリーレスではコミットを取得し、ツリーとブロブは必要時に取得します。作業後にワークスペースを破棄するCIなど、取得したデータを長く再利用しない環境で候補になります。
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
git clone --filter=tree:0 <url>
コミット履歴はありますが、パスの履歴を調べたりblameを実行したりする際に必要なツリーが手元になければ、追加取得が発生します。そのため、こうした履歴操作を頻繁に行う環境では、ツリーレスによる初回転送の削減と後の待ち時間を比べてください。
シャロークローンは履歴が不要なCI向け
シャロークローンは、コミット履歴を指定した深さまでに制限します。たとえば深さ1でクローンすると、通常は先端付近のコミットだけを対象にします。
git clone --depth=1 <url>
単一ブランチだけを対象にする指定を組み合わせることもできます。シャローは履歴そのものを切り落とすため、過去のコミットをさかのぼる作業には向きません。git logで必要な過去を表示できない場合があり、git merge-baseのようにコミット間の関係を調べる操作にも影響します。履歴を使う開発者の日常環境には、強い制約となり得ます。また、後からshallow fetchで履歴を広げる処理は計算コストが高くなる場合があります。
Rank #4
用途と必要なGit操作から選ぶ
- 継続して開発する: ブロブレスを候補にします。コミットとツリーを保ちつつ、ファイル内容は必要時に取得できます。
- 使い捨てCIで履歴も必要: ツリーレスを検討します。パス単位の履歴表示やblameを実行するなら、追加取得による遅延も考慮します。
- 使い捨てCIで履歴がほぼ不要: シャローを検討します。ビルドやテストで履歴を参照するコマンドが必要か先に確認します。
- 幅広いGit操作をローカルで完結させたい: フルクローンを選びます。必要データがそろう代わりに、初回ダウンロードとディスク容量の負担が増えます。
選定時は、初回転送量だけでなく、git log -- <path>、git blame、git merge-baseなど実際に使う操作を洗い出してください。パーシャルクローンでは不足オブジェクトの取得が遅延として現れ、シャロークローンでは不足するコミット履歴が操作の制約として現れます。
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchサーバーのフィルター対応を確認する
パーシャルクローンのフィルターをサーバーが受け付けない場合、フルクローンに切り替わる可能性があります。期待どおりに転送量が減らないときは、利用中のGitとホスティングサービスの現行仕様を確認してください。GitHubやGitHub Enterprise Serverに関する2021年の記事中の対応状況は当時の記述であり、現在の互換性を示すものではありません。
Best Value
出典
方式の説明は、Derrick StoleeによるGitHub Blogの英語記事(2020年12月21日公開、2021年4月28日更新)および日本語版(2021年1月13日公開)に基づいています。コマンドや機能の概要はGit公式文書も参照してください。
Quick Recap
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.

