改 feature 改到一半,突然要 hotfix。
git stash存了一堆不敢 pop,git clone又要等半天装依赖——你一定经历过这种痛苦。
AI 时代,为什么 Worktree 变得更重要了?
以前 worktree 的价值是"人在写 feature A 的时候,能随时切去 hotfix B"。但到了 AI 时代,这件事变得更有意思了——
你可以让多个 Code Agent 同时在不同的 worktree 里开发不同的功能。
| |
每个 worktree 是独立的工作区,Agent 之间互不干扰。你只需要开几个终端窗口,每个窗口里让一个 Agent 对着各自的 worktree 干活,最后分别提 PR、review、merge。
以前一个人串行做三件事,现在三个 Agent 并行,你只负责 review。 Worktree 从"方便切分支"变成了 AI 并行开发的基础设施。
但前提是——你得先搞定 worktree 本身。大型 monorepo 里切分支的真实代价:
node_modules+vendor/bundle动辄几个 GB,重装一次几分钟起步config/database.yml、master.key、.env不在版本控制里,切完分支全没了- 不同分支 migration 状态不同,切一次可能要
db:migrate+db:rollback git stash堆了十几条,哪个是哪个?不敢碰
你真正想要的是:多个分支同时打开,各干各的。
Git Worktree 就干这件事——一个 .git,多个工作目录,每个目录锁定一个分支。不用多次 clone,不用 stash,真正的并行开发。
| |
所有 worktree 共享同一份 git 历史,fetch、push 在任何一个目录里做都行。但每个目录有独立的工作区,互不干扰。
30 秒上手
| |
但是,大项目的 worktree 不是 checkout 完就能用
这是教程不会告诉你的。裸创建的 worktree 缺了一大堆 gitignored 的东西:database.yml、master.key、.env、vendor/bundle、node_modules……
你不会想在每个 worktree 里重新 bundle install + npm install 吧?
解法:用 symlink 把主 repo 的配置和依赖链接过去。 但手写脚本要硬编码路径、不好维护、换项目要重写。
所以我做了 gw —— 一个轻量的 Git Worktree 管理工具,解决这个问题。
gw:一步到位的 Worktree 管理
安装
| |
初始化项目
| |
.gw/links 是纯文本,一行一个路径:
| |
日常使用
| |
gw add 一条命令搞定创建 + 链接,进去就能 rails server。
数据库怎么办?
代码可以并行,但数据库只有一个。三种策略:
- DB Dump / Load(推荐):主 repo
make dbdump,worktree 里make dbload+db:migrate - 独立数据库:worktree 里用不同的
database.yml,指向myapp_dev_OA_12345 - 只看代码:不启动服务器,只做 review / cherry-pick,不用管数据库
什么时候该用?
| 场景 | 方案 |
|---|---|
| 紧急 hotfix,手上有未完成的工作 | ✅ worktree |
| 长期同时开发两个 feature | ✅ worktree |
| Code review 想在本地跑起来 | ✅ worktree |
| 临时看另一个分支的代码 | git stash + checkout |
| 只是对比文件差异 | git diff |