Git submoduleの使い方
ちょっと自分でも混乱したので、覚書です。
なぜSubmoduleが必要か?
今月からブログ用に静的ジェネレーターのHugoに移行しました。 移行に際してGitのリポジトリを介して自動ビルド しています。
HugoではテーマがGitHubなどで公開されているケースがほとんどです。 ローカルで生成するならば単にクローンしてくれば良いのですが、GitHubやbitbucketなどにブログのソースを置いて自動ビルドをかけようとすると、これらテーマのリポジトリの関係もきちんとしておく必要があります。
Gitでのsubmoduleを追加する
ここでは、自分のブログのリポジトリをmy-blog
とし、テーマも自作のものを利用しているとしてそのリポジトリをmy-theme
とします。
自作テーマを自分のhugoのリポジトリに適用するには、以下のようにします。
[~] $cd my-blog [~/my-blog] $ git submodule add https://github.com/yourid/my-theme.git
これでクローンした時と同じようにテーマのリポジトリがダウンロードされてきます。
クローンした時と異なるのは、my-blog
のリポジトリ内に.gitmodules
というファイルが作成されていることです。(不可視ファイルなので、ls -la
などで確認してください。)
.gitmodules
は以下のようになっているはずです。
[submodule "themes/my-theme"] path = themes/my-theme url = https://github.com/yourid/my-theme.git
submoduleの変更
ブログを運用しているうちにテーマを修正したくなった場合の対応です。 私は、ここちょっと混乱しました。
前提としてローカルではブログとテーマの修正用リポジトリはそれぞれ別に管理しているものとします。
以下は、ローカルにテーマのリポジトリをクローンしてきて、修正を加えてリモートのリポジトリに反映するまでです。
[~] $ git clone https://github.com/yourid/my-theme.git [~] $ cd my-theme [~/my-theme] $ 〜 ここで必要な修正をかける 〜 [~/my-theme] $ git add . [~/my-theme] $ git commit -m"modified iframe styles" [~/my-theme] $ git push
ローカルにあるブログのリポジトリでは、内部にあるテーマは上記の修正を含んでいません。これを反映させる必要があります。
このため、まずテーマのリポジトリをプルしてきてその状態のブログのリポジトリをプッシュする必要があります。
[~/my-blog] $ cd themes/my-theme [~/my-blog/themes/my-theme] $ git pull [~/my-blog/themes/my-theme] cd ../.. [~/my-blog] $ git add themes/my-theme [~/my-blog] $ git commit -m"update my-theme" [~/my-blog] $ git push
これでブログとテーマのリポジトリの関係を最新状態にして維持できるようになります。