-
-
Notifications
You must be signed in to change notification settings - Fork 27
Description
概要
ソースリポジトリがshallow cloneの環境(DevContainer)でTAKTを実行すると、worktree作成時に以下のエラーで失敗します。
[ERROR] Command failed: git clone --reference /workspaces/my-project --dissociate --branch master /workspaces/my-project /workspaces/takt-worktrees/20260224T0342-my-feature-branch
Cloning into '/workspaces/takt-worktrees/20260224T0342-my-feature-branch'...
fatal: reference repository '/workspaces/my-project' is shallow
原因
src/infra/task/clone.ts で git clone --reference --dissociate を使用してworktreeを作成していますが、Gitの仕様上、shallow cloneされたリポジトリを --reference として使用することができません。shallow cloneはオブジェクトデータベースが不完全なため、参照共有に必要なデータが揃っていないことが原因です。
暫定的な回避策
TAKT実行前にリポジトリをunshallowする:
git fetch --unshallow
ただし、大規模リポジトリではshallow cloneにしている理由(時間・容量・ネットワーク帯域の節約)を無効にしてしまうため、正直なところこの回避策もあまり使いたくない状況です。
解決策について
shallow clone環境での --reference 失敗を検出してフォールバックする対応が考えられますが、フォールバック先のclone方法(履歴の深さ、リモートfetchの制御など)はTAKTがworktree上でどこまでの履歴を前提としているかに依存すると思っています。
再現手順
任意のリポジトリをshallow cloneする(git clone --depth 1 )
そのリポジトリでTAKTを実行する
タスクを選択し「実行する」を選ぶ
worktree作成を「Y」で確認
fatal: reference repository is shallow エラーが発生する