サブモジュールは、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ファイルから更新
注意: サブモジュールのブランチを変更した後は、親リポジトリでその変更をコミットする必要があります。そうしないと、他の開発者がプロジェクトをクローンまたは更新した際に、サブモジュールが元のブランチに戻ってしまいます。