サブモジュールを追加する
「サブモジュール」を追加します。1.ワーキングディレクトリー内のファイル
現状「ワーキングディレクトリー」内のファイル構成は、以下のようになっています。2.コマンドの実行
「端末」から、以下のコマンドを実行します。コマンドの詳細は、「サブモジュールを追加するコマンドの説明」を参考にしてください。
git submodule add git://192.168.56.1/mySubProject
3.コマンドの実行結果
以下のように「サブモジュール」が追加され、「サブモジュール」のクローン及びチェックアウトが実行されます。スーパープロジェクトの確認
「サブモジュール」の追加後の「スーパープロジェクト」の変化を見てみます。1.サブモジュールのワーキングディレクトリー
「スーパープロジェクト」の「ワーキングディレクトリー」内に、「サブモジュール」の「ワーキングディレクトリー」が配置されています。「mySubProject」フォルダーが、追加した「サブモジュール」の「ワーキングディレクトリー」です。
2.gitmodulesファイル
「スーパープロジェクト」の「ワーキングディレクトリー」内に、「.gitmodules」ファイルが追加されています。「.gitmodules」ファイルの中身を見ると、以下のように追加した「サブモジュール」の情報が記述されています。
3.リポジトリーの設定ファイル
「スーパープロジェクト」のリポジトリーの設定ファイルにも、「サブモジュール」の情報が記述されています。リポジトリーの設定ファイルである「.git/config」ファイルを開くと、以下のように「サブモジュール」の情報が記述されています。
ここに記述される内容は、上記「2.」で紹介した「.gitmodules」ファイルに記述されている情報が元になります。
「.gitmodules」ファイルの内容が「.git/config」ファイルに反映され、「Git」は「.git/config」ファイルの記述を元に、「サブモジュール」の管理を行います。
4.サブモジュールのGitディレクトリー
「サブモジュール」の「Gitディレクトリー」は、「スーパープロジェクト」の「Gitディレクトリー」に配置されます。「スーパープロジェクト」の「.git/modules」フォルダーに、「サブモジュール」の「Gitディレクトリー」が配置されます。
「mySubProject」フォルダーの中身を見てみると、以下のように「サブモジュール」のリポジトリーが配置されています。
5.サブモジュールの状態
「スーパープロジェクト」から「サブモジュール」の状態を確認すると、以下のようになります。「サブモジュール」の「HEAD」が指す「コミットオブジェクト」と、現在のブランチが表示されます。
6.ワーキングディレクトリーの状態
最後に、「スーパープロジェクト」の「ワーキングディレクトリー」の状態を見てみます。「.gitmodules」ファイルが新規に追加されたファイルとして認識されています。
また「mySubProject」フォルダーも新規に追加されたファイルとして認識されています。
ただし「mySubProject」フォルダーは、「Git」から「サブモジュール」であると認識されます。
この後「スーパープロジェクト」でコミットを行い、「スーパープロジェクト」の「リモートリポジトリー」にプッシュすれば、他のユーザーも「サブモジュール」を利用できるようになります。
サブモジュールの確認
追加された「サブモジュール」を見てみます。1.サブモジュールのワーキングディレクトリー
上記でも記述した通り、「スーパープロジェクト」の「ワーキングディレクトリー」内に、「サブモジュール」の「ワーキングディレクトリー」が配置されています。「mySubProject」フォルダーが、追加した「サブモジュール」の「ワーキングディレクトリー」です。
2.ワーキングディレクトリーの中身
「サブモジュール」の「ワーキングディレクトリー」の中身を見てみると、チェックアウトされたプロジェクトのファイル群と、「.git」ファイルが配置されています。3.gitファイル
「.git」ファイルの中身を見てみると、以下のように「サブモジュール」の「Gitディレクトリー」の配置場所が記述されています。これは、上記の「4.サブモジュールのGitディレクトリー」のフォルダーのパスを指しています。
4.ブランチの状態
「サブモジュール」追加時に、「サブモジュール」のチェックアウトが行われます。「サブモジュール」のブランチの状態を見てみると、以下のようになっています。
「HEAD」は「master」ブランチを指しており、「master」ブランチが現在のブランチであることが分かります。
またチェックアウトは、「master」ブランチの「ブランチヘッド」が指す「コミットオブジェクト」から、チェックアウトされたことが分かります。