サブモジュールを含むモジュールをgit cloneコマンドで単純に取得すると、サブモジュール内のファイルやフォルダが取得できないため、「git submodule update –init」コマンドを実行する必要がある。
また、サブモジュールを含むモジュールをgit cloneコマンドで取得した後で、更新されたサブモジュール内のファイルやフォルダを取得するには、「git submodule update –remote」コマンドを実行する必要がある。
今回は、これらのコマンドを利用してサブモジュールを含むモジュールを取得してみたので、その手順を共有する。
前提条件
下記記事の内容を実施済であること。
Gitコマンドによるサブモジュールの取得
Gitコマンドによって、git cloneコマンドで取得した直後や、その後に更新されたサブモジュールをローカルに取得する。その手順は、以下の通り。
1) 親モジュールを取得する予定のディレクトリ上で右クリックし、「Git Bash Here」メニューを選択する。
2) 以下のように、Git Bash(gitを操作する際に使うターミナル)が起動することが確認できる。
3) GitHub上で親モジュールを開き、「Code」ボタンを押下すると、親モジュールのURLが確認できる。ここで確認したURLは「https://github.com/purin-it/subModuleMain.git」となる。
4) 「git clone (親モジュールのURL)」 を実行し、GitHubからリポジトリ「subModuleMain」の内容をローカルに取得する。
5) 親モジュールの「subModuleMain」フォルダに移動後に、「.gitmodules」ファイルを確認すると、以下のように、サブモジュールへの参照パスが設定されていることが確認できる。
6) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、「subModuleMain」ディレクトリ下にGitHub上にあった「main.txt」が取得でき、「subModuleMain」ディレクトリ下の「sub/dir/sub.txt」が取得できないことが確認できる。
7) 「git submodule update –init」コマンドを実行すると、サブモジュールの内容である「subModuleMain」ディレクトリ下の「sub/dir/sub.txt」が取得できることが確認できる。
なお、「git submodule update –init」コマンドの意味については、以下のサイトの「登録されているサブモジュールを更新する」を参照のこと。
http://transitive.info/article/git/command/submodule/
8) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、「subModuleMain」ディレクトリ下の「sub/dir/sub.txt」が取得できていることが確認できる。
9) 「git submodule update –init」コマンドを再度実行しても、何も起こらないことが確認できる。
10) サブモジュールにファイルを追加するため、GitHub上でサブモジュールを開き、「Add file」メニューから「Create new file」を選択する。
11) ファイル名、ファイル内容、コミットメッセージを指定し、「Commit new file」ボタンを押下する。
12) 以下のように、ファイルが追加されたことが確認できる。
13) サブモジュールを更新(ファイルを追加)した状態で「git submodule update –init」コマンドを再度実行しても、以下のように、何も起こらずサブモジュールの更新がされないことが確認できる。
14) サブモジュールの更新を反映するには、「git submodule update –remote」コマンドを実行する。ただし、このコマンドのデフォルトのブランチがmasterとなっているため、あらかじめ「git config -f .gitmodules submodule.(サブモジュールのパス).branch (変更後のブランチ名)」を実行しておく。
15) この時点で「.gitmodules」ファイルを確認すると、以下のように、ブランチ名が追加されていることが確認できる。
16) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、サブモジュールが更新され追加したファイル(sub2.txt)が取得できていることが確認できる。
17) git addコマンド、git commitコマンド、git pushコマンドを利用して、追加したサブモジュールの内容を、GitHubに反映する。
18) 反映後のGitHubの内容は以下の通りで、「sub」ディレクトリ下に遷移すると、サブモジュール内に追加したファイルも表示されていることが確認できる。
要点まとめ
- Gitコマンドでサブモジュールを含むモジュールを取得するには、「git submodule update –init」コマンドや「git submodule update –remote」コマンドを利用する。