/Session、Worktree 与并行 Agent登录后记录进度

Session、Worktree 与并行 Agent

建议用时:25 分钟(含练习)

学习目标

能够判断任务是否可并行,并用独立工作区减少文件冲突和上下文污染。

本节产出

一张并行任务依赖图

核心知识:会话分开,不代表文件分开

Session

Session 是一次任务的对话与运行上下文。

Git worktree

Git worktree 是一个独立的工作目录与暂存状态。

Agent 则是执行任务的系统或实例。三者可以组合,但不能互相替代。开两个聊天窗口,可能仍然让两个执行者修改同一份文件;创建两个 worktree,也不会自动把对话历史复制过去。

Git worktree 允许一个仓库拥有多个检出的工作目录,通常各自用于不同分支。它们共享 Git 对象和部分仓库管理信息,但工作文件与索引各有边界。它比复制整个项目更便于共享提交历史,但不是安全沙箱;环境变量、数据库、外部服务和某些缓存仍可能共享。

并行的价值来自独立任务,而不是数量。两个任务如果都要重写同一个组件或修改同一份数据库迁移,沟通与合并成本可能超过节省的时间。拆分前先明确输入、输出、文件所有权和集成接口,能真正独立验证的部分才适合同时推进。

主任务定义接口与文件边界,独立会话在各自工作区执行和验证,随后串行集成并运行整体检查

图中最后的集成是一个单独步骤。各任务测试通过,只说明它们在各自环境内满足检查;合并后仍可能出现类型、依赖和语义冲突。协调者需要检查组合结果,不能简单把所有“完成”消息相加。

一个清楚的子任务合同

子任务应说明目标、已知事实、允许修改的文件、禁止事项、验证命令和预期证据。例如“只在报告格式文档中解释新增字段,依据已批准的字段表,不修改代码;检查示例是否与字段表一致”。这比“帮忙看看项目”更容易得到能直接集成的结果。

给子任务传递必要上下文,不必复制整段主会话。过多历史可能带入过期假设,过少上下文又会让执行者重新探索已知事实。最实用的交接通常包括当前结论、来源位置、尚未解决的问题和具体完成条件。

案例:什么时候适合同时工作

虚构任务是为报表增加一个新的显示字段。任务甲修改纯函数及相关测试,任务乙根据已确认字段合同更新使用文档,这两部分可以在接口稳定后并行。若字段含义仍在讨论,文档工作很可能反复返工,此时应先定合同,再开始两边实现。

另一个任务是两个人分别优化同一个页面的布局与状态逻辑。即使代码行暂时不同,它们也可能依赖相同组件结构。可以先由一方确定结构,另一方只做只读审阅,或将修改串行执行。独立审阅同一实现是有价值的并行,但不等于两个实现者同时改同一文件。

两类冲突都要检查

文本冲突是 Git 无法自动合并的重叠修改;语义冲突则可能在自动合并后才出现。例如一方把金额单位改为分,另一方仍按元展示,Git 可能没有任何冲突,但用户看到的结果错误。合并后的整体测试必须覆盖接口与业务假设。

共享资源也需要协调:两个测试进程使用同一端口会互相抢占;两个任务复用同一个测试数据库可能覆盖数据;一个进程修改全局配置会影响另一个工作区。隔离策略应覆盖任务实际使用的资源,而不只覆盖源文件。

动手练习

  1. 把一个小型开发目标拆成两个任务,为每个任务写明文件范围和验收证据。指出它们是否真的独立。
  2. 在练习仓库查看 git worktree list,理解目录与分支映射。没有多个 worktree 也可以根据示意设计,不必创建新环境。
  3. 构造一个自动合并也会出错的语义冲突例子,并写出能够发现它的集成检查。

参考答案与推演

完成检查

  • 能区分 Session、worktree 和 Agent 的不同边界。
  • 并行任务有明确接口和文件所有权,未争抢共享资源。
  • 集成检查包含语义一致性,不只依赖 Git 自动合并。
  • 清理工作区之前确认成果与未提交改动状态。

参考与来源

Session、Worktree 与并行 Agent

3 道题 · 及格分 60 分

开始测验