git sparse-checkoutを利用した部分チェックアウトの手順

Git
この記事は約5分で読めます。
記事内に広告が含まれています。

Gitを使用して大規模なリポジトリを扱う際、すべてのファイルをチェックアウトする必要がない場合があります。例えば、リポジトリが膨大なファイル数を持つプロジェクトの場合、特定のディレクトリやファイルだけを取り扱いたいこともあるでしょう。

そのようなケースで便利なのが、Gitバージョン2.25から導入された「git sparse-checkout」です。この機能を利用することで、必要な部分だけを効率的にチェックアウトできます。

本記事では、git sparse-checkoutの基本的な使い方について、具体的なコマンド例を交えながら説明していきます。

前提

「git sparse-checkout」は、Gitバージョン2.25(2020年1月13日リリース)から利用できる機能です。このバージョン以降のGitを使用していることが前提になります。まずは、Gitのバージョンを確認しましょう。

git --version

git sparse-checkoutの手順

基本的な手順

1. リポジトリをクローンする

通常のgit cloneではなく、–no-checkoutオプションを使ってクローンします。このオプションにより、すぐにファイルをチェックアウトせず、後で必要な部分だけを取得することが可能です。

git clone --no-checkout リポジトリURL

2. sparse-checkoutを初期化する

次に、git sparse-checkout initを実行して、sparse-checkoutを有効化します。このコマンドにより、部分チェックアウトの設定が可能になります。

git sparse-checkout init

3. 必要なフォルダだけをチェックアウトする

特定のフォルダだけをチェックアウトするには、以下のコマンドを使います。フォルダパスには、チェックアウトしたいディレクトリのパスを指定します。

git sparse-checkout set フォルダパス

複数のフォルダを指定したい場合は、以下のようにスペースで区切ってフォルダパスを指定します。

git sparse-checkout set フォルダパス1 フォルダパス2

4. 現在のチェックアウト対象を確認する

現在設定されているsparse-checkoutの対象を確認するには、以下のコマンドを使用します。

git sparse-checkout list

5. ブランチをチェックアウトする

最後に、必要なファイルだけを含んだ状態でブランチをチェックアウトします。通常はmainブランチを指定しますが、任意のブランチ名を指定することも可能です。

git checkout main

チェックアウト対象を変更する

すでにチェックアウトしたフォルダとは異なるフォルダを新たに設定することも可能です。以下のようにコマンドを再実行し、別のフォルダパスを指定してください。

git sparse-checkout set 新しいフォルダパス

※解除コマンドや追加コマンドがあるわけではありません。

sparse-checkoutを停止する

部分チェックアウトを停止し、リポジトリ全体をチェックアウトしたい場合は、以下のコマンドを使用します。このコマンドを実行すると、全てのファイルがチェックアウトされます。

git sparse-checkout disable

補足:リモートリポジトリのフォルダを確認する方法

リモートリポジトリにどのようなフォルダがあるかを確認するには、以下のコマンドを使用します。このコマンドは、指定したブランチ(例:main)のディレクトリ構造をリスト表示します。

git ls-tree -d -r --name-only main

指定フォルダ以下のフォルダを確認する場合:

git ls-tree -d -r --name-only main /src/driver

参考:ブロブレスクローンを組み合わせる

ブロブレスクローン(blob less clone)、パーシャルクローンを組み合わせることで、

  • 最低限の通信
  • 最低限の容量

を実現可能です。

ブロブレスクローンについては次の記事が参考になります。

パーシャルクローンとシャロークローンを活用しよう
Git のリポジトリが大きくなると、新しい開発者がクローンして作業を始めるのが難しくなります。Git は 分散 バージョン管理システムとして設計されています。つまり、リポジトリとのやりとりを管理する中央サーバーに接続しなくても、自分のマシン...
  • blob:実ファイルのことです。
    → つまりgit cloneの際は実ファイルはダウンロードせずに後で指定ファイルをダウンロードするようなことが可能です。
  • github.comは対応しています。
  • 最新gitクライアントを使いましょう。

gitでこれは画期的!

git clone --no-checkout --filter=blob:none <Repository-Url>
cd <Repository>
git sparse-checkout init
git sparse-checkout set フォルダパス
git checkout <branchName>

git cloneでは主に構成をダウンロードするため非常に高速です。そしてsparse-checkout設定後のcheckoutで実ファイルをダウンロードして展開するという流れです。

git cloneの際に、–depth 1オプションを組み合わせれば、さらに高速&軽量化できる見込みです。

コメント

Top
タイトルとURLをコピーしました