はじめに
私の所属するチームではGit submoduleで管理されたプロジェクトがあります。
前職でもSubmoduleを用いていたのですが苦手意識があったのでここに備忘録を残しておきたいと思います。
サブモジュールのプロジェクト
Github上でのサブモジュール
下記のようにリポジトリのコミット値が指定されています。
例えば、submoduleAのコミットハッシュc8d94f3
時点を認識しています。
CLI上でSubmodule使われているか確認
$ git submodule status
で、サブモジュールが利用されているか確認することができます。
hogemaru ~/Code/my_actions (main)
$ git submodule status
f0e5d588c01bbc1acc4b366c02ffac9dcb3da4fb submoduleA (heads/main)
ccda52d8801d2d15d2d1c0cf4ee0294e2d396365 submoduleB (heads/main)
親プロジェクトと子プロジェクトの最新コミットを確認する
実はsubmoduleAの最新の状態を持ってきたい場合に$ git submodule update
をしても最新のsubmoduleAは取得できません。
リモートリポジトリの main 追従
--remote を付けると、子の最新のコミットを取ってくることができます
$ git submodule update --remote
親が認識している submoduleA f0e5d
から c8d94f3
へ更新されているのが確認できます。
hogemaru ~/Code/my_actions (main)
$ git submodule update --remote
Submodule path 'submoduleA': checked out 'c8d94f3b56fbc6b7c15b8aa93b831e753725fc0e'
ここで注意しておきたいのは、親では子のコミットをc8d94f3
を認識させるには親側できちんと変更をコミットすることです。
コミットして反映させましょう! 下記の画像から親が子の最新のコミットを認識している状態にできました!
まとめ
Submoduleが使われている時は下記のことを意識する💡
- 親(ルートリポジトリ)が認識している子(Submodule)のコミットを確認する
- 子の最新のコミットは親が認識している子のコミットとズレているのか確認する
-
$ git submodule update
は、親側が認識している時点の子コミットに更新することを意識する
それでは、よいサブモジュールライフを!