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 developdevelop または 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 ブランチ」
- 明確なディレクトリ分離により、並行作業が安全かつ管理しやすくなる