関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにメモメモ。。。
長いこと git 使っているのですが、sparse-checkout って機能あったんですね。
大きなリポジトリとかになるとサイズもものすごいことになります。たまに特定のディレクトリの下だけみたいときもあったりする。
そんなときに使えますね。以下の記事で知りました。感謝。
上記のサイト様の記事に使い方は全部書かれているのですが、自分用に以下にもメモしておこうと思います。
試してみる
サンプルとして利用するのは自分のリポジトリとします。
# クローンする際に --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
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。