工程与协作
工作树Worktree
你可能会问
工作树到底是什么?有了分支,为什么还需要它?
简单来说
让同一个仓库的多条分支各占一个独立目录,可以同时打开、并行修改。
一个目录来回切一条分支一个目录一个工位,还是各有工位
切换 · 处处收拾并行 · 互不打扰历史共用一份,现场各占一个
01 · 先这样理解
把抽象概念放进真实场景
让同一个仓库的多条分支各占一个独立目录,可以同时打开、并行修改。
换个角度想Worktree 像商场的多间试衣间:衣柜(仓库历史)只有一个,但每间试衣间各试各的搭配。不必把身上这套脱下来收好,才能去试下一套。
02 · 点击演示
你和 Agent 同时要改代码,一个目录够用吗?
突出显示的部分,就是当前概念在整条流程中负责的位置。
- 这一步不存在——
所有分支挤在同一个目录里轮流上git worktree add ../fix-login
仓库旁多出一个目录,检出 fix-login 分支
- 同一个目录
你重构改到一半Agent也要在这改 · 排队等两个目录 · 各站一条分支主目录你 · 继续重构../fix-loginAgent · 放手修 bug 想让 Agent 先上,得先收拾现场
藏起半成品、切分支,它改完再换回来
两边同时改、同时跑测试
文件互不可见,提交都进同一份历史
- 并行变串行两个任务轮流占用一个目录,切来切去藏起来的半成品,总有一次忘了取回合并后一删就净fix-login 合回主线,工作树目录移除历史都在仓库里,目录只是工位
1 / 4
Add · 为另一条分支开出新目录
03 · 放进真实任务
什么时候会遇到它
Agent 的隔离工位
让 Agent 在自己的工作树里干活,你的目录不会被它动一个字节。
多任务真并行
重构、修 bug、试方案各占一个目录,切换任务就是切换窗口。
新旧对照
两个目录分别检出改动前后,同一时刻左右并排跑起来对比。
04 · 想一想
用一个问题检查理解
你让两个 Agent 同时开工:一个修登录 bug,一个重构支付页。它们共用一个项目目录,会发生什么?
查看答案
两个 Agent 会互相覆盖对方正在改的文件,跑测试也会互相污染,结果谁都交不了活。给每个 Agent 各开一个工作树、各站一条分支:文件彻底隔离,历史仍是同一份,改完各自出 PR 合回主线。
最容易踩的坑
工作树是独立目录:依赖要各装一份、环境要各配一份,开工位有成本。用完就删,别攒一堆忘了哪条分支还没合。