Git sparse-checkout(スパース・チェックアウト)とは?

Sparse-checkoutは巨大なリポジトリのうち、いま触る追跡済みファイルだけを作業ツリーへ展開する機能です。Gitを使う開発者、レビュー担当者、リポジトリ運用者は、コマンド名だけで判断せず、作業ツリー、ステージ、ローカル履歴、リモートのどこを変えるかを分けてください。最初に行うのは、変更中ファイルとignoredファイルを確認し、必要なローカルデータをリポジトリ外へ退避することです。本記事は2026年8月6日にGit 2.55.0の公式マニュアルを確認しています。

30秒要約

前提と状態確認

Gitの操作対象は、少なくとも次の四層に分けます。

何があるか主な確認
作業ツリーエディタで編集中のファイル、未追跡ファイルgit status --shortgit diff
ステージ次のコミットへ入れる候補git diff --cached
ローカル履歴現在のブランチ、HEAD、過去コミットgit branch --show-currentgit log --oneline --decorate -n 10
リモート追跡参照、fetch先、push先git remote -vgit branch -vv
git --version
git status --short
git branch --show-current
git branch -vv
git remote -v
git log --oneline --decorate -n 10

共有先の最新状態を比較したい場合は、作業ツリーへ統合するpullより先にgit fetch --pruneを使います。fetchは通常、現在の作業ツリーを変更せず、リモート追跡参照を更新します。

向くケースと向かないケース

向くのは、Web、API、モバイル、共有パッケージが一つのモノレポにあり、普段の一タスクが触るディレクトリを限定できる場合です。エディタ検索、ファイル監視、担当範囲の見通しを改善できます。

向かないのは、小さなリポジトリ、全体リファクタリング、全ソースを読む生成・監査、秘密情報を見せたくない場面です。対象外のファイルもGit履歴には残り、git show等で参照できます。

似た機能との違い

症状機能主に変わるもの
作業フォルダが大きいSparse-checkout作業ツリー
最初の取得が重いPartial clone初期取得オブジェクト
statusが重いSparse indexインデックス表現
複数ブランチを同時に開きたいWorktree作業場所とHEAD

Cone modeではルートファイルや祖先ディレクトリ直下のファイルが残ります。指定したディレクトリ以外がすべて消えるわけではありません。範囲を増やすときはadd、狭めるときは残す完全な一覧をsetします。

判断表

状況選ぶ操作期待結果影響・戻し方
担当範囲だけ表示sparse-checkout set作業ツリーを限定addsetdisable
初回転送も限定clone --filter=blob:none --sparseblobを遅延取得追加通信・オフライン制約
並行作業を分離worktree addブランチごとの作業場所clean確認後remove
全体作業通常checkout全ファイルを利用Sparseを無理に維持しない

安全な手順

最小範囲で開始する

前提: 作業ツリーとignoredファイルを確認し、必要データを退避済み

git status --short
git status --short --ignored
git sparse-checkout set apps/web packages/ui
git sparse-checkout list

期待結果: 選択したディレクトリ中心の作業ツリーになる。

影響: 対象外の追跡済みファイルを通常展開しない。ignoredファイル削除の可能性がある。

戻し方: git sparse-checkout addで増やし、空き容量確認後disableで全体へ戻す。

新規クローンで開始する

前提: リモート対応と追加通信を確認済み

git clone --filter=blob:none --sparse <REPOSITORY_URL> product
cd product
git sparse-checkout set apps/web packages/ui

期待結果: 初期作業ツリーと初期blob転送を抑えられる。

影響: 必要なblobは後から取得される。

戻し方: 通常cloneを別に作るか、必要オブジェクトを取得する。

具体例

フロントエンド担当

apps/webと共有UI・型定義を一緒に選び、ルート設定、IDE補完、テストを確認します。

全体リファクタリング

通常checkoutへ戻し、全体検索・生成・テストを行う方が単純で安全です。

失敗時の復旧

必要なファイルが見えない

git sparse-checkout add <directory>で対象を増やします。

競合後に範囲外ファイルが残る

mergeまたはrebaseを終えてからgit sparse-checkout reapplyします。

通常checkoutへ戻せない

空き容量、未コミット変更、ignoredファイルを確認し、強制削除せずdisableします。

チーム運用上の注意

更新履歴

参考リンク

PR