Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

git submodule の使い方

こんにちは。

今回は個人的に最初ちょっと扱いづらかった git submodule について基本的な使い方をメモしておきたいと思います。

git submoduleは外部のgitリポジトリを自分のリポジトリのサブディレクトリとして扱うことができるようになるものです。
cloneせずにsubmoduleとすることで、対象のリポジトリが更新されたときも追従することが可能となります。

最初は使いづらいしよく分からなかったのでcloneしてましたが、慣れると便利です。

それでは使い方を見てみましょう。

サブモジュールの追加

サブモジュールは git submodule add コマンドで追加出来ます。

$ git submodule add <gitリンク>

追加すると、Gitリポジトリのルートに .gitmodules が作成されます。
中身を見てみると、追加したリポジトリの名前やパスが記述されていると思います。
このファイルでサブモジュールを管理するんですね。
なお、.git/config にも記載されています。

サブモジュールの更新

サブモジュールの更新は git submodule update で行います。
サブモジュールに更新があった場合は随時これを実行します。

$ git submodule update

なお、 --recursive をつけることでサブモジュール内のサブモジュールも再帰的に更新するようです。

サブモジュールの削除

サブモジュールの削除は git submodule deinit で行います。

$ git submodule deinit リポジトリ名
$ git rm -rf 対象のファイル

サブモジュールを削除したら、 git rm コマンドでgitからもファイルを削除します。
削除後に .gitmodules などを見てみると、該当の記述が消えています。

サブモジュールを含んだリポジトリを clone したとき

サブモジュールを含んたプロジェクトをgithubからcloneすると、サブモジュールとして取り込んだディレクトリには何も含まれていません。
その際にサブモジュールを再度取り込むには、以下の流れで行います。

$ git clone <gitリポジトリURL>
$ git submodule init
$ git submodule update

init してから update することで、取り込むことができます。

なお、cloneする際に一緒に submodule init と git submodule update を一度に済ませる場合は、clone に --recursive オプションを使います。

$ git clone --recursive <gitリポジトリURL>

以上です。
これからは積極的に使っていきたいと思います。

それでは。

参考にさせていただいたサイト

git submodule は癖がすごいとの噂だったが素直につきあっていけそうという話 | deadwood