これまではサブモジュールをmainブランチで更新してきたが、この更新は別のブランチ上でも行える。
今回は、サブモジュールにfeatureブランチを追加し、親モジュールもfeatureブランチのサブモジュールを参照した上で、サブモジュールの更新を行ってみたので、その手順を共有する。
前提条件
下記記事の内容を実施済であること。
やってみたこと
サブモジュールにfeatureブランチを追加
サブモジュールをローカル端末に取得し、featureブランチを追加し、そのfeatureブランチにファイルを追加する。その手順は、以下の通り。
1) サブモジュールを取得する予定のディレクトリ上で右クリックし、「Git Bash Here」メニューを選択する。
2) 以下のように、Git Bash(gitを操作する際に使うターミナル)が起動することが確認できる。
3) GitHub上でサブモジュールを開き、「Code」ボタンを押下すると、サブモジュールのURLが確認できる。ここで確認したURLは「https://github.com/purin-it/subModuleSub.git」となる。
4) 「git clone (サブモジュールのURL)」 を実行し、GitHubからリポジトリ「subModuleSub」の内容をローカルに取得する。
5) subModuleSubディレクトリに移動後、「git branch」コマンドを実行すると、以下のように、mainブランチのみが作成されていることが確認できる。
6) 「git checkout -b feature」コマンドを実行することで、featureブランチを作成し移動する。
7) featureブランチ上で、sub4,txtファイルを追加する。
8) git addコマンド、git commitコマンド、git pushコマンドを利用して、サブモジュールの更新内容をGitHubに反映する。
9) サブモジュールの内容をGitHub上で確認した結果は以下の通りで、featureブランチが作成され、sub4.txtが追加されていることが確認できる。
また、mainブランチの内容は以下の通りで、sub4.txtは追加されていない。
親モジュールにfeatureブランチを追加
親モジュールをローカル端末に取得し、featureブランチを追加し、サブモジュールもfeatureブランチを参照するよう修正する。その手順は、以下の通り。
1) 親モジュールを取得する予定のディレクトリ上で右クリックし、「Git Bash Here」メニューを選択する。
2) 以下のように、Git Bash(gitを操作する際に使うターミナル)が起動することが確認できる。
3) GitHub上で親モジュールを開き、「Code」ボタンを押下すると、親モジュールのURLが確認できる。ここで確認したURLは「https://github.com/purin-it/subModuleMain.git」となる。
4) 「git clone –recursive (親モジュールのURL)」 を実行し、GitHubからリポジトリ「subModuleMain」の内容を、サブモジュールの内容も含め、ローカルに取得する。
5) 「subModuleMain」ディレクトリ移動後に「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、「subModuleMain」ディレクトリ下にGitHub上にあった、mainブランチの各ファイルが取得できていることが確認できる。
6) 「git branch」コマンドを実行すると、以下のように、mainブランチのみが作成されていることが確認できる。
7) 「git checkout -b feature」コマンドを実行することで、featureブランチを作成し移動する。
8) 現状の「.gitmodules」を確認した結果は、以下の通り。
9) 「git config -f .gitmodules submodule.sub/dir.branch feature」コマンドを実行し、サブモジュールの参照先ブランチをfeatureに変更する。
10) 「git submodule update –remote」コマンドを実行すると、featureブランチにあるsub4,txtファイルが取得できることが確認できる。
11) 「sub/dir」ディレクトリ移動後にsub5.txtを追加し、追加されたことを確認する。
12) git addコマンド、git commitコマンド、git pushコマンドを利用して、サブモジュールの更新内容をGitHubに反映する。
13) サブモジュールの内容をGitHub上で確認した結果は以下の通りで、featureブランチの場合にsub5.txtが追加されていて、mainブランチの場合は変更されていない。
14) git addコマンド、git commitコマンド、git pushコマンドを利用して、サブモジュールの更新内容を親モジュールで反映し、GitHubに反映する。
15) 親モジュールのfeatureブランチの内容をGitHub上で確認した結果は以下の通りで、「sub」ディレクトリ下に遷移すると、サブモジュール内に追加したファイルも表示されていることが確認できる。
16) 親モジュールのmainブランチの内容をGitHub上で確認した結果は以下の通りで、内容は変更されていない。
親モジュールのmainブランチにfeatureブランチの内容をマージ
親モジュールのfeatureブランチの内容を、親モジュールのmainブランチに反映する。その手順は、以下の通り。
1) 「git checkout (変更後ブランチ名)」というコマンドで、mainブランチに変更する。
2) 「git merge (マージ元ブランチ名)」というコマンドで、featureブランチの更新内容を、元の(main)ブランチに反映する。
3) 「ls -lR」や「cat (参照するファイル名)」を実行すると、featureブランチの内容が反映されていることが確認できる。
4) 「.gitmodules」の内容を確認すると、以下のように、サブモジュールの参照先ブランチをfeatureになっていることが確認できる。
5) git pushコマンドを利用して、サブモジュールの更新内容を親モジュールで反映し、GitHubに反映する。なお、下図では実行前にgit statusコマンドにより、git pushコマンドの実行が必要であることを確認している。
6) 親モジュールのmainブランチの内容をGitHub上で確認した結果は以下の通りで、featureブランチの内容が反映されていることが確認できる。
要点まとめ
- サブモジュールを更新するブランチや、親モジュールの参照するサブモジュールの参照先ブランチは、別のブランチに設定することもできる。