kledgeb UbuntuやLinuxの最新情報を紹介

Ubuntu Git その263 - 複数のリポジトリーを1つのリポジトリーで管理するサブモジュールとは・スーパープロジェクトとサブモジュール

サブモジュール(Submodule)

  「サブモジュール」とは、複数の「リポジトリー」を1つの「リポジトリー」で管理する仕組みです。


  「リポジトリー」の中に、別の「リポジトリー」を配置することができます。
  「リポジトリー」は入れ子構造になります。

  サブモジュールをどういう時に利用するか

    関連性が強いプロジェクトが複数の「リポジトリー」で管理されている場合、「サブモジュール」を利用して「リポジトリー」を一括管理することができます。

    複数の「リポジトリー」を1つの「リポジトリー」として管理できるため、「リモートリポジトリー」をクローンする側も、個別に「リモートリポジトリー」をクローンする必要がありません。

    複数のプロジェクトを1つのリポジトリーで管理している場合も、複数のリポジトリーに分割し、それらのリポジトリーを1つのリポジトリーとして管理できます。

    またユーザーは、クローンする「リモートリポジトリー」を選択することもできるため、必要な「リモートリポジトリー」のみクローンすることで、クローン及びチェックアウトにかかる時間を節約できます。

   もちろん、すべての「リモートリポジトリー」を一括してクローン及びチェックアウトすることも可能です。

スーパープロジェクトとサブモジュール

  「リポジトリー」を入れ子にするということは、「リポジトリー」には親子関係が成立します。


  この時、別の「リポジトリー」を配置する「リポジトリー」のことを、「スーパープロジェクト(Super Project)」といいます。

  一方、「リポジトリー」内に配置された「リポジトリー」のことを、「サブモジュール(Sub Module)」といいます。

リポジトリーの入れ子の入れ子

  「サブモジュール」内にさらに別の「リポジトリー」を配置できます。


  上記のように、何重にも「リポジトリー」を入れ子にして配置することができます。
  ただ、あまりやり過ぎると、管理が煩雑になり混乱の元になるため、注意してください。

  入れ子構造の親子関係

    上記のような「リポジトリー」の入れ子構造では、親子関係が以下のようになります。


    中央のリポジトリーは、一番上のリポジトリーから見ると「サブモジュール」になります。
    一方、一番下のリポジトリーから見ると、中央のリポジトリーは「スーパープロジェクト」になります。

サブモジュールの特徴

  「サブモジュール」の特徴です。

  リモートリポジトリー自身は入れ子にならない

    「サブモジュール」を利用することで、複数の「リポジトリー」を1つのリポジトリーとして扱えますが、「リポジトリー」自身は入れ子になりません。

    あくまで「リモートリポジトリー」への参照が入れ子構造になるだけであって、「サブモジュール」として追加した「リポジトリー」の「リモートリポジトリー」の構造は変化しません。


    別々に存在する「リモートリポジトリー」の関係を、「ローカルリポジトリー」内で入れ子構造で表現します。

    ですので、あるリポジトリーで「サブモジュール」として追加された「リモートリポジトリー」を、ユーザーは気にすることなく従来通りクローンし、「ローカルリポジトリー」で作業することができます。


  サブモジュールで行う作業は、サブモジュールのワーキングディレクトリーで行う

    ファイルの編集やコミットなど「ワーキングディレクトリー」で行う作業は、それぞれの「ワーキングディレクトリー」で行います。

    「スーパープロジェクト」で行う作業は「スーパープロジェクト」の「ワーキングディレクトリー」で作業を行い、「サブモジュール」で行う作業は「サブモジュール」の「ワーキングディレクトリー」で作業を行います。

  従ってコマンドを実行するカレントディレクトリーにある「ローカルリポジトリー」が現在の「ローカルリポジトリー」であり、操作対象の「ローカルリポジトリー」になります。

    また、pullやfetch、push等の作業も同様に、それぞれの「ワーキングディレクトリー」でコマンドを実行します。

  スーパープロジェクトからサブモジュールに対し、一括操作できる

    利便性のため、「スーパープロジェクト」からすべての「サブモジュール」に対し、同じ操作を行う機能が提供されています。


Git
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 26.04 その68 - Ubuntu 26.04.1 LTS がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.04.1 LTS リリース 2026年8月27日、Ubuntu 26.04.1 LTS がリリースされました。
  • Ubuntu 26.04 その42 - Ubuntu 26.04.1 LTS のリリーススケジュール
    Ubuntu 26.04.1 LTSのリリーススケジュール Ubuntu 26.04.1 LTS のリリーススケジュールを紹介します。
  • Linux その426 - GNOME 向けアプリとアップデートの紹介・AI アシスタントアプリやメールスイートなど
    GNOME 向けアプリとアップデートの紹介 GNOME 向けアプリとアップデートの紹介です。
  • Linux その429 - GNOME 向けアプリとアップデートの紹介・ RSS リーダーのインポート機能や映画マトリックスのデスクトップ効果など
    GNOME 向けアプリとアップデートの紹介 GNOME 向けアプリとアップデートの紹介です。
  • Ubuntu 18.04 その195 - PolicyKitにクラッシュや権限の昇格など複数の脆弱性・今すぐアップデートを
    PolicyKitの脆弱性 2018年7月16日、クラッシュや権限の昇格など複数の脆弱性に対応した「PolicyKit」がリリースされました。
  • Ubuntu 26.10 その24 - Ubuntu 26.10 の公式壁紙と壁紙コンペの結果発表
    Ubuntu 26.10 の公式壁紙と壁紙コンペの結果発表 Ubuntu 26.10 の公式壁紙と壁紙コンペの結果が発表されました。
  • Linux その428 - KDE Plasma で実装予定の新機能や改善・マウスの中央ボタンの機能改善やリモートデスクトップの改善など
    KDE Plasma で実装予定の新機能や改善 KDE Plasma で実装予定の新機能や改善を紹介します。
  • Linux その425 - KDE Plasma で実装予定の新機能や改善・Union テーマシステムの改良やクリップボードマネージャーの改善など
    KDE Plasma で実装予定の新機能や改善 KDE Plasma で実装予定の新機能や改善を紹介します。
  • Linux Mint その292 - Linux kernel 7.0 採用の Linux Mint 22.3 リリース・システム管理ツールにカーネル管理機能追加など
    Linux Mint 月刊ニュース Linux Mint 開発チームは Linux Mint 月刊ニュースにて、Linux Mint の開発状況や取り組みを紹介しています。
  • Ubuntu 26.10 その23 - x86-64-v3 に対応したデイリービルドのディスクイメージが利用可能に
    x86-64-v3 に対応したデイリービルドのディスクイメージが利用可能に x86-64-v3 に対応した Ubuntu Desktop 26.10 のデイリービルドのディスクイメージが利用可能になりました。
記事のピックアップ
オプション