#git submoduleとは
git submoduleとは、一言で言うとネストされたgitレポジトリです。たとえばあるレポジトリで使用しているライブラリについて、常に最新のライブラリを使用したいという場合、そのライブラリを自分のgitリポジトリに入れてしまって更新されるたびにpullするという使い方が考えられますね。
#使い方(うわべ)
既存のレポジトリの中で、
git submodule add <repository's URL>
のコマンドを叩きます。イメージはcloneと一緒ですね。
該当ライブラリのver,branchを切り替えたいときは、そのディレクトリの中に入って、
git pull
とかgit checkout
すればよいです。
そのあと、そこから出て、該当ディレクトリをadd,commitすればよい。
これが基本の使い方になります。かんたん!
#ややこしいことがおこるとすれば
##submoduleはついてこない
タイトルの通りです。たとえばsubmoduleが含まれているリポジトリをcloneしてきたとして、submoduleのディレクトリ内はからっぽになっています。おいおい、なんでやねんとなるポイントですね。
外側(大本のリポジトリ)とsubmoduleは厳密に連動しているわけではないので、このようなことが起こります。解決法としては、該当ディレクトリの中で、
git submodule init
、git submodule update
とすれば、そのclone元で使ってたsubmoduleの参照先から引っ張ってきてくれます。
本家リポジトリのbranchを切り替えたりしたときもそうです。基本的にsubmoduleはついてきてくれないのでgit submmodule update
する必要があります。
#要するに
- 追加は
git submodule add <URL>
- 困ったら中に入って
git submodule update
うん、うわべっぽい。間違いありましたら指摘お願いいたします。
#ちなみに
submodule内をいじくりまわすのはやめましょう。本家リポジトリをいじってそれをsubmodule内でpullするのが賢いっぽいです。
#追記
ローカルのsubmoduleに変更加えてしまった場合。それが必要のない変更なら、submoduleディレクトリに入って、git resert --hard
でどうにかなる。要するにそのcommitを無かったことにしてるだけだけど。危ないコマンドなので多用しない方がいいっぽい。