何かとややこしいgit submodule
重要なのはコミットで管理していることで、ここに慣れるとsubmoduleもバージョン管理しながら、その変更を反映出来るようになります
今回はsubmoduleのリポジトリに変更を加えたい場合、通常の開発と同様にブランチを切って、変更を施し、メインリポジトリのsubmoduleのコミットを変更したものにあわせる方法を紹介します。
git submodule add 等は終わっていて、持ってきたsubmoduleを用いてそこからソースを変更したい!という状況です。
submodule内の変更
submoduleリポジトリ独自の.gitファイルを持っているので、いつものように更新します
cd submoduleDir git checkout <branch> #ソース変更 git add . git commit -m "change" git push
メインリポジトリの変更
git commitをすることでHEADのコミットが変わるので、メインのリポジトリsubmoduleDirの部分に差分が出ます。以下の作業で変更されている様子が分かります。
cd ../ #メインリポジトリへ git diff
なので、変更の反映を行います
git add submoduleDir git commit -m "update submodule" git push
submodule側でpushなどをしないと、リモートではコミット番号を持たなくなり、ソースが見つからない等のことがあります。 またsubmoduleでブランチにチェックアウトしていないことなどによってリモートのプッシュが上手く言っていない等のことも起こりうるので注意が必要です。