6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git submoduleと仲良くなれる記事。

Last updated at Posted at 2023-12-08

はじめに

私の所属するチームではGit submoduleで管理されたプロジェクトがあります。
前職でもSubmoduleを用いていたのですが苦手意識があったのでここに備忘録を残しておきたいと思います。

サブモジュールのプロジェクト

Github上でのサブモジュール

下記のようにリポジトリのコミット値が指定されています。
例えば、submoduleAのコミットハッシュc8d94f3時点を認識しています。

Submodule1.png

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を認識させるには親側できちんと変更をコミットすることです。

コミットして反映させましょう! 下記の画像から親が子の最新のコミットを認識している状態にできました!

image.png

まとめ

Submoduleが使われている時は下記のことを意識する💡

  • 親(ルートリポジトリ)が認識している子(Submodule)のコミットを確認する
  • 子の最新のコミットは親が認識している子のコミットとズレているのか確認する
  • $ git submodule update は、親側が認識している時点の子コミットに更新することを意識する

それでは、よいサブモジュールライフを!

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?