2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

git submodule絡みのメモ

Last updated at Posted at 2021-10-20

あちこち情報があるけど、たまに使うコマンドのメモ
git clone --recursive 親プロジェクト.git
git submodule update --init --recursive
git submodule foreach --recursive "git pull origin main"
あたりを覚えておけば良さそう。
submoduleはブランチでなくコミット単位で保存され、git pullでは更新されないので扱いに注意が必要。

最初にやること

すでにsubmoduleで管理されているプロジェクトをcloneしたものとする。

git clone --recursive 親プロジェクト.git
  • git clone 親プロジェクト.gitと普通に持ってきても以下のコマンドでsubmoduleを更新できる。
  • git cloneで--recursiveを忘れた時は以下と同じくgit submodule update --init --recursiveで取得できる。

親プロジェクトのsubmoduleを取得、更新

  • 管理しているsubmoduleを取得(決まったcommit idのものが取得される)
  • git pullするときに合わせて行うとよい。
cd 親プロジェクトのパス
git pull
git submodule update --init --recursive

Git LFSを使っていたら

cd 親プロジェクトのパス
git lfs pull
git submodule foreach --recursive "git lfs pull"

修正したらやること

基本的にはsubmoduleでcommit,pushしたあと、親プロジェクトでcommit,pushすれば良い。

submoduleの修正(local -> remote)

  • 普通にsubmoduleのフォルダで編集、git操作(commitしてpush、ここでは"main"ブランチを更新したとする)
cd submoduleのパス
git commit -a -m"update submodule contents"

親プロジェクトのsubmoduleを更新(local -> remote)

  • 普通にcommit、pushすると、他の人も同じ環境を使えるようになる
cd 親プロジェクトのパス
git commit -a -m"update commit id of submodule"

親プロジェクトのsubmoduleを一括更新(local)

  • submoduleで管理しているgitリポジトリの特定ブランチ("main")の最新版に一括取得
  • ブランチ名が違うと一括更新できないので一つづつ行う必要がある。
  • 利用するsubmoduleのブランチ名を合わせておいた方が便利。
  • 親プロジェクトで管理しているsubmoduleを一括で変更するときなどに使う。
  • --recursiveしているので、全部のsubmoduleを把握していないと意図せずupdateされてしまう。
cd 親プロジェクトのパス
git submodule foreach --recursive "git pull origin main"
2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?