0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Day15:Submoduleを含むgit worktreeの注意点(Hugo+Blowfishテーマでのgit worktreeの注意点)

Posted at

本記事の概要

Hugo+Blowfishテーマでのgit worktreeの注意点です。
平たく言えば、submoduleを含むgitリポジトリでgit worktreeを使う場合の注意点になります。

前提

Hugo+Blowfishテーマ適用済みの環境です。
なお、Windowsでの操作を想定しています。
(本記事が属するアドベントカレンダーについてもご確認ください)

前置き(興味のない人は読み飛ばしてもOKです)

Hugoという静的サイトジェネレーターで、個人サイトを作っていた時のお話です。
Hugoにはテーマという機能があり、第三者が作ったテーマを取り込むことで、自分好みの見た目にしたりすることが出来ます。
テーマの導入方法は複数あるのですが、私の使用しているBlowfishというテーマは、gitの持つsubmodule機能を使ってインストールします。
そこで、git worktreeを使った時にハマった内容について書いた記事です。

念のため、簡易的にディレクトリ構成を書くと、my-siteというリポジトリで管理している場合、下記のようになります。

簡易的なディレクトリ構成
my-site/
├── .git/
├── 自サイトを作るためのディレクトリ(複数)/
├── themes/
│   └── blowfish/
│       └── gitのsubmodule機能でblowfishのリポジトリからファイルを取得する
└── .gitmodules

git worktreeについて

簡単に言えば、gitのブランチを別ディレクトリに落としてくる機能です。
当然、worktree側からもコミットできます。

worktreeを使用しない場合は、checkoutするブランチを切り替えながら作業することになる為、複数ブランチで同時並行的に対応するのが大変ですが、
git worktreeを使うことで、それぞれのブランチを別ディレクトリに落として作業できるので、複数ブランチに対して同時並行で作業することも可能です。

gitにはdiffコマンドがあるのでブランチ間のdiff確認も容易ではありますが、ローカルに落としてきてWinMerge等のツールでdiffを取りたいといった場合にも便利です。

worktreeの追加と注意点

前提として、下記のようにwork/my-site内にmasterブランチをチェックアウト済みとします。この時に、XXXブランチをmy-site-XXX内に追加する方法を説明します。

今回説明する構成
work/
├── my-site/
│   └── masterブランチの内容
└── my-site-XXX/
    └── XXXブランチの内容

XXXブランチをworktreeとして追加するには、my-siteディレクトリ内で下記のようにコマンドを打てば良いです。

worktreeの追加
git worktree add ../my-site-XXX XXX

要は「git worktree add ディレクトリ ブランチ名」という風に打てばOKです。

さて、my-site-XXXでXXXブランチの作業をすることになりますが、ここで注意点があります。
worktree作成直後は、submoduleがチェックアウトされていません。

Hugoで言えば、テーマがチェックアウトされていないので正しくビルドできません。

そのため、my-site-XXXディレクトリで、下記のようにコマンドを打ってSubmoduleを更新してあげる必要があります。

git submoduleの更新
git submodule update --remote --merge

worktree一覧の確認方法

下記のようにして確認できます。

worktree一覧の確認方法
git worktree list

worktreeでの作業

my-site-XXXブランチでコミット等の作業は通常のディレクトリと同様にできます。
XXXブランチに必要な作業をmy-site-XXXで行えばよいです。

worktreeの削除

XXXブランチでの作業が終了し、my-site-XXXディレクトリが不要になったとします。
my-siteディレクトリで下記のように打つと削除できます。

worktreeの削除
git worktree remove -f ..\my-site-XXX\

要は「git worktree remove -f ディレクトリ」という風に打てばOKです。

ここでの注意点は -f です。
-fを付けないと削除できませんのでご注意ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?