用 using-git-worktrees 打造你的“平行宇宙工作台”

0 阅读7分钟

一个让程序员能同时出现在两个地方、干两件不同事情的“分身术”!

一、先讲个故事:厨房里的“平行宇宙”

想象你是位顶级厨师,正在给客人做佛跳墙(这是你的 main 分支,稳定生产环境)。

突然,老板冲进厨房:“快!研发一道麻辣佛跳墙新品,两小时后要试菜!”
—— 这就是你接到的新功能需求(feature/spicy-soup)。

你怎么办?

  • 笨办法:把现在的佛跳墙倒掉,重新做一锅麻辣版 → 客人掀桌(破坏主分支)
  • 普通办法:把灶台擦干净,在旁边另起炉灶 → 但厨房太小,调料罐、刀具、水池只有一个(这就是 git switch 切换分支的麻烦:你得不停清理工作区、重新安装依赖、重跑测试)
  • 聪明办法:向老板申请隔壁的空房间,搬一套全新的灶具、调料、餐具过去,独立做麻辣佛跳墙 → 做好后,再把新菜谱拿回主厨房合并

这个“隔壁空房间”就是 Git Worktree!
而 using-git-worktrees 这个技能,就是一个自动帮你找房间、搬设备、检查水电安全、最后告诉你“可以开工了” 的智能管家。


二、为什么需要这个“管家”?(痛点 + 原理)

普通 git branch 的痛点

git checkout -b feature/new-idea   # 创建并切换分支
npm install                        # 重新装依赖(好慢)
npm test                           # 重新跑测试(好烦)
# 做到一半,紧急要修 main 的 bug
git stash                          # 存一下
git checkout main                  # 切回去
# …修完 bug 再切回来,恢复 stash,继续…

这就像只有一个灶台,每次换菜都要把所有锅碗瓢盆搬走再搬回来,非常低效。

Worktree 的原理

Git Worktree 允许你从同一个仓库,在另一个目录里创建一个新的工作副本,并且这个副本可以独立切换分支、独立编译、独立运行测试。
它们共享同一个 .git 文件夹,但工作区是隔离的。

git worktree add ../myproject-hotfix -b hotfix/urgent
cd ../myproject-hotfix
# 现在你可以同时:
# 终端1:在原目录继续开发新功能
# 终端2:在这个新目录修紧急 bug

但手动创建 worktree 有几个坑

  • 把 worktree 放在哪里?要不要提交到仓库?
  • 怎么确保这个目录被 .gitignore 忽略,否则会被 git status 污染?
  • 创建完后,要不要自动装依赖、跑测试,确保基线干净?
  • 不同项目(Node/Rust/Python)要用不同命令,每次都手写很烦。

using-git-worktrees 技能就是把这些最佳实践自动化了。


三、管家怎么干活?(结合 Skill 文件拆解)

3.1 第一步:选房间 —— 目录选择策略

管家不会随便把房间开在你家厕所里。它有一套严格的优先级:

  1. 先看有没有现成的“工作台仓库”
    检查项目根目录下有没有 .worktrees/ 或 worktrees/ 文件夹。

    • 有 → 就用它(.worktrees 优先,因为点开头是隐藏目录,更干净)
  2. 再看主人的“装修说明书”CLAUDE.md 文件)
    如果里面写了类似 worktree directory: ~/my-worktrees,就照做。

  3. 以上都没有,就问主人

    • 选项 A:.worktrees/(项目内隐藏,不碍眼)
    • 选项 B:~/.config/superpowers/worktrees/<项目名>/(全局位置,适合多项目共用)

故事里:管家发现主厨房旁边有个空房间(.worktrees),马上征用。

3.2 第二步:安全验证 —— 防止“污染”主仓库

如果房间是项目内的(比如 .worktrees/),管家必须确认这个目录被 Git 忽略了
否则,你在这个目录里改的文件会被 git status 显示为“未跟踪”,万一不小心 git add . 就全提交上去了,灾难!

管家做法

git check-ignore -q .worktrees
  • 如果返回 0(被忽略)→ 安全
  • 如果返回 1(没被忽略)→ 立刻修复:把 .worktrees/ 加入 .gitignore 并提交这个改动

