kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。 Ubuntuの最新情報も紹介しています。

サブモジュール(Submodule)

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


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

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

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

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

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

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

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

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

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


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

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

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

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


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

  入れ子構造の親子関係

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


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

サブモジュールの特徴

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

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

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

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


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

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


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

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

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

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

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

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

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


関連コンテンツ
同一カテゴリーの記事
コメント
オプション