以下の内容はhttps://devlights.hatenablog.com/entry/2025/06/13/073000より取得しました。


gitで一部のファイルやディレクトリのみをチェックアウトする (git sparse-checkout)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

長いこと git 使っているのですが、sparse-checkout って機能あったんですね。

大きなリポジトリとかになるとサイズもものすごいことになります。たまに特定のディレクトリの下だけみたいときもあったりする。

そんなときに使えますね。以下の記事で知りました。感謝。

na7log.com

上記のサイト様の記事に使い方は全部書かれているのですが、自分用に以下にもメモしておこうと思います。

試してみる

サンプルとして利用するのは自分のリポジトリとします。

# クローンする際に --no-checkout を付与、または、最新だけでよければ --depth=1 も付けたほうが軽くなる
$ git clone --no-checkout --depth=1 https://github.com/devlights/try-golang.git
Cloning into 'try-golang'...
remote: Enumerating objects: 1873, done.
remote: Counting objects: 100% (1873/1873), done.
remote: Compressing objects: 100% (1496/1496), done.
remote: Total 1873 (delta 331), reused 1492 (delta 237), pack-reused 0 (from 0)
Receiving objects: 100% (1873/1873), 786.73 KiB | 1.41 MiB/s, done.
Resolving deltas: 100% (331/331), done.

# --no-checkout を付けてクローンしているのでファイルはまだ存在しない
$ cd try-golang
$ ls -l
total 0

# sparse-checkout の初期化を行う
$ git sparse-checkout init

# sparse-checkout の情報は .git/info/sparse-checkout ファイルに記録される
$ cat .git/info/sparse-checkout
/*
!/*/

# 部分チェックアウトするファイルまたはディレクトリを設定
$ git sparse-checkout set builder

# sparse-checkoutのファイルを見ると情報が増えてる
$ cat .git/info/sparse-checkout
/*
!/*/
/builder/

# 準備が出来たらブランチをチェックアウト (今回はmainブランチとする)
$ git checkout main
Already on 'main'
Your branch is up to date with 'origin/main'.

# するとファイルが出現するが、ディレクトリはsparse-checkoutで指定されたもののみが出現される)
$ ls -l
total 40
-rw-r--r-- 1 dev dev  637 Jun 11 19:23 Dockerfile
-rw-r--r-- 1 dev dev 1071 Jun 11 19:23 LICENSE
-rw-r--r-- 1 dev dev 3978 Jun 11 19:23 README.md
-rw-r--r-- 1 dev dev 1218 Jun 11 19:23 Taskfile.yml
-rw-r--r-- 1 dev dev  119 Jun 11 19:23 Taskfile_linux.yml
-rw-r--r-- 1 dev dev  104 Jun 11 19:23 Taskfile_windows.yml
drwxr-xr-x 2 dev dev 4096 Jun 11 19:23 builder
-rw-r--r-- 1 dev dev 1076 Jun 11 19:23 go.mod
-rw-r--r-- 1 dev dev 5688 Jun 11 19:23 go.sum

# 部分チェックアウトする箇所を追加
$ git sparse-checkout add runner
$ cat .git/info/sparse-checkout
/*
!/*/
/builder/
/runner/

# 部分チェックアウトが増えている
$ ls -l
total 44
-rw-r--r-- 1 dev dev  637 Jun 11 19:23 Dockerfile
-rw-r--r-- 1 dev dev 1071 Jun 11 19:23 LICENSE
-rw-r--r-- 1 dev dev 3978 Jun 11 19:23 README.md
-rw-r--r-- 1 dev dev 1218 Jun 11 19:23 Taskfile.yml
-rw-r--r-- 1 dev dev  119 Jun 11 19:23 Taskfile_linux.yml
-rw-r--r-- 1 dev dev  104 Jun 11 19:23 Taskfile_windows.yml
drwxr-xr-x 2 dev dev 4096 Jun 11 19:23 builder
-rw-r--r-- 1 dev dev 1076 Jun 11 19:23 go.mod
-rw-r--r-- 1 dev dev 5688 Jun 11 19:23 go.sum
drwxr-xr-x 2 dev dev 4096 Jun 11 19:26 runner

# 部分チェックアウトをやめる
$ git sparse-checkout disable

