git sparse-checkout を無効にするには
git で一部のディレクトリ・ファイルのみを同期するとき sparse-checkout
という機能を使います。有効にする方法は過去の記事を参照ください。
今回は sparse-checkout
を無効にしてすべてのオブジェクトをチェックアウトしたいときの方法を紹介します。
前提
下記のようにして hoge/
のみをチェックアウトしている状態を仮定します。
git init
git remote add origin リポジトリのURL
git config core.sparsecheckout true
echo hoge/ > .git/info/sparse-checkout
git pull origin master
sparse-checkout の解除方法
結論から書くと sparse-checkout
を無効にするには下記のコマンドを順に叩きます。
echo "/*" > .git/info/sparse-checkout
git read-tree -mu HEAD
rm .git/info/sparse-checkout
git config core.sparsecheckout false
流れは下記のとおりです。
.git/info/sparse-checkout
に全体を対象とするよう/*
を指定するgit read-tree
でツリー情報を読み込み直す.git/info/sparse-checkout
を削除sparsecheckout
を無効にする
git read-tree
の詳細は下記を参照してください。
Git 2.26 以降で git sparse-checkout
コマンドが使える場合
sparse-checkout の有効化
Git 2.26 以降の場合、専用の git sparse-checkout
コマンドが用意されています。執筆時点での最新のバージョンは 2.26.2 でした。
冒頭の
git init
git remote add origin リポジトリのURL
git config core.sparsecheckout true
echo hoge/ > .git/info/sparse-checkout
git pull origin master
と同じように sparse-checkout
を設定するには、下記のようになります。
git init
git remote add origin リポジトリのURL
git sparse-checkout init
git sparse-checkout set hoge/
git pull origin master
ほとんど変わりません。見た目は少しわかりやすくなったかな、程度ですかね。
sparse-checkout の無効化
しかし、無効にするときは disable
を指定するだけなので、かなり簡潔になります。
git sparse-checkout disable
これだけです。 git read-tree
をする必要がありません。
Git 2.26 以降では git sparse-checkout
コマンドを使うのがよいでしょう。
ちなみに disable
では .git/info/sparse-checkout
は削除されませんので再度 init
で有効にすれば、元の sparse-checkout
の設定に戻すことができます。
その他
git sparse-checkout
コマンドでは .git/info/sparse-checkout
を直接編集しなくても、コマンドで対象パスの確認・変更・追加ができます。
add
, set
でも git read-tree
は自動的に行われますので、これ以外にコマンドを実行する必要がありません。
確認
git sparse-checkout list
現在設定されている .git/info/sparse-checkout
の内容が表示されます。
追加
git sparse-checkout add piyo/
元々指定していたパスに加えて、指定したパスが追加されます。
変更
git sparse-checkout set piyo/
元々の設定が消えて、指定したパスのみが設定されます。