GitHub の指定リポジトリから指定フォルダのみを clone する

Git 特定のフォルダのみcloneする - Qiita を参考にした。

やりたいこと

stakiran/text というリポジトリに対し、knowledge というフォルダだけを clone したい。

コマンドライン

hide は秀丸エディタだけどお好きなエディタで。ここでは「knowledge」という行を追加した。

$ git clone https://github.com/stakiran/text
$ cd text
$ git config core.sparsecheckout true
$ hide .git\info\sparse-checkout
knowledge
$ git read-tree -m -u HEAD

ここまで実行すると、text 配下のフォルダが knowledge のみになる。

どういう仕組みなん?

git-read-tree やら git merge やら git checkout やらは Sparse checkout という仕組みを持っていて、指定したディレクトリを管理対象から除外できる。やり方は $GIT_DIR/info/sparse-checkout に除外したいディレクトリを書いておくだけ。ちなみに .gitignore と同じ文法。

参考: Sparse checkout