Gitサブモジュール管理コマンド解説

サブモジュール管理

サブモジュールは、Gitリポジトリ内に別のGitリポジトリを含める機能です。 大規模なプロジェクトや複数のプロジェクトで共通のコードを使用する場合に便利です。 この節では、サブモジュールの基本的な使い方と、特にブランチの変更方法について解説します。

git submodule add - サブモジュールの追加

既存のリポジトリをサブモジュールとして追加します。

オプション 説明
-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/update - サブモジュールの初期化と更新

サブモジュールを初期化し、リモートリポジトリからデータを取得します。

コマンド/オプション 説明
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 - クローン時にサブモジュールも一緒に取得

git submodule set-branch - サブモジュールのブランチ変更

サブモジュールが追跡するブランチを変更します。

オプション 説明
--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ファイルから更新

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