Gitコマンドでは、あるリポジトリに他のリポジトリ(=サブモジュール)を追加することができる。今回は、Gitコマンドでサブモジュールを追加してみたので、その手順を共有する。
なお、サブモジュールについては、以下のサイトを参照のこと。
https://prograshi.com/general/git/how-to-use-git-submodule/
前提条件
Gitのインストール、GitHubのアカウント作成が、下記サイトの手順に従って実施済であること。
●Gitのインストール手順
https://eng-entrance.com/git-install
●GitHubのアカウント作成手順
https://qiita.com/ayatokura/items/9eabb7ae20752e6dc79d
やってみたこと
親モジュールとサブモジュールの作成
GitHub上に、サブモジュールの追加元となる親モジュールと、サブモジュールを追加する。その手順は、以下の通り。
1) GitHubにログインし、リポジトリ横の「New」ボタンを押下する。
2) 親モジュールとなるリポジトリ名「subModuleMain」を入力し、「Create repository」ボタンを押下する。
3) 以下のページが表示され、「subModuleMain」というリポジトリが作成されたことが確認できる。ここで、このリポジトリにファイルを追加するため、「creting a new file」リンクを押下する。
4) ファイル名、ファイル内容、コミットメッセージを指定し、「Commit new file」ボタンを押下する。
5) 以下のように、親モジュールとなるsubModuleMainリポジトリに指定したファイルが追加されたことが確認できる。
6) 同様に、サブモジュールとなるsubModuleSubリポジトリに「sub.txt」を作成する。作成後のリポジトリは以下の通り。
親モジュールにサブモジュールを追加
git submodule addコマンドを利用すると、親モジュールにサブモジュールを追加することができる。その手順は、以下の通り。
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) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、「subModuleMain」ディレクトリ下に、GitHub上にあった「main.txt」が取得できたことが確認できる。
6) GitHub上でサブモジュールを開き、「Code」ボタンを押下すると、サブモジュールのURLが確認できる。ここで確認したURLは「https://github.com/purin-it/subModuleSub.git」となる。
7) 親モジュールの「subModuleMain」フォルダに移動後に、「git submodule add (サブモジュールのURL)」コマンドで、subModuleSubリポジトリをサブモジュールとして追加する。
8) 「ls -lR」や「cat (参照するファイル名)」を実行すると、以下のように、「subModuleSub」ディレクトリ下に、GitHub上にあったサブモジュールのファイル「sub.txt」が取得できたことが確認できる。
9) また、サブモジュールを追加したことで、以下のように、「.gitmodules」ファイルが作成され、ここにサブモジュールへの参照パスが記載されていることが確認できる。
10) サブモジュール追加後のファイルをローカル端末で確認した結果は、以下の通り。
11) サブモジュール追加後に「git status」コマンドで状況を確認すると、以下のように、コミットが必要なファイルやフォルダが表示される。
12) これらのファイルやフォルダを「git commit」コマンドでコミットし、コミット後の状況を「git status」コマンドで確認する。
13) コミットした内容をGitHubに反映するため、「git push」コマンドを実行する。なお、今回は「main」ブランチ上で操作しているため、「git push origin main」と実行している。
14) 「git push」コマンドを実行した後に、GitHubの内容を確認すると、以下のように、サブモジュールが追加されていることが確認できる。また、「subModuleSub@7674c74」のリンクを押下すると、サブモジュール内のファイルも追加されていることが確認できる。
親モジュールからサブモジュールを削除
追加したサブモジュールは、削除することもできる。その手順は、以下の通り。
1) 「git submodule deinit (サブモジュールのパス)」コマンドで、サブモジュールを削除する。
2) 「git rm -rf (サブモジュールのパス)」コマンドで、サブモジュールのディレクトリそのものを削除する。
3) サブモジュール削除後の「.gitmodules」ファイルを確認すると、以下のように、中身が空になっていることが確認できる。
4) サブモジュール削除後のファイルをローカル端末で確認した結果は、以下の通り。
5) サブモジュール削除後に「git status」コマンドで状況を確認すると、以下のように、コミットが必要なファイルやフォルダが表示される。
6) これらのファイルやフォルダを「git commit」コマンドでコミットし、コミット後の状況を「git status」コマンドで確認する。
7) コミットした内容をGitHubに反映するため、「git push」コマンドを実行する。
8) 「git push」コマンドを実行した後に、GitHubの内容を確認すると、以下のように、追加したサブモジュールが削除されていることが確認できる。
9) このままだと「.git/modules」ディレクトリ下にサブモジュールが残ったままになっているため、rmコマンドを用いて、「.git/modules」ディレクトリ下のサブモジュールのフォルダを削除する。
●参考サイト
https://qiita.com/knsh14/items/941f2ec2ec76ef1d1940
要点まとめ
- 「git submodule add (サブモジュールのURL)」コマンドで、サブモジュールを追加できる。
- サブモジュールへの参照パスは、サブモジュール追加時に作成された「.gitmodules」ファイルに記載される。
- 追加したサブモジュールを削除するには、 「git submodule deinit (サブモジュールのパス)」コマンドを実行後、「git rm -rf (サブモジュールのパス)」コマンドを実行し、.git/modulesディレクトリ下のサブモジュールのディレクトリを削除する。