はじめに
複数ブランチを並行して作業したいとき、真っ先に思いつく解決策は「ブランチを切り替える」ことです。しかしブランチ数が増えると、切り替えのたびにファイルが書き換わる煩わしさが出てきます。
この問題を解決する方法は2つあります。
- 複数クローン方式:同じリポジトリを複数回クローンし、フォルダごとにブランチを割り当てる
- Git Worktree:1つのリポジトリから複数の作業フォルダを展開するGitの機能
どちらも「ブランチ切り替えなしに複数ブランチのファイルを同時に扱える」という点では同じです。例えば、Qiita CLI × GitHub Actionsを使った記事管理フローのように記事ごとにブランチを分けて管理している場合、記事が増えるにつれてどちらの方法が合っているか気になってきます。この記事では両者を比較し、自分のユースケースに合った方を選ぶための指針をまとめます。
1. 複数クローン方式
概要
同じリポジトリを複数回クローンし、フォルダ名でブランチを区別する方法です。
~/dev/
├── my-repo-main/ # main ブランチ
├── my-repo-feature-a/ # feature/a ブランチ
└── my-repo-feature-b/ # feature/b ブランチ
セットアップ手順
# feature/a 用
git clone git@github.com:yourname/my-repo.git my-repo-feature-a
cd my-repo-feature-a && git checkout feature/a
# feature/b 用
git clone git@github.com:yourname/my-repo.git my-repo-feature-b
cd my-repo-feature-b && git checkout feature/b
日常の操作
各フォルダは独立した通常のリポジトリなので、特別な知識は不要です。
# feature/a で作業
cd ~/dev/my-repo-feature-a
# ファイルを編集...
git add .
git commit -m "作業内容"
git push origin feature/a
2. Git Worktree
概要
1つのリポジトリから複数の作業フォルダ(worktree)を展開するGitの機能です。.git ディレクトリは1つのまま、複数ブランチのファイルを別フォルダで同時に扱えます。
~/dev/
├── my-repo/ # メインリポジトリ(.git はここだけ)
└── my-repo-worktrees/
├── feature-a/ # feature/a ブランチ
└── feature-b/ # feature/b ブランチ
セットアップ手順
cd ~/dev/my-repo
mkdir -p ~/dev/my-repo-worktrees
git worktree add ~/dev/my-repo-worktrees/feature-a feature/a
git worktree add ~/dev/my-repo-worktrees/feature-b feature/b
# 展開確認
git worktree list
日常の操作
各worktreeフォルダで通常のGit操作が使えます。
cd ~/dev/my-repo-worktrees/feature-a
# ファイルを編集...
git add .
git commit -m "作業内容"
git push origin feature/a
3. 比較
| 観点 | 複数クローン | Git Worktree |
|---|---|---|
| セットアップ |
git clone を繰り返すだけ |
git worktree add コマンドが必要 |
| Gitの知識 | 通常のGit操作のみ | worktreeコマンドの理解が必要 |
| ディスク使用量 | クローンごとにオブジェクトが重複 |
.git オブジェクトを1つのリポジトリで共有 |
git fetch の手間 |
クローンごとに個別実行が必要 | メインリポジトリで1回実行すれば全worktreeに反映 |
| 全体の把握 | フォルダ一覧を自分で管理する |
git worktree list で一覧確認できる |
| フォルダの移動 | 自由に移動できる | コマンドなしでは登録情報とパスがずれてエラーになる(git worktree move <旧パス> <新パス> で移動可能) |
| 同一ブランチの重複展開 | 可能 | 不可(1ブランチ1worktreeという制約があるためエラーになる) |
| スクリプトとの親和性 | worktree一覧の取得が面倒 |
git worktree list --porcelain で扱いやすい |
4. どちらを選ぶか
複数クローンが向いているケース
- ブランチ数が少ない(3〜4個程度)
- 一括操作スクリプトは使わず、手動で管理する
- フォルダを自由に移動・整理したい
- worktreeの仕組みを覚えるコストをかけたくない
Git Worktreeが向いているケース
- ブランチ数が多い(5個以上)
- スクリプトで一括コミット・pushをしたい
- ディスク容量を節約したい
-
git fetchの手間を最小にしたい
判断の目安
ブランチが少ないうちは複数クローンの方がシンプルで迷いにくいです。ブランチが増えてきて「全体を把握する手段」や「一括操作スクリプト」が欲しくなったタイミングでworktreeへ移行するのが現実的です。
おわりに
複数クローンとGit Worktreeは、どちらも「ブランチ切り替えなしに複数ブランチを並行編集する」という同じ問題を解決します。シンプルさを取るか、スケーラビリティを取るかが選択の軸です。
ブランチ数が多い場合のWorktreeの実践的な運用(初回セットアップ・一括コミット・後片付けのスクリプト)は、以下の記事にまとめています。