Problem
multica repo checkout 每次拉取代码仓库时,默认会通过 git worktree add 创建一个新的工作目录放在 multica_workspaces/ 下。随着任务运行增多,这些 worktree 不断累积,每个都包含完整的 .git 对象仓库和检出文件(部分大型代码仓库可达数 GB),造成严重的磁盘空间浪费。
例如,频繁 check out 同一个仓库的不同 ref/task,可能在 multica_workspaces/ 下积累几十甚至上百个 worktree 目录,其中大部分不会再被用到。
Suggested Solutions
Option A: multica repo checkout --reuse <name>
复用已存在的 worktree 目录(例如按仓库名或 tag 进行匹配)。如果目录已存在且对应正确的 ref,跳过 git worktree add 直接使用;如果 ref 不同,在该目录下执行 git fetch + checkout 而非新建 worktree。
Option B: multica repo checkout --cleanup
在 checkout 之前或之后,清理与该仓库关联的、过期的或多余的历史 worktree(通过 git worktree prune + 删除已不存在的 worktree 目录文件)。
Option C: Task 结束时自动清理
在 task 生命周期结束(terminal state)时,自动删除该 task 所创建的 worktree 目录并执行 git worktree prune。这需要 task framework 记录每个 task 创建的 worktree 路径。
Recommended Approach
优先实现 Option A(--reuse),改动量小且立即可见效果,能覆盖大多数常见场景。Option C 可作为后续增强,彻底解决泄漏问题。
Additional Context
git worktree list 可以列出当前所有 worktree
git worktree prune 可以清理已删除 worktree 的元数据
- multica_workspaces 的设计初衷是隔离多个任务的执行环境,隔离没问题,但需要提供显式的清理/复用机制
Acceptance Criteria
Problem
multica repo checkout每次拉取代码仓库时,默认会通过git worktree add创建一个新的工作目录放在multica_workspaces/下。随着任务运行增多,这些 worktree 不断累积,每个都包含完整的.git对象仓库和检出文件(部分大型代码仓库可达数 GB),造成严重的磁盘空间浪费。例如,频繁 check out 同一个仓库的不同 ref/task,可能在
multica_workspaces/下积累几十甚至上百个 worktree 目录,其中大部分不会再被用到。Suggested Solutions
Option A:
multica repo checkout --reuse <name>复用已存在的 worktree 目录(例如按仓库名或 tag 进行匹配)。如果目录已存在且对应正确的 ref,跳过
git worktree add直接使用;如果 ref 不同,在该目录下执行git fetch + checkout而非新建 worktree。Option B:
multica repo checkout --cleanup在 checkout 之前或之后,清理与该仓库关联的、过期的或多余的历史 worktree(通过
git worktree prune+ 删除已不存在的 worktree 目录文件)。Option C: Task 结束时自动清理
在 task 生命周期结束(terminal state)时,自动删除该 task 所创建的 worktree 目录并执行
git worktree prune。这需要 task framework 记录每个 task 创建的 worktree 路径。Recommended Approach
优先实现 Option A(
--reuse),改动量小且立即可见效果,能覆盖大多数常见场景。Option C 可作为后续增强,彻底解决泄漏问题。Additional Context
git worktree list可以列出当前所有 worktreegit worktree prune可以清理已删除 worktree 的元数据Acceptance Criteria
multica repo checkout支持--reuse或--cleanup参数