Edited at

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

More than 5 years have passed since last update.

リポジトリのここのフォルダだけcloneしたいんだ、Subversionでいうところのcheckoutだ、という場合はsparsecheckoutの機能を使用する。

特定のフォルダだけclone、という以外に絶対にcommitしたくないファイルを外したりできるので、覚えておくと便利(設定ファイルを個人ごとに書き換えなければならない場合など)。


  1. git clone xxx

  2. git config core.sparsecheckout true

  3. echo I_want/this_folder/ > .git/info/sparse-checkout

  4. git read-tree -m -u HEAD


  5. echo I_forget/this_folder/ >> .git/info/sparse-checkout


まずは普通にcloneをしてきて、そのあとsparsecheckoutを有効にする。

次に、.git/info/sparse-checkoutというファイルに残しておきたいフォルダ(I_want/this_folder/)を書き込む。

そして、git read-tree -m -u HEADという呪文を唱えると先程記載しておいたフォルダ以外は姿を消すことになる。

上記5では、指定するのを忘れたフォルダを追記している。この場合、既存ファイルへの追記なので>>となる点に注意。もちろん普通にファイルを編集してもOK。

これで不要なファイルは除外できるが、フォルダ階層は調整できない(aaa/bbbをd/にcloneする、といったことができずd/aaa/bbbになる)。

ここはうまい方法はなさそうな気配。

<参考>

http://blog.quilitz.de/2010/03/checkout-sub-directories-in-git-sparse-checkouts/

http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/