Skip to content

[Feature]: multica repo checkout should support worktree reuse or auto-cleanup #5757

Description

@cheng8980

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

  • multica repo checkout 支持 --reuse--cleanup 参数
  • 文档中有对应章节说明 worktree 管理和磁盘清理方式
  • (可选)task 框架记录关联 worktree 并在 task 结束时自动清理

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions