git submoduleについて

他のリポジトリを埋め込むgit submoduleですが、癖が強くて使いづらいと評判です。

この機能、メインのプロジェクト→あるリポジトリの特定のコミットを参照という構造をしているようです。また、その性質上、メインのプロジェクトは参照しているコミットを記録しているだけで、submoduleに相当するリポジトリのデータそのものは持っていません。

しかし、submoduleはリポジトリなので本来はその下にデータを持っており、かつそのデータを利用することが目的となるわけです。

そこで、単なる参照からデータを引っ張り出してくるという仕組みが必要で、それがgit submodule XXXという形式の操作に含まれるわけです。

例えば、

  • git submodule init: 単なる参照にすぎないsubmoduleにファイルの実体をクローンしてくる
  • git submodule update: submoduleを配置したディレクトリ内にあるファイル実体を参照にあわせる

ということになります。

参考