Skip to content

shallow cloneリポジトリでworktree作成が失敗する(git clone --reference) #376

@soukimu1223

Description

@soukimu1223

概要

ソースリポジトリが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 エラーが発生する

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions