Sparse-checkoutが減らすのは作業ツリーへ展開する追跡済みファイルであり、既に取得した履歴やGitオブジェクトではありません。Gitを使う開発者、レビュー担当者、リポジトリ運用者は、コマンド名だけで判断せず、作業ツリー、ステージ、ローカル履歴、リモートのどこを変えるかを分けてください。最初に行うのは、git status --shortgit status --short --ignoredで変更中ファイルとignoredファイルを確認することです。本記事は2026年8月6日にGit 2.55.0の公式マニュアルを確認しています。

30秒要約

  • Sparse-checkoutは作業ツリーを絞る。.gitの履歴や既取得オブジェクトは小さくしない。
  • 初期転送量を減らすのはpartial clone、インデックス負荷を減らすのはsparse index、並行作業を分けるのはworktree。
  • Cone modeでは指定ディレクトリだけでなく、リポジトリ直下と祖先ディレクトリ直下のファイルも残る。
  • 範囲変更時にignoredファイルが削除される場合がある。ローカルDBや.envは先に退避する。
  • Sparse-checkoutは秘密情報を隠す境界ではない。対象外でも履歴から参照できる。

前提と状態確認

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は通常、現在の作業ツリーを変更せず、リモート追跡参照を更新します。

何が小さくなり、何が残るのか

Gitのリポジトリには、コミット・tree・blobを保存するオブジェクトデータベース、次のコミット候補を管理するインデックス、エディタやビルドが読む作業ツリーがあります。Sparse-checkoutの中心は作業ツリーです。選択外の追跡済みファイルを通常表示しない状態にし、巨大なモノレポでエディタ検索、ファイル監視、普段のビルド対象を絞ります。

困りごと主に使う仕組み変わる場所変わらないもの
作業フォルダのファイルが多いSparse-checkout作業ツリー既取得の履歴・オブジェクト
クローン時の転送量が大きいPartial clone最初に取得するオブジェクト必要時の追加取得
statusaddが重いSparse indexインデックス表現選択範囲そのもの
複数ブランチを同時に開きたいWorktree作業場所、HEAD、インデックス共有オブジェクトと多くのrefs
過去の巨大バイナリが重いGit LFS・履歴移行blobの保存方法・履歴作業範囲だけでは解決しない

Cone modeではディレクトリ単位で指定します。たとえばapps/webを選んでも、ルートのREADME.mdpackage.json、祖先であるapps/直下のファイルが残る場合があります。これは不具合ではありません。

Sparse index・partial clone・worktreeとの境界

Sparse indexは対象外ディレクトリのインデックス項目をtree単位にまとめる最適化です。作業ツリーをさらに狭める機能ではありません。まずSparse-checkoutだけでIDE、GUI、ビルド、テストを確認し、その後に検証します。

Partial cloneの--filter=blob:noneは、未使用blobの初期取得を抑えます。必要になったオブジェクトは後からpromisor remoteへ取得されるため、オフライン利用、認証、追加通信、リモート側対応を確認します。

Worktreeは別ブランチの作業場所とインデックスを分けます。一つのタスク、一つのブランチ、一つのworktree、一つのSparse範囲へ揃えると変更が混ざりにくくなります。ただしworktreeもSparse-checkoutも権限分離ではありません。秘密情報は別リポジトリ、シークレット管理、隔離した実行環境で扱います。

判断表

状況選ぶ操作期待結果影響・戻し方
作業ツリーだけを小さくしたいgit sparse-checkout set ...選択範囲中心の作業ツリー範囲を変更するかdisableで戻す
初期転送量も減らしたいgit clone --filter=blob:none --sparse必要blobを後から取得追加通信とオフライン制約を確認
複数ブランチを同時に開きたいgit worktree add作業場所を分離clean確認後にworktree remove
秘密情報を隠したいSparse-checkoutを使わない権限・実行環境で分離秘密をリポジトリ外へ移す

安全な手順

既存リポジトリで最小範囲を試す

前提: 変更中ファイルをコミットまたは退避し、ignoredファイルをリポジトリ外へバックアップ済み

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

期待結果: 指定した範囲とCone modeで必要な祖先ファイルが残り、変更が意図せず消えていない。

影響: 作業ツリーの表示範囲を更新する。履歴は削除しないが、対象外のignoredファイルが削除される場合がある。

戻し方: 必要範囲をaddまたはsetし直す。通常状態へ戻す前に空き容量を確認し、git sparse-checkout disableを使う。

新規クローンで転送量も抑える

前提: リモートがpartial cloneをサポートし、追加通信を許容できる

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

期待結果: 作業ツリーは選択範囲中心になり、未使用blobの初期転送を抑えられる。

影響: 必要なblobは後から取得される。オフライン時に未取得内容を参照できない場合がある。

戻し方: 完全なオブジェクトが必要なら通常cloneを別に作るか、必要オブジェクトを取得してからオフライン化する。

Sparse indexを後から試す

前提: Sparse-checkoutだけで日常操作を検証済み

git sparse-checkout reapply --sparse-index
git status --short
# 問題時
git sparse-checkout reapply --no-sparse-index

期待結果: 選択範囲を維持したままインデックス表現を切り替えられる。

影響: 一部ツールとの互換性や性能が変わる可能性がある。

戻し方: --no-sparse-indexで通常インデックスへ戻す。

具体例

Webアプリだけを担当する

apps/webだけでなく共有UI、型定義、ルート設定を含めます。全パッケージ探索を前提とするビルドは、対象外ディレクトリがなくても正しく動くか確認します。

AIエージェントを複数動かす

先にworktreeで作業場所を分け、その後に各worktreeでSparse範囲を設定します。同じブランチを複数worktreeへ強制checkoutせず、タスクごとに専用ブランチを作ります。

失敗時の復旧

通常checkoutへ戻したい

git status --shortを確認し、十分な空き容量を用意してからgit sparse-checkout disableを実行します。全追跡済みファイルが再展開されます。

ignoredファイルが消えた

Git履歴には入っていないためGitだけで必ず復元できません。作業を止め、バックアップ、開発DBダンプ、OSスナップショットを確認します。

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

mergeまたはrebaseを完了・中止してからgit sparse-checkout reapplyを実行します。競合中に強制削除しません。

チーム運用上の注意

  • 操作前後のブランチ名、対象コミット、実行コマンド、結果、担当者をPull Requestや作業記録へ残します。
  • 共有済み履歴を変える操作は、個人のローカル整理と同じ基準で実行しません。保護ブランチ、レビュー、CI、リリース規則を優先します。
  • コマンド例のoriginmain、パスは例です。実際の追跡先はgit branch -vvgit remote -vで確認します。
  • 認証情報、トークン、秘密鍵、個人情報をコマンド、URL、コミットメッセージ、ログ例へ含めません。
  • 破壊的操作を自動化する場合は、dry-run、対象限定、バックアップ、承認、停止条件、復元テストを先に設計します。
  • チームで範囲一覧を共有する場合はgit sparse-checkout set --stdinで適用できるファイルを管理します。
  • 全体テスト、ライセンス検査、コード生成などリポジトリ全体を読む処理には通常checkoutを残します。

更新履歴

  • 2026-08-06: Git 2.55.0の公式マニュアルを確認し、Sparse-checkout(スパース・チェックアウト)は、巨大なモノレポの「どこ」を小さくするのかの状態確認、安全手順、復旧条件を整理しました。

参考リンク