LoginSignup
36
34

More than 5 years have passed since last update.

git submoduleに対してのうわべっぽい理解

Last updated at Posted at 2014-09-20

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 initgit submodule updateとすれば、そのclone元で使ってたsubmoduleの参照先から引っ張ってきてくれます。
本家リポジトリのbranchを切り替えたりしたときもそうです。基本的にsubmoduleはついてきてくれないのでgit submmodule updateする必要があります。

要するに

  1. 追加はgit submodule add <URL>
  2. 困ったら中に入ってgit submodule update

うん、うわべっぽい。間違いありましたら指摘お願いいたします。

ちなみに

submodule内をいじくりまわすのはやめましょう。本家リポジトリをいじってそれをsubmodule内でpullするのが賢いっぽいです。

追記

ローカルのsubmoduleに変更加えてしまった場合。それが必要のない変更なら、submoduleディレクトリに入って、git resert --hardでどうにかなる。要するにそのcommitを無かったことにしてるだけだけど。危ないコマンドなので多用しない方がいいっぽい。

36
34
1

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
36
34