それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

git で特定のディレクトリだけをclone して管理する

git clone するとガッツリとれちゃうんだ。

でも、git ってそういうもんだし、git フォルダを git でネストすりゃいいんだけど。。。

git で特定のフォルダだけを取り出したい。

github.com が不可視のプライベート・レポジトリの数に上限があるので、どうしてもgitレポジトリの数を増やせないとか。だから特定フォルダを取り出したいとかね。

git 初心者が混じってると、なんでも全部突っ込んできてツライ。もちろん教育が必要なんだけど、先輩を教育するのも忍びないし、何よりまだソコまで至ってなかったり。。。とりあえず、管理してる全部のサイトを一個のgit フォルダに突っ込んだりしちゃうんだよ。

SVNを使ってたりしたので、全部を入れなきゃダメって思ってるところあるし

そういう時に、まとめてcloneしたり、ずっとデータをダウンロードしてくるのはつらいものがある。

そんな時に git sparse-checkout

sparse ってのは英語で、断片的とか、まだらとか、ガラガラって意味ですね。

使い方簡単

cd path/to/git/clone/repository
git config core.sparsecheckout true
echo "path/to/include/only/this/directory" > .git/info/sparse-checkout
git read-tree -m -u HEAD

解説

最初に git clone されたディレクトリに入って。

git config コマンドで、設定を書く

つぎに、これだけは必要ってディレクトリを設定に書く

最後に、それ以外を全部消す。

ってことです。

メリット

ディレクトリ内検索や、システム全体検索(lcoate/grepspotlight/mdfind 、Windows Search Indexer )が余計なファイルを検索しなくなる。

余計なファイルを弄っちゃうおそれも少なくなる。

デメリット

このやり方でも、初回 clone は除けなさそう。

そもそも「見せてないだけ」なのでコミット履歴やファイルのやりとりは普通に発生します。