LoginSignup
106
96

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-05-01

前回Gitで特定フォルダのみクローンする方法を書いたが、これはsubmoduleの場合も使用可能。というか、submoduleの時にこそ使用する機会が多いだろう(dllだけ取るなど)。

ただ、ファイルを置く場所がちょっと異なる。submodule関連の設定は.git/modules配下にあるため、sparse-checkoutもこちらに置く必要があるのだ。

1.git submodule add https://some/module.git somemodule
2.git commit -m "add module"
3.cd somemodule
4.git config core.sparsecheckout true
5.echo I_want/this_folder/ > ../.git/modules/somemodule/info/sparse-checkout
6.echo need/this_folder_too/ >> ../.git/modules/somemodule/info/sparse-checkout
7.git read-tree -mu HEAD

2のcommitは、この段階でまだコミットが一回もないなら必要。最後のread-treeでHEADを読むため、一回はcommitしておかないとうまく動かない。

3以降の設定は、サブモジュールのフォルダ内で行う。sparse-checkoutで指定するのも、ルートからではなくサブモジュール内でのパスになる(上記でも、somemodule/I_want/this_folder/とはしていない)。

ポイントは5番で、modules配下にある各モジュールの設定に対しsparse-checkoutを書き込んでいる。追加するパスがさらにある場合は、6番(ファイルへの追記)を繰り返す。

これで、必要な部分だけ使いリポジトリを構成できて一安心。。。と思いきや、この設定(.git内の設定)はcommitして記録することができないので、チームで共有するということができない。つまり各人が上記のコマンドを打っていく必要があり、サブモジュールが多い場合めげるだろう。

この点についてはうまい方法がないか調査中。

<参考>
How to use Git Submodules

106
96
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
106
96