Git Sparse Checkout: リポジトリの一部だけをクローンする
git sparse-checkout を使って大規模リポジトリの特定のディレクトリのみをクローンして作業する方法を解説。ディスク容量の節約とパフォーマンス向上を実現します。
git sparse-checkout set src/components src/lib詳細な説明
Sparse Checkout とは?
sparse checkout を使うと、リポジトリからファイルの一部のみをチェックアウトできます。作業ディレクトリにすべてのファイルを展開する代わりに、必要なディレクトリやファイルを指定します。モノリポや非常に大きなリポジトリで非常に有用です。
Sparse Checkout のセットアップ
# ファイルをチェックアウトせずにクローン
git clone --no-checkout https://github.com/org/monorepo.git
cd monorepo
# sparse checkout を有効化
git sparse-checkout init --cone
# 含めるディレクトリを指定
git sparse-checkout set src/components src/lib
# チェックアウト
git checkout main
Cone モード vs. Non-Cone モード
- Cone モード(推奨、
--cone): パターンがディレクトリ全体に一致。高速で効率的。 - Non-Cone モード: gitignore スタイルの任意のパターンをサポート。遅いがより柔軟。
Sparse Checkout の管理
# 現在のパターンを表示
git sparse-checkout list
# ディレクトリを追加
git sparse-checkout add src/utils
# sparse checkout を無効化(すべてのファイルを復元)
git sparse-checkout disable
Partial Clone との組み合わせ
最大の効率を得るには、sparse checkout をpartial clone と組み合わせて、不要な blob のダウンロードを避けます:
git clone --filter=blob:none --sparse https://github.com/org/monorepo.git
cd monorepo
git sparse-checkout set packages/my-package
これは最初に Git メタデータのみをダウンロードします。blob はファイルをチェックアウトする際にオンデマンドで取得されます。
Sparse Checkout を使うべきとき
- モノリポで1つのパッケージのみ作業する場合。
- ローカルに不要なメディアアセットがある大規模リポジトリ。
- 特定のサブディレクトリのみビルドやテストを行う CI/CD パイプライン。
制限事項
- 一部の Git 操作(例:
git stash)は sparse checkout 時に予期しない動作をすることがあります。 - チームメンバーはそれぞれ独自の sparse checkout パターンを設定する必要があります。
- すべての Git GUI が sparse checkout を完全にサポートしているわけではありません。
sparse checkout は扱いにくいモノリポを、集中的で高速なワークスペースに変えます。
ユースケース
50個のパッケージを含むモノリポで開発者がフロントエンドパッケージのみ必要な場合、sparse checkout を使ってそのパッケージだけをチェックアウトし、クローン時間とディスク使用量を削減する場面で使用します。