Git

Gitコマンドでサブモジュールの内容をローカルで更新してみた

Gitコマンドを利用すると、サブモジュールの内容をローカル端末で更新することもできるが、サブモジュールの更新後にGitHubにその内容を反映するには、サブモジュールの内容をGitHubに反映した後で、親モジュールの内容をGitHubに反映する必要がある。

今回は、サブモジュールの内容をローカル端末で更新しGitHubに更新してみたので、その手順を共有する。

前提条件

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

Gitコマンドでサブモジュールを含むモジュールを取得してみたサブモジュールを含むモジュールをgit cloneコマンドで単純に取得すると、サブモジュール内のファイルやフォルダが取得できないため、「...

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

Gitコマンドでサブモジュールの内容をローカル端末で更新し、GitHubにその内容を反映する手順は、以下の通り。

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 –recursive (親モジュールのURL)」 を実行し、GitHubからリポジトリ「subModuleMain」の内容をローカルに取得する。前提条件の記事では、取得した後で「git submodule update –init」コマンドを実行していたが、「–recursive」オプションを利用するとサブモジュールの内容も含め取得することができるため、「git submodule update –init」コマンドの実行は不要になる。
サブモジュールのローカル更新_4

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

6) 「sub/dir」ディレクトリ移動後にsub3.txtを追加し、追加されたことを確認する。
サブモジュールのローカル更新_6

7) git addコマンド、git commitコマンド、git pushコマンドを利用して、サブモジュールの更新内容をGitHubに反映する。なお、git pushコマンドは「git push origin main」ではうまくいかず、「git push origin HEAD:refs/heads/main」でうまくいった。
サブモジュールのローカル更新_7

8) サブモジュールの内容をGitHub上で確認した結果は以下の通りで、sub3.txtが追加されていることが確認できる。
サブモジュールのローカル更新_8

9) git addコマンド、git commitコマンド、git pushコマンドを利用して、サブモジュールの更新内容を親モジュールで反映し、GitHubに反映する。
サブモジュールのローカル更新_9

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

サブモジュールのローカル更新_10_2 サブモジュールのローカル更新_10_3

要点まとめ

  • サブモジュールの内容をローカル端末で更新した場合は、サブモジュールの内容をGitHubに反映した後で、親モジュールの内容をGitHubに反映する必要がある。