Git sparse-checkout を試してみる
まずはどんな感じなのか見てみましょう。
Git sparse-checkout とは?
gitにおいて、特定のディレクトリのみをcloneしてくる機能のことです。この機能そのものは v2.6.0 (2015年) から存在しているようですが、 v2.25.0 からコマンドラインから使用できるようになっているとのことです。
この機能を使用すると、monorepo (様々なソフトウェアを1つのリポジトリにまとめて管理すること) での開発体験がより便利になるでしょう。
では、sparce-checkout するのとしないのとを比較してみましょう。
今までどおりの clone
$ git clone https://github.com/derrickstolee/sparse-checkout-example sparce-checkout-example-full
Cloning into 'sparce-checkout-example-full'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 1901 (delta 1), reused 11 (delta 1), pack-reused 1887
Receiving objects: 100% (1901/1901), 170.91 MiB | 8.56 MiB/s, done.
Resolving deltas: 100% (181/181), done.
Updating files: 100% (1560/1560), done.
$ du --summarize --human-readable sparce-checkout-example-full/
364M sparce-checkout-example-full/
cloneした結果のディレクトリのサイズは 364 MBでした。
sparce-checkout直後
$ git clone --no-checkout https://github.com/derrickstolee/sparse-checkout-example sparce-checkout-example-sparced
Cloning into 'sparce-checkout-example-sparced'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 1901 (delta 1), reused 11 (delta 1), pack-reused 1887
Receiving objects: 100% (1901/1901), 170.91 MiB | 8.19 MiB/s, done.
Resolving deltas: 100% (181/181), done.
$ du --summarize --human-readable sparce-checkout-example-sparced/
172M sparce-checkout-example-sparced/
$ cd sparce-checkout-example-sparced/
$ ls -al
合計 12
drwxr-xr-x 3 lico lico 4096 3月 30 20:31 .
drwxr-xr-x 4 lico lico 4096 3月 30 20:31 ..
drwxr-xr-x 8 lico lico 4096 3月 30 20:31 .git
clone直後のディレクトリのサイズは172 MBで、ディレクトリの中には .git 以外になにもありません。
$ git sparse-checkout init --cone
$ ls -al
合計 24
drwxr-xr-x 3 lico lico 4096 3月 30 20:35 .
drwxr-xr-x 4 lico lico 4096 3月 30 20:31 ..
drwxr-xr-x 8 lico lico 4096 3月 30 20:35 .git
-rw-r--r-- 1 lico lico 1162 3月 30 20:35 LICENSE.md
-rw-r--r-- 1 lico lico 1200 3月 30 20:35 README.md
-rw-r--r-- 1 lico lico 396 3月 30 20:35 bootstrap.sh
gitディレクトリ下で git sparse-checkout init --cone を実行することで、リポジトリルートに存在するファイルのみが見られるようになりました。
(git clone --sparce <url> という方法もあり、こちらは試したところ、 sparce-checkout init --coneまで済んだ状態のリポジトリができていました)
特定のディレクトリをsparce-checkoutしてみる
この状態で、git sparse-checkout set client/android を実行してみます。
$ git sparse-checkout set client/android
$ ls
LICENSE.md README.md bootstrap.sh client
$ ls client/
README android
$ ls -a client/android/
. .. .gitignore README.md app.js auth.js config.js images package-lock.json package.json static views
すると、 client/android というディレクトリが出現しました。
今後、部分的なcheckoutが便利になっていくと、例えばあるサービスに関係するコードは全部1つのリポジトリで管理するようになる、のように、これまでのリポジトリ分割のベストプラクティスが変遷していくかもしれませんね。
この記事が気に入ったらサポートをしてみませんか?