gitのサブモジュールにて特定のブランチやコミットを使用する

何かとややこしい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でブランチにチェックアウトしていないことなどによってリモートのプッシュが上手く言っていない等のことも起こりうるので注意が必要です。