Git submoduleで外部リポジトリを参照する
submodule
は現在のリポジトリに外部のリポジトリをサブディレクトリとして取り込み、参照する仕組みです。
TortoiseGit でのサブモジュール追加方法
- メインモジュールのフォルダ内で右クリック
- TortoiseGit>サブモジュールの追加
- リポジトリに参照したいリポジトリを設定
- パスにサブモジュールを取得するフォルダを指定
- OKボタン
- メインモジュール側でコミット、プッシュします
Git コマンド
同様のことをGitコマンドで行う場合は以下のようになります。
$ git submodule add /{パス}/mySubmodule.git mySubmodule
$ git commit -m "add submodule"
$ git push origin master
メインモジュールからサブモジュールをコミットする
メインモジュール内で参照しているサブモジュールを更新し、リモートのサブモジュールも更新したい場合の操作です。
- サブモジュールのフォルダを右クリック
- Git サブモジュールをコミット
- プッシュ
サブモジュール登録後のメインモジュールをクローンする際の作業
別の作業者がメインモジュールをクローンした場合、mySubmoduleフォルダの中が空になっています。クローンした環境ごとにサブモジュールの取得が必要です。
- クローンしたメインモジュールのフォルダを右クリック
- Git 同期
- サブモジュールを更新ボタン
成功するとサブモジュールにファイルが格納されます。しかし、この段階では、サブモジュールのバージョンはメインモジュールに追加した時点のバージョンになっています。サブモジュール側を最新にしたい場合はサブモジュールのフォルダでプルしてください。
上記手順でサブモジュール側を最新にしても、再度メインモジュール側で「Git 同期 > サブモジュールを更新ボタン」すると登録時のサブモジュールに戻るので注意してください。
メインモジュールが参照するサブモジュールのバージョンを更新する
サブモジュールを更新したときに、メインモジュール側の参照バージョンも更新する方法です。
- メインモジュールのフォルダを右クリック
- Git コミット
- コミットボタン
- プッシュ
これでリポジトリの情報は更新されますが、そのままプルをしてもサブモジュールは更新されません。そのため、以下の手順が必要です。もしくは前述のようにサブモジュール側でプルします。
- クローンしたフォルダを右クリック
- Git 同期
- サブモジュールを更新ボタン
これでサブモジュールが更新されます。