はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

Git の submodule を使ってみる

Git の submodule を使ってみる

submodule を使ってみたのでメモ。

複数のリポジトリを1つにまとめて管理できないかと調べてみたところ、submodule が近そうなので使ってみました(他にもっといい方法があるかもしれませんが)。

submodule

簡単に言うと、リポジトリの中に別のリポジトリを置くといったことができます。

submoduleを利用すれば、複数リポジトリをsubmodule(子リポジトリ)としておくと、親リポジトリをclone するだけでまとめてclone できます。

試しに作ったのがこちらです。 親リポジトリが「HTML5」, submodule は「test」 です。

リポジトリtest がリンクになっており、クリックするとtest.gitのページを参照することができます。

submoduleを作ったリポジトリのページの画像

リポジトリが「HTML5」, submodule は「test」

https://github.com/Cartman0/HTML5

submodule の追加

リポジトリをつくって、ローカルにclone。

Git Shell などで、親リポジトリ上で、submodule にしたいリモートリポジトリを追加する(下記のコマンド)。


git submodule add <リモートリポジトリ リンク>.git
git commit -m "<適当なメッセージ>"
git push

submodule の更新

更新部分が重要で、ちょっとややこしいです。

submodule が更新され最新のリモートリポジトリを追う場合は以下のコマンド。

 git submodule foreach git pull origin master 

このまま、親リポジトリのリモートを更新をする場合、


git add <submodue名>
git commit -m "<適当なメッセージ>"
git push

詳しくわかってませんが、git submodule update は、git submodule init(add) した時点しか 追えないようです。

git submodule update --recursive

qiita.com

submodule のclone

ただのclone では、submodule はclone されないので、以下のコマンド。

git clone --recursive <リモートリポジトリ リンク>.git

submodule の削除

submodule を削除する場合は以下のコマンド


git submodule deinit <リポジトリ名>
git rm -rf <対象のファイル>