VS Code 1.141 于 10 月 7 日发布。Chat: Open Worktree Cleanup 命令会显示非活动代理会话的 worktree 占用了多少磁盘空间,并允许删除不再需要的部分。

在这个视图中,可以按非活动时长筛选会话,查看每个 worktree 的大小,再选择要清理的项目。同一视图还可设置对拉取请求已合并的会话进行自动清理,以及在会话存储变大时是否提示清理。

开启 chat.agentSessions.sessionStorageCleanupSuggestion.enabled 后,当非活动 worktree 积累到一定数量或占用较多磁盘空间时,Agents 窗口会发出通知。

清理与恢复实际做了什么

清理会把所选会话标记为完成并删除对应的 worktree。之后恢复会话会重新创建 worktree,而活动、运行中、等待输入和已固定的会话受到保护,不会被清理。

根据 Git 文档,一个仓库可以有多个工作树,用 git worktree add 创建的称为链接(linked)worktree。git worktree remove 只会删除没有未跟踪文件和修改的干净 worktree,否则需要 --force。

git worktree prune 是另一个命令,用于清理残留的管理文件。这些背景只能说明删除检出为何能释放空间,并不代表 VS Code 清理命令的内部实现。

重新创建与找回的区别

发布说明的说法是重新创建 worktree。其中没有任何一句说删除时未提交的文件或笔记也会回来。

已合并的拉取请求只是已提交变更的证据,本地检出中仍可能留有未放进 PR 的工作,比如笔记或生成的输入。

时长与大小能说明什么

又旧又大的 worktree 很显眼,但仅凭大小无法判断剩余内容的价值。旧会话可能是被放弃的工作,也可能是在等待答复时暂停的调查。

因此第一次清理时,除了视图中显示的大小,最好也直接查看所选检出中剩下的变更。

自动清理适用的条件

如果团队习惯在合并前把需要的变更和调查笔记放在临时检出之外,那么对已合并 PR 会话的自动清理就只会删除可以丢弃的状态。这是关于工作方式的建议,并不是 VS Code 保证的行为。

需要一直保持打开的会话可以固定,以免被清理,但固定并不能代替为重要工作确定存放位置。

注意事项:本文没有验证的内容

本文没有亲自删除或恢复 worktree,也没有测量磁盘占用。未提交的状态能否恢复仍未经验证。

风险较小的顺序是:先手动清理已结束的会话,确认释放的空间以及保留的工作能否继续,然后再开启自动清理。

VS Code 1.141 的 worktree 清理会把会话标记为完成并删除检出,恢复时只重新创建 worktree,因此未提交的本地工作必须在清理前保存到别处。