🦔
git submoduleってなんぞ???
ざっくり解説
-
リポジトリ内に別のリポジトリ『コミット』を参照したものを追加できる機能
git clone時に同時にcheckout出来たりする。 -
別のプロジェクトの内容を丸々参照できるので楽ちんだけどちょっと複雑
submodule設定ファイル
導入すると
.gitmodules
というファイルができるのでそこで状態を管理している
サンプルコード
// .gitmodulesの中身サンプル
[submodule "extension/hogehoge"]
path = extension/hogehoge
url = git@github.com:hogehoge.git
branch = master
解説
- pathは生成したい場所指定
- urlはcloneするときのやつ、httpでもsshでもok
- branchは参照ブランチが指定できる(でもあんまり意味があるのかよくわからない)
主に使いそうなやつ
submoduleをまとめて最新に更新
git submodule foreach 'git pull origin master' && git submodule update --remote
submodule付きのリポジトリをcloneする時
git clone git@github.com:hogehoge.git --recursive
という様な感じで--recursiveオプションを付ける。
submoduleにupdateがあってそれを適用したい。
git submodule update --init
これで適用できる。
- 上記でダメな場合があるらしい
git submodule update --recursive
これならいけるらしい(よくわからん)
submoduleを間違って変更してしまった場合の対処
エディタのオート補完機能などで間違ってsubmoduleに
影響が及んでしまうことが結構あると思います。
その時どうやって戻せばいいんだーーーーーーというと、
git reset --hard
間違えて変更を加えてしまったsubmoduleに移動して
上記を叩くことで戻ります(そらそうなんだけど咄嗟に慌てるやつ)
submodule導入済みなんだけどgitでuntracked fileにならずupdateしても更新できない場合
反映させたいsubmoduleのディレクトリで下記のコマンドを叩く
git fetch && git reset --hard origin/master
// ブランチは追いたい所を適切に指定してください
これで再度追うことができるようになる
submoduleの参照URLを変更したがプロジェクトに反映されない
git submodule sync
syncしないとプロジェクトに反映されないみたいです。
詳しく解説している記事
Discussion