サブモジュールは、Gitリポジトリ内に別のGitリポジトリを含める機能です。 大規模なプロジェクトや複数のプロジェクトで共通のコードを使用する場合に便利です。 この節では、サブモジュールの基本的な使い方と、特にブランチの変更方法について解説します。
既存のリポジトリをサブモジュールとして追加します。
| オプション | 説明 |
|---|---|
| -b, --branch <ブランチ名> | 追跡するブランチを指定 |
| --name <名前> | サブモジュールの名前を指定 |
| -f, --force | 既存のパスを上書き |
例:
git submodule add https://github.com/username/library.git lib - リポジトリをlibディレクトリにサブモジュールとして追加git submodule add -b develop https://github.com/username/library.git lib - developブランチを追跡するサブモジュールを追加
サブモジュールを初期化し、リモートリポジトリからデータを取得します。
| コマンド/オプション | 説明 |
|---|---|
| git submodule init | サブモジュールを初期化(.gitmodulesの情報を.git/configにコピー) |
| git submodule update | サブモジュールのコンテンツを更新 |
| --init | 未初期化のサブモジュールを初期化してから更新 |
| --recursive | ネストされたサブモジュールも含めて再帰的に処理 |
| --remote | リモートの最新コミットに更新(デフォルトではスーパープロジェクトに記録されたコミットに更新) |
例:
git submodule init - すべてのサブモジュールを初期化git submodule update - すべてのサブモジュールを更新git submodule update --init - 初期化と更新を一度に実行git submodule update --init --recursive - ネストされたサブモジュールも含めて初期化と更新を実行git clone --recurse-submodules https://github.com/username/project.git - クローン時にサブモジュールも一緒に取得
サブモジュールが追跡するブランチを変更します。
| オプション | 説明 |
|---|---|
| --branch <ブランチ名> | 追跡するブランチを指定 |
| --default | デフォルトブランチ(通常はmain/master)に戻す |
例:
git submodule set-branch --branch develop lib - libサブモジュールの追跡ブランチをdevelopに変更git submodule set-branch --default lib - libサブモジュールの追跡ブランチをデフォルトに戻す
サブモジュールディレクトリ内で直接ブランチを変更する方法です。
例:
cd lib - サブモジュールディレクトリに移動git checkout develop - developブランチにチェックアウトcd .. - 親ディレクトリに戻るgit add lib - サブモジュールの変更をステージングgit commit -m "Switch lib submodule to develop branch" - 変更をコミット
複数のサブモジュールを効率的に管理するためのコマンドです。
| コマンド | 説明 |
|---|---|
| git submodule foreach <コマンド> | 各サブモジュールで指定したコマンドを実行 |
| git submodule status | すべてのサブモジュールの状態を表示 |
| git submodule sync | サブモジュールのリモートURLを同期 |
例:
git submodule foreach git pull origin master - すべてのサブモジュールでmasterブランチを更新git submodule foreach git checkout develop - すべてのサブモジュールでdevelopブランチにチェックアウトgit submodule foreach 'git checkout -b feature/new-feature || true' - すべてのサブモジュールで新しいブランチを作成(既に存在する場合はエラーを無視)git submodule status - すべてのサブモジュールの状態を確認git submodule sync - サブモジュールのリモートURLを.gitmodulesファイルから更新
注意: サブモジュールのブランチを変更した後は、親リポジトリでその変更をコミットする必要があります。そうしないと、他の開発者がプロジェクトをクローンまたは更新した際に、サブモジュールが元のブランチに戻ってしまいます。