Git

Gitで特定のディレクトリだけcloneする方法

More than 1 year has passed since last update.

gitで複数のプロジェクトファイルを管理していた場合などに、特定のディレクトリ配下だけcloneしたい場合などあると思います。そんな時に便利なgitの使い方があったので紹介します。


git cloneする

git clone リポジトリのURL

※既存でgitリポジトリがある場合スキップ


configを編集する

.gitのあるディレクトリに移動して

git config core.sparsecheckout true

このコマンドを実行することで

.git/configのファイルにsparsecheckout = trueが追加される。


checkoutしたいディレクトリを指定

.git/info/の配下にsparse-checkoutというファイルを追加する。

vi .git/info/sparse-checkout

checkoutしたいディレクトリのパスを記述する。

ちなみに!パスとすることで除外することもできるようです。

例)sparse-checkout

/html

!/html/css

こんな感じのはず。


設定をリポジトリに反映させる

git read-tree -m -u HEAD

これで指定したディレクトリのみがリポジトリにある状態になったかと思います。

普通にgit pullするだけでもいけそうな気がする


 補足


branchを変更したい場合

複数branchがあったとして、git branchをしても

git read-tree -m -u HEADを実行した時のbranchしか表示されない。

なので.git/configからbranchを書き換える必要がある。



[branch "master"]

remote = origin

merge = refs/heads/master



こんな感じで書いてある箇所があるので、このケースであればmasterと書いてある箇所を書き換えれば良い。

こんなことをしなくても




git branch --set-upstream-to=origin/ブランチ名 ブランチ名



これでブランチが追加される。

それでもbranchが表示されないかもしれないですが、

git checkout ブランチ名でいけると思います。

そしてgit pull!!

 参考サイト

* Git 特定のフォルダのみcloneする

* git sparse checkout で一部のサブディレクトリだけを clone せずに pull/checkout する

* Gitで他のリポジトリから一部のファイルのみをcloneする方法