Git

Gitコマンドでサブモジュールを含むモジュールを取得してみた

サブモジュールを含むモジュールをgit cloneコマンドで単純に取得すると、サブモジュール内のファイルやフォルダが取得できないため、「git submodule update –init」コマンドを実行する必要がある。

また、サブモジュールを含むモジュールをgit cloneコマンドで取得した後で、更新されたサブモジュール内のファイルやフォルダを取得するには、「git submodule update –remote」コマンドを実行する必要がある。

今回は、これらのコマンドを利用してサブモジュールを含むモジュールを取得してみたので、その手順を共有する。

前提条件

下記記事の内容を実施済であること。

Gitコマンドでサブモジュールを相対パス指定で追加してみたGitでは、あるリポジトリに他のリポジトリ(=サブモジュール)を追加することができるが、その際のパス指定に相対パスを指定したり、サブモジ...

Gitコマンドによるサブモジュールの取得

Gitコマンドによって、git cloneコマンドで取得した直後や、その後に更新されたサブモジュールをローカルに取得する。その手順は、以下の通り。

1) 親モジュールを取得する予定のディレクトリ上で右クリックし、「Git Bash Here」メニューを選択する。
サブモジュールの更新_1

2) 以下のように、Git Bash(gitを操作する際に使うターミナル)が起動することが確認できる。
サブモジュールの更新_2

3) GitHub上で親モジュールを開き、「Code」ボタンを押下すると、親モジュールのURLが確認できる。ここで確認したURLは「https://github.com/purin-it/subModuleMain.git」となる。
サブモジュールの更新_3

4) 「git clone (親モジュールのURL)」 を実行し、GitHubからリポジトリ「subModuleMain」の内容をローカルに取得する。
サブモジュールの更新_4

5) 親モジュールの「subModuleMain」フォルダに移動後に、「.gitmodules」ファイルを確認すると、以下のように、サブモジュールへの参照パスが設定されていることが確認できる。
サブモジュールの更新_5

6) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、「subModuleMain」ディレクトリ下にGitHub上にあった「main.txt」が取得でき、「subModuleMain」ディレクトリ下の「sub/dir/sub.txt」が取得できないことが確認できる。
サブモジュールの更新_6

7) 「git submodule update –init」コマンドを実行すると、サブモジュールの内容である「subModuleMain」ディレクトリ下の「sub/dir/sub.txt」が取得できることが確認できる。
サブモジュールの更新_7

なお、「git submodule update –init」コマンドの意味については、以下のサイトの「登録されているサブモジュールを更新する」を参照のこと。
http://transitive.info/article/git/command/submodule/

8) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、「subModuleMain」ディレクトリ下の「sub/dir/sub.txt」が取得できていることが確認できる。
サブモジュールの更新_8

9) 「git submodule update –init」コマンドを再度実行しても、何も起こらないことが確認できる。
サブモジュールの更新_9



10) サブモジュールにファイルを追加するため、GitHub上でサブモジュールを開き、「Add file」メニューから「Create new file」を選択する。
サブモジュールの更新_10

11) ファイル名、ファイル内容、コミットメッセージを指定し、「Commit new file」ボタンを押下する。
サブモジュールの更新_11

12) 以下のように、ファイルが追加されたことが確認できる。
サブモジュールの更新_12

13) サブモジュールを更新(ファイルを追加)した状態で「git submodule update –init」コマンドを再度実行しても、以下のように、何も起こらずサブモジュールの更新がされないことが確認できる。
サブモジュールの更新_13

14) サブモジュールの更新を反映するには、「git submodule update –remote」コマンドを実行する。ただし、このコマンドのデフォルトのブランチがmasterとなっているため、あらかじめ「git config -f .gitmodules submodule.(サブモジュールのパス).branch (変更後のブランチ名)」を実行しておく。
サブモジュールの更新_14

15) この時点で「.gitmodules」ファイルを確認すると、以下のように、ブランチ名が追加されていることが確認できる。
サブモジュールの更新_15

16) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、サブモジュールが更新され追加したファイル(sub2.txt)が取得できていることが確認できる。
サブモジュールの更新_16

「AOMEI Partition Assistant Standard(無料)版」は便利なパーティション管理ツールだったハードディスクの記憶領域を論理的に分割し、分割された個々の領域のことを、パーティションといいます。 例えば、以下の図の場合、C/D...

17) git addコマンド、git commitコマンド、git pushコマンドを利用して、追加したサブモジュールの内容を、GitHubに反映する。
サブモジュールの更新_17

18) 反映後のGitHubの内容は以下の通りで、「sub」ディレクトリ下に遷移すると、サブモジュール内に追加したファイルも表示されていることが確認できる。
サブモジュールの更新_18_1

サブモジュールの更新_18_2 サブモジュールの更新_18_3

要点まとめ

  • Gitコマンドでサブモジュールを含むモジュールを取得するには、「git submodule update –init」コマンドや「git submodule update –remote」コマンドを利用する。