262
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

リポジトリのここのフォルダだけ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/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
262
Help us understand the problem. What are the problem?