# 見てみると、全ディレクトリが出現している(普通の状態)
$ ls -l
total 56
-rw-r--r--  1 dev dev  637 Jun 11 19:23 Dockerfile
-rw-r--r--  1 dev dev 1071 Jun 11 19:23 LICENSE
-rw-r--r--  1 dev dev 3978 Jun 11 19:23 README.md
-rw-r--r--  1 dev dev 1218 Jun 11 19:23 Taskfile.yml
-rw-r--r--  1 dev dev  119 Jun 11 19:23 Taskfile_linux.yml
-rw-r--r--  1 dev dev  104 Jun 11 19:23 Taskfile_windows.yml
drwxr-xr-x  2 dev dev 4096 Jun 11 19:23 builder
drwxr-xr-x  3 dev dev 4096 Jun 11 19:27 cmd
drwxr-xr-x 19 dev dev 4096 Jun 11 19:27 examples
-rw-r--r--  1 dev dev 1076 Jun 11 19:23 go.mod
-rw-r--r--  1 dev dev 5688 Jun 11 19:23 go.sum
drwxr-xr-x  2 dev dev 4096 Jun 11 19:27 mapping
drwxr-xr-x  2 dev dev 4096 Jun 11 19:26 runner

# sparse-checkout の情報はそのまま
$ cat .git/info/sparse-checkout
/*
!/*/
/builder/
/runner/

# 再度、sparse-checkout 状態に戻す
$ git sparse-checkout init

# 部分チェックアウト状態に戻った
$ ls -l
total 44
-rw-r--r-- 1 dev dev  637 Jun 11 19:23 Dockerfile
-rw-r--r-- 1 dev dev 1071 Jun 11 19:23 LICENSE
-rw-r--r-- 1 dev dev 3978 Jun 11 19:23 README.md
-rw-r--r-- 1 dev dev 1218 Jun 11 19:23 Taskfile.yml
-rw-r--r-- 1 dev dev  119 Jun 11 19:23 Taskfile_linux.yml
-rw-r--r-- 1 dev dev  104 Jun 11 19:23 Taskfile_windows.yml
drwxr-xr-x 2 dev dev 4096 Jun 11 19:23 builder
-rw-r--r-- 1 dev dev 1076 Jun 11 19:23 go.mod
-rw-r--r-- 1 dev dev 5688 Jun 11 19:23 go.sum
drwxr-xr-x 2 dev dev 4096 Jun 11 19:26 runner

# sparse-checkout 設定されているものの確認
$ git sparse-checkout list
builder
runner

# sparse-checkout 設定をクリア
$ git sparse-checkout set

# 設定リストを見ると空になってる
$ git sparse-checkout list
$ cat .git/info/sparse-checkout
/*
!/*/

# 部分チェックアウトが消えた
$ ls -l
total 36
-rw-r--r-- 1 dev dev  637 Jun 11 19:23 Dockerfile
-rw-r--r-- 1 dev dev 1071 Jun 11 19:23 LICENSE
-rw-r--r-- 1 dev dev 3978 Jun 11 19:23 README.md
-rw-r--r-- 1 dev dev 1218 Jun 11 19:23 Taskfile.yml
-rw-r--r-- 1 dev dev  119 Jun 11 19:23 Taskfile_linux.yml
-rw-r--r-- 1 dev dev  104 Jun 11 19:23 Taskfile_windows.yml
-rw-r--r-- 1 dev dev 1076 Jun 11 19:23 go.mod
-rw-r--r-- 1 dev dev 5688 Jun 11 19:23 go.sum

# 再設定
$ git sparse-checkout set examples
$ ls -l
total 40
-rw-r--r--  1 dev dev  637 Jun 11 19:23 Dockerfile
-rw-r--r--  1 dev dev 1071 Jun 11 19:23 LICENSE
-rw-r--r--  1 dev dev 3978 Jun 11 19:23 README.md
-rw-r--r--  1 dev dev 1218 Jun 11 19:23 Taskfile.yml
-rw-r--r--  1 dev dev  119 Jun 11 19:23 Taskfile_linux.yml
-rw-r--r--  1 dev dev  104 Jun 11 19:23 Taskfile_windows.yml
drwxr-xr-x 19 dev dev 4096 Jun 11 19:33 examples
-rw-r--r--  1 dev dev 1076 Jun 11 19:23 go.mod
-rw-r--r--  1 dev dev 5688 Jun 11 19:23 go.sum

参考情報

git-scm.com


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。




以上の内容はhttps://devlights.hatenablog.com/entry/2025/06/13/073000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14