两个AI同时改项目,怎么不冲突?一口气讲懂 Git Worktree
【开场】
如果你用过本地agent软件,可能见过聊天框旁边这个像树杈一样的图标。
它背后的功能叫Worktree,中文叫工作树。
没见过也没关系,因为它解决的问题,你可能也遇到过:
一个任务还在跑,我又有了新想法;
或者功能改到一半,突然需要修复紧急漏洞——无论先做哪个任务,另一个任务都会受到影响。
这两个问题的根源其实一样:同一个项目,只有一个工作位置。
而Git这个管理本地项目存档的工具,其实早就有了解决方法。它就叫Worktree,中文意思是工作树。
过去,Git这套工作流更多是在协调程序员之间的合作。
到了AI时代,协作对象又从“人与人”,扩展到了“人与多个AI”。
但核心问题没有变:怎么把不同任务分开推进,再把成果安全地合回来。
所以这期,我就讲清楚,怎么通过worktree来解决这些问题,并且数倍的提高你的ai coding效率。
同时,我也会用大白话,讲清楚GitHub团队协作中常见的几个术语。
【Worktree】
先接着刚才的第一个问题。
一个任务还在跑,我又有了新想法,为什么不能直接再开一个聊天去改呢?
我们来想象一下,现在你已经用AI做出了一个能正常倒计时的番茄钟。
一号AI正在当前的项目文件夹里,开发“暂停功能”。
这个时候,我马上又想让二号AI开发“自定义专注时长”。
如果我同时开了两个聊天,并且它们还指向同一个文件夹。
那它们就可能同时修改同一个文件夹里的代码,甚至不断互相覆盖。
绝对是灾难现场。
这时最简单粗暴的解法是啥?
就是新建一个工作区,让第二个号AI在新工作区直接开始干活。
这个功能就叫Worktree,中文翻译就是工作树。
它的作用是在同一个项目里,增加一个独立的工作文件夹。
两个工作区属于同一个Git项目,共享同一份已经改动历史,但各自拥有独立的代码文件,改动互不影响。
这样,两个任务就可以安全地同时推进了。
效率可以说是直接提升了一倍。
当然,Token消耗也快一倍。
你还可以把它想象成搭积木。
现在,工作台上有一间已经搭好的正式房子。
你想加长右侧的墙,另一个人想在同一面墙上增加一扇窗户。
但桌上只有这一套积木。
两双手同时伸过来,很容易碰在一起打架。
这个时候,最简单的解法就是:直接复制出第二张工作台与屋子。
然后一个人改墙,一个人开窗。各干各的,暂时互不干扰。
这个新复制出来的工作台,你就可以理解成Worktree。
所以Worktree提高效率的方式,不是让AI突然写得更快。
而是增加独立的工作位置,让多个任务可以同时进行。
现在听懂了请在弹幕上扣个1.
但改归改,我们还没有把改的成果合并到一起。
【Branch、PR、Conflict、Merge】
现在,两个AI正在不同的Worktree里同时工作了。
而不同的改动通常会放在不同的Branch里。
上期我们讲过Branch是什么。它就是分支,即项目里一条单独的改动路线。
番茄钟目前运行的正式版本,所对应的branch,也叫作main,就是指项目的主线。
开发新功能时,我们不会直接去改main,万一改坏了比较麻烦。
我们会从main出发,另外开一条Branch。
比如你的一号AI开发“暂停功能”,就使用了一条Branch。
而第二个AI则开发“自定义专注时长”,在另一个工作台(Worktree)里也使用了另一条Branch。
这样,两个AI既有各自的工作文件夹,也有各自的改动路线。
等“暂停功能”做好并同步到github以后,下一步就是向主线main发起一个合并申请。
这就是程序员常说的Pull Request,简称PR。
它是在说:
“这个功能已经做好了,请检查一下,看看能不能放进主线里。”
当然要明确一下,这个PR,它不是Git本身的功能,而是GitHub提供的一种协作流程。
在PR中,你可以查看AI改了哪些代码,测试功能是否正常,并且判断两边代码是否冲突。
如果两边的修改不能兼容,就会出现——Conflict,冲突。
它的出现意味着代码打架了,你得调整一下代码的冲突位置。
等解决Conflict以后,就可以进行Merge,也就是合并。
就是把这条Branch里的新开发成果,正式放进main。
而另一个工作台(worktree)的AI二号完成以后,也会发起PR。
但此时的main已经加入了“暂停功能”。如果两个功能改到了同一段代码,而且不能直接兼容。
这时,功能二的PR就可能出现Conflict。
所以,同样,你得处理冲突代码后才能把功能2也合并进来。
好了,两个新功能添加成功了!
再用回刚才积木来举一次例子,
你在改侧面的墙,另一个人却在同一面墙上开窗。
分开搭的时候互不影响,但把两个方案放回正式房子时,就不能直接叠在一起了。
这就会Conflict。
Git会先停下来,让你决定墙怎么移、窗放在哪里。
决定好最终的形态以后,才能继续Merge。
这样可以避免互相冲突的代码被直接合进main。
好了稍微总结下,简单地讲:并行开发时,所经历的完整流程就是:
- 在工作台A的一号AI发起 PR,检查与 main 是否冲突,confilct;通过后就 Merge。
- main 因此发生变化。
- 在工作台B的二号AI再与最新的 main 比较,重新检查 Conflict。
- 如果冲突就先解决;没有冲突就可以 Merge回主线了。
这就是,并行开发时,涉及到的几个关键概念。
好了这期的内容就到这里,如果觉得对你有帮助请给主播点个赞吧~
【结尾】
当一个人可以同时指挥多个AI时,效率的关键就不只是AI写得快不快, 而是任务能不能分开、过程能不能检查、成果能不能安全合并。
Worktree 表面上只是多开了一个文件夹,背后其实是在为你的AI们搭建一个虚拟工位。
让每个 AI Agent 在自己的工位上干活,互不打扰,最后再由你 来做最后的检查与合并。
以前,我们需要Git来协调人与人,
未来,我们需要Git来协调人与AI
们。