故事里:管家拿试电笔检查墙壁插座(git check-ignore),发现漏电,马上叫电工修好(加 .gitignore),然后再搬设备。

3.3 第三步:创建房间 + 开新分支

git worktree add .worktrees/feature-xyz -b feature/xyz
cd .worktrees/feature-xyz

管家会自动:

  • 用当前项目名(比如 myproject)和分支名组成路径
  • 创建一个新分支(不会影响你原来的工作区)

3.4 第四步:自动布置设备 —— 运行项目设置

根据项目类型,管家会自动装依赖:

项目类型检测文件自动运行
Node.jspackage.jsonnpm install
RustCargo.tomlcargo build
Pythonrequirements.txt 或 pyproject.tomlpip install / poetry install
Gogo.modgo mod download

故事里:管家知道你要做麻辣佛跳墙,自动搬来了四川花椒、郫县豆瓣、高压锅(npm install),全部摆好。

3.5 第五步:试菜 —— 验证测试基线

管家会运行测试命令(npm test / cargo test / pytest / go test),确保新房间的菜品质量一开始就是合格的

  • 如果测试通过 → 报告“可以开工”
  • 如果测试失败 → 报告失败详情,问你要不要继续(可能是原项目本身就有 bug,不能怪新房间)

3.6 第六步:告诉你房间地址

管家最后说:

Worktree ready at /Users/chef/myproject/.worktrees/feature/spicy-soup
Tests passing (47 tests, 0 failures)
Ready to implement spicy soup feature

你只需要 cd 进去,然后像正常项目一样开发即可。  原来的主目录完全不受影响,可以继续做佛跳墙。


四、完整时序图(用 Mermaid 画给你看)

下面这张图展示了“你 - 管家 - Git - 项目”之间的交互过程:

“你 - 管家 - Git - 项目”之间的交互过程.png


五、最佳用法

✅ 什么时候用这个技能?

  • 你准备实现一个新功能,且已有设计方案(比如 brainstorm 技能结束)
  • 你要并行修多个 bug,不想频繁切换分支
  • 你要做实验性改动,怕把主分支搞乱
  • 你被 subagent-driven-development 或 executing-plans 技能调用时(它们会强制要求先用 worktree)

✅ 三个“不要”

  1. 不要手动创建 worktree 然后忘了加 .gitignore → 管家自动搞定
  2. 不要在 worktree 里直接改主分支 → 管家每次创建新分支
  3. 不要跳过测试基线验证 → 管家强制跑测试,避免把老 bug 当新 bug

✅ 两个“总是”

  • 总是用管家推荐的目录(.worktrees/ 或全局目录),保持团队一致
  • 工作完成后,用 finishing-a-development-branch 技能清理(它会帮你合并、删除 worktree)

✅ 实际命令 vs 管家自动化

手动操作管家自动做
mkdir .worktrees自动检测/询问
echo ".worktrees/" >> .gitignore自动检查并修复
git worktree add ... -b ...自动执行
npm install自动检测并运行
npm test自动运行并报告
记住路径自动告诉你

六、最后的一个真实场景模拟

:我想给电商项目加一个“积分兑换”功能。
管家:好嘞,我用 using-git-worktrees 技能。
(管家检查发现已有 .worktrees/ 且被忽略)
(创建 .worktrees/feature/points-exchange
(检测到 package.json,运行 npm install
(运行 npm test → 48 个测试全部通过)
管家:工作台已准备好,在 /home/you/shop/.worktrees/feature/points-exchange,测试全绿,可以开始写积分兑换逻辑了。
:太棒了!然后你打开另一个终端,继续修主分支的 bug,两边同时进行,互不干扰。


七、总结

using-git-worktrees 就是一个帮你“一键创建平行开发宇宙”的智能助手。
它遵循“先找现成房间 → 检查安全 → 开新分支 → 自动装依赖 → 跑测试 → 报告位置”的黄金流程,让你彻底告别 git stash 和切换分支的痛苦。

记住:你不是在学一个新命令,而是在召唤一个管家。  以后当你需要隔离开发时,直接说:“管家,给我一个新工作台!” 它就会按这套魔法流程帮你搞定一切。

现在,去试试你的第一个平行宇宙吧! 🚀