git submodule


git submoduleは別のgitリポジトリを本体のgitリポジトリのサブディレクトリとして登録し、特定のcommitを参照するしくみです。

🏈 submoduleの追加手順

プロジェクトに「hexo-amazon-jp-link」をhexo-amazon-jp-linkというディレクトリに追加します。

git submodule add https://github.com/morizyun/hexo-amazon-jp-link.git hexo-amazon-jp-link
tree .
├── hexo-amazon-jp-link # hexo-amazon-jp-linkのディレクトリ
│   ├── README.md
│   ├── index.js
│   └── package.json
└── index.html # 親プロジェクトのファイル

これでbootstrapディレクトリがプロジェクトに追加されます。変更は次のようになります。

git diff --cached
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..6e91676
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule hexo-amazon-jp-link]
+ path = hexo-amazon-jp-link
+ url = https://github.com/morizyun/hexo-amazon-jp-link.git
diff --git a/hexo-amazon-jp-link b/hexo-amazon-jp-link
new file mode 160000
index 0000000..29cdf4f
--- /dev/null
+++ b/hexo-amazon-jp-link
@@ -0,0 +1 @@
+Subproject commit 29cdf4fa49682e8a02895b486cead734842e527

hexo-amazon-jp-linkのハッシュ29cdf4fa49682e8a02895b486cead734842e527のコミットがhexo-amazon-jp-linkに登録されたことがわかります。

🐯 submoduleの更新手順

submoduleのブランチを変更するには、まずsubmoduleのディレクトリで対象のブランチ、コミットをチェックアウトする。

cd hexo-amazon-jp-link
git checkout xxx

submoduleの外側で、submoduleの変更コミットを記録します。

git diff
diff --git a/hexo-amazon-jp-link b/hexo-amazon-jp-link
index 29cdf4f..ef8bad8 160000
--- a/hexo-amazon-jp-link
+++ b/hexo-amazon-jp-link
@@ -1 +1 @@
-Subproject commit 29cdf4fa49682e8a02895b486cead734842e5277
+Subproject commit ef8bad89513f800b6644b426bfd326aacd881fde

submoduleが29cdf4fa49682e8a02895b486cead734842e5277の状態から、ef8bad89513f800b6644b426bfd326aacd881fdeに変更されたことがわかります。

🎃 submoduleを本家リポジトリのブランチに追従させる

本家リポジトリのブランチにsubmoduleの状態を追従させるためには、git submodule updateを実施する必要があります。(自動では追従しません)

# 本家リポジトリのディレクトリ
git checkout yyy
# submoduleを本家に追従させる
git submodule update

🐮 まとめ

  • git submoduleで追加したディレクトリは外部リポジトリへの参照(リポジトリのURLと、Commitのハッシュ)を記録しています
  • git submoduleの配下(内側)は操作したときにしか更新されない(本体のgitブランチを変更しても追従しない)

🍄 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)