tags : Git

Git Worktree + Gitflow 運用ガイド(ベース運用)

前提

  • Git Flow ライクなブランチ構成(main, develop, feature/xxx)
  • Git worktree を使ってブランチごとにディレクトリを分離
  • プライマリワークツリーには作業ブランチを割り当てない

ディレクトリ構成例

/myproject/            ← プライマリワークツリー(wt-root ブランチ)
/myproject/develop/    ← develop ブランチの worktree
/myproject/master/     ← master ブランチの worktree
/myproject/feature-foo/← feature/foo ブランチの worktree

プライマリワークツリーについて

  • プライマリには wt-root など、*作業しない目的のブランチ* を割り当てる
  • ブランチ名候補: wt-root, base-holder, root-holder など
  • 目的:他のブランチを worktree に割り当てられるようにするためのダミー

初期セットアップ手順(新規リポジトリの場合)

mkdir myproject
cd myproject
git init
git switch -c wt-root
echo ".keep は本ディレクトリを Git に認識させるためのダミーファイルです。実作業では使用しません。各作業は worktree 上で行ってください。" > .keep
git add .keep
git commit -m "initial wt-root"

初期セットアップ手順(既存リポジトリの場合)

cd myproject
mv .git ../repo.git
rm -rf * .[^.]*
mkdir .git
mv ../repo.git .git
git switch -c wt-root
echo ".keep は本ディレクトリを Git に認識させるためのダミーファイルです。実作業では使用しません。各作業は worktree 上で行ってください。" > .keep
git add .keep
git commit -m "initial wt-root"

develop ブランチを worktree として追加

git worktree add develop develop

プライマリ(myproject)にいる状態で実行

master ブランチを worktree として追加

git worktree add -b master master develop

develop または wt-root をベースに master を作成

  • 本番用の履歴を集約するブランチ
  • develop → release → master の流れを支える

新しい feature ブランチの作成と worktree 追加

git worktree add -b feature/awesome feature-awesome develop

プライマリ(myproject)にいる状態で実行

feature を develop にマージし、クリーンアップ

cd develop
git merge --no-ff feature/awesome
 
cd ..
git worktree remove feature-awesome
git branch -d feature/awesome
git push origin --delete feature/awesome  # 必要に応じて

各 worktree 内での git switch の制限

  • worktree 内ではブランチを切り替えることができない
  • ブランチ切り替えを行うには、別の worktree を作成する必要がある
  • プライマリ(wt-root)だけはブランチの切り替えが可能(ただし非推奨)

命名規則(推奨)

  • プライマリ用途: wt-root, base-holder, root-holder
  • worktree ディレクトリ: develop/, master/, feature-xxx/, release-yyy/
  • ブランチ名: develop, master, feature/foo, release/1.0 など Git Flow に準拠

補足

  • git worktree は「1 worktree = 1 ブランチ」
  • 明確なディレクトリ分離により、並行作業が安全かつ管理しやすくなる