他のリポジトリを埋め込むgit submoduleですが、癖が強くて使いづらいと評判です。
この機能、メインのプロジェクト→あるリポジトリの特定のコミットを参照
という構造をしているようです。また、その性質上、メインのプロジェクトは参照しているコミットを記録しているだけで、submoduleに相当するリポジトリのデータそのものは持っていません。
しかし、submoduleはリポジトリなので本来はその下にデータを持っており、かつそのデータを利用することが目的となるわけです。
そこで、単なる参照からデータを引っ張り出してくるという仕組みが必要で、それがgit submodule XXX
という形式の操作に含まれるわけです。
例えば、
git submodule init
: 単なる参照にすぎないsubmoduleにファイルの実体をクローンしてくるgit submodule update
: submoduleを配置したディレクトリ内にあるファイル実体を参照にあわせる
ということになります。