git_submodule
似たようなのに git subtree merge もあるがこっちは二重管理的な感じなので使うことはなさそう(子側のを親側でも管理する感じ、ごちゃごちゃになると思う)
add
git submodule add https://github.com/hoge/piyo
init/update
git submodule init
でローカルの設定ファイルを初期化し、次に
git submodule update
でプロジェクトからのデータを取得し、親プロジェクトで指定されている適切なコミットをチェックアウトします。
上流の変更の取り込み
まずはサブモジュールの使用例で一番シンプルなモデルを見ていきます。それは、サブプロジェクトをただ単に使うだけ、というモデルです。上流の更新はときどき取り込みたいけれど、チェックアウトした内容を変更したりはしない、という使い方になります。
サブモジュールが更新されているかどうかを調べるには、サブモジュールのディレクトリで git fetch
を実行します。併せて git merge
で上流のブランチをマージすれば、チェックアウトしてあるコードを更新できます。
$ git fetch
From https://github.com/chaconinc/DbConnector
c3f01dc..d0354fc master -> origin/master
$ git merge origin/master
Updating c3f01dc..d0354fc
Fast-forward
scripts/connect.sh | 1 +
src/db.c | 1 +
2 files changed, 2 insertions(+)
ここでメインプロジェクトのディレクトリに戻って git diff --submodule
を実行してみてください。サブモジュールが更新されたこと、どのコミットがサブモジュールに追加されたかがわかるでしょう。なお、git diff
の --submodule
オプションを省略したい場合は、設定項目 diff.submodule
の値に “log” を指定してください。
$ git config --global diff.submodule log
$ git diff
Submodule DbConnector c3f01dc..d0354fc:
> more efficient db routine
> better connection routine
この状態でコミットしておけば、他の人がサブモジュールを更新したときに新しい内容が取り込まれるようになります。