AI 并行工作的前提是切分好独立的工作区
目录
前段时间讲并行,说一个大任务拆开撒给几个 agent 同时上。当时留了个尾巴没展开:几个 agent 同时改代码,凭什么互不打架?这篇就接着说这个。
先说我自己撞过的墙。一个会话里 AI 自己派的那些 subagent 并行干活,其实还好——它自己会想办法隔离,不太用我操心。真正让我吃了亏的是另一种:我手动开了好几个 AI 终端,让它们同时改同一个项目。几只手伸进同一个工作目录,你写一下、我写一下,文件互相覆盖、状态错乱,干到一半发现谁也没干干净。
我要的,和一条边界
我要的不复杂:几只并行的手,各干各的,互不打架地改同一个项目。
但得先把一条边界划在前头——不是所有并行都要隔离。如果我派几路 agent 出去,一个查日志、一个分析原因、一个翻文档,这些活都是只读的,它们挤在同一个工作区里一点事没有,没必要给每个都开一块地。真正需要隔离的,是那些会动手改文件的并行。读可以共用,写必须分开——这是我后面所有做法的出发点。
走过的弯路:先 clone 了两份
想让两个 AI 同时改一个项目还互不影响,我最先想到的是最笨那招——物理隔离:把项目同时 clone 到两个不同的目录,一个 AI 改一份,井水不犯河水。
这招干净,是真干净,但很快就硌着我了:磁盘。我手头不少是前端 React + 后端 Python 的复合项目,依赖一大堆,单 clone 出来一份就好几个 G。clone 两份,磁盘直接被重复占掉一大块。更难受的是,只要我还想用这种”开两份”的方式干活,这两份就得一直摆在那儿占着,回收不掉。
后来才换上 git worktree。它的好处正好补在这个痛点上:几个工作区共享同一个 .git,不必把整个仓库连同历史复制好几遍;而且它是临时的,活干完、验完,立马就能回收掉,不像 clone 出来那份得长期养着。两种方式隔离的效果基本一致,但 worktree 不糟蹋磁盘。

两种并行,谁去开 worktree
具体到怎么用,得分清两种场景,它们开 worktree 的方式不一样。
一种是会话内的 subagent 并行。这个最省心:我只要跟 AI 提一句”并行执行”,它自己就会把任务拆开,需要隔离的时候自己去开 worktree,不用我交代。
另一种是我手动开多个终端并行。这个 AI 默认不知道——它不晓得这个目录此刻还有别的 AI 也在动。所以我必须明确告诉它:”这个项目目录已经有其他 AI 在改了,你工作时用 worktree 的方式。”点明了这一句,它才会新建一个 worktree 进去干,而不是直接在主工作区上动手。
一套跑顺的流程
隔离开只是第一步,活还得收得回来。我这套流程大致是这样:
按可拆分的任务维度切——和上一篇说的一样,挑松耦合的那些部分,各自切到一个 worktree 里去做。等都干完,由主控 agent 逐个把它们合回分支,合一个、验一个,遇到问题当场修;确认没问题了,再释放掉对应的 worktree。
万一两个 worktree 真动了同一个文件,就由主控 agent 出面 merge。但说实话这种情况不多——拆任务的时候本来就尽量让每块独立,要是两块耦合到会互相冲突,那压根就不该把它拆成两个任务。

踩过和要防的坑
最常见的坑是忘记清理。worktree 干完忘了删,它就一直杵在那儿占空间。不过这个不致命——功能早合进主干了,丢不了,也不会撞名、不会把 git 状态搞乱,顶多就是占点地方。
但”占点地方”也得治。我在全局军规里专门写了一条:worktree 里的活,验证、合并都没问题之后,要做清理。还加了个保险——清理之前先回头查一遍这个 worktree 上的 commits 是不是都已经合进主干了,免得手一快,把还没合的功能连窝端掉。AI 强一点的,这套识别和收尾它自己能做好;弱一点的就容易漏,得我盯着,或者回头专门叫主控 agent 来处理一遍。
到目前为止,我还没真把有用的 worktree 误删过——每次清理前那道”查 commits”的检查,基本兜住了。但如果是人手动去清,这道检查就没了,是有可能误删的,这点得自己留神。
别硬上,但有条线不松
也别把 worktree 当万能。任务很简单、就改几个文件、算不上一个完整功能,那开 worktree 纯属得不偿失,老老实实在一个工作区里改完就行。
但有一条线我是不松的:不在主干上直接干活。任何改动都先开新分支,验证无误,再走 PR 合回主干。worktree 也好、单分支也好,都是在给这条线服务——让主干始终是干净、可信的那一份。
最后说回 worktree 本身。可能有人会撇嘴:这不是 git 用了很多年的老功能吗,有什么好讲的。确实是老功能。但在 AI 并行编程这个新场景里,它实实在在解决了”几只手同时改一个项目”的真问题,能起的作用比从前大得多。算是老树开新枝吧。
下一篇我想聊个不太一样的话题:AI 这么能干,能替我们扛掉这么多活,可为什么人到头来还是会累?这中间是哪儿出了岔子。感兴趣的话评论区告诉我。
评论