5步跑通Git Worktrees:Superpowers并行开发完整实操
【免费下载链接】superpowersAn agentic skills framework & software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowers
同时改三个功能:认证重构没提交完,线上紧急修复等着拉下来,实验分支还搁在中间。终端里stash叠了七层,每次切换分支都在离翻车更近一步。这就是并行开发里最典型的分支切换冲突。Git Worktrees 本来就是为这个场景设计的,而 Superpowers 把裸命令变成了一套能直接跑通的流程保障。
🎯 它解决什么问题
Superpowers 在 Git 原生 worktree 能力之上,叠了一条完整的"工作区保障链":在同一个仓库中同时打开多个完全隔离的工作目录,自动定位目录、校验忽略规则、按项目类型装依赖、确认测试基线全绿,然后才把可用工作区交到你手上。
🧠 心智模型:Git Worktrees 到底在做什么
worktree 就像同一栋房子的多个房间:地基(.git对象库)是共享的,每个房间(工作目录加分支)各自独立,互不串味。
这里要分清两层。一层是Git Worktrees提供的原生能力,一条git worktree add就能开出新房间。另一层是 Superpowers 叠加的流程保障:开房前先确认你是不是已经站在某个房间里(避免嵌套创建),确认选址符合项目惯例,确认房间不会被误登记进"主房产",水电验收(基线测试)合格才让你入住。原生能力给钥匙,Superpowers 管流程。
🚀 实操路径:Superpowers工作树5步跑通
完整流程定义在skills/using-git-worktrees/SKILL.md。本地还没有项目的话,先取一份:
git clone https://gitcode.com/GitHub_Trending/su/superpowers1. 检测与准备
动手前先判断现状——你是不是已经处在隔离工作区里?
GIT_DIR=$(cd "$(git rev-parse --git-dir)" && pwd -P) GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" && pwd -P)为什么执行:这两条路径对比,能区分你在主仓库还是在已关联的工作树。避免在已隔离的环境上再套一层。
2. 创建工作树
如果没有平台原生工具,就手工用 git 建。目录优先级是:你明确声明的偏好 > 项目里已有的.worktrees或worktrees目录 > 默认.worktrees/。创建前先验证忽略状态:
git check-ignore -q .worktrees 2>/dev/null || git check-ignore -q worktrees为什么执行:工作树目录若不在忽略清单里,整个隔离工作区会被提交进仓库。这是最容易被漏掉的一步。
git worktree add .worktrees/auth -b feature/auth cd .worktrees/auth为什么执行:-b顺手开出新分支,此后所有改动都发生在这个房间里。
3. 自动检测项目类型并安装依赖
根据根目录的标记文件,自动执行对应安装命令:
[ -f package.json ] && npm install [ -f Cargo.toml ] && cargo build [ -f requirements.txt ] && pip install -r requirements.txt [ -f go.mod ] && go mod download为什么执行:新目录没有依赖缓存,装完才能进入可开发状态;没有对应文件就静默跳过,不报错。
4. 基线测试不通过时怎么处理
先跑一遍测试:
npm test # 或 cargo test / pytest / go test ./...为什么执行:确认起点是干净的。只有这里全绿,之后"某测试挂了"才能归因到你的代码,而不是历史遗留问题。若基线失败,流程会停下来问你是否继续,而不是默认往下走。
5. 就绪报告
一切就绪后你会看到这样的汇报:
Worktree ready at /path/to/.worktrees/auth Tests passing (47 tests, 0 failures) Ready to implement auth feature
🧭 决策指南:遇到不同情况怎么办
- 已经处在关联工作树里 → 跳过创建,直接进依赖安装,不嵌套
- 你在 git submodule 里 → 按普通仓库处理,检测命令会替你区分
.worktrees/和worktrees/都存在 → 优先用隐藏的.worktrees/- 两个目录都不存在 → 查
CLAUDE.md声明的偏好,没有就默认.worktrees/ - 目录未被忽略 → 先加进
.gitignore并提交,再创建 - 项目没有任何依赖文件 → 跳过安装,直接跑基线测试
- 基线测试失败 → 报告失败,等你拍板,不自行继续
🔍 完整走查:从创建到工作树清理
我开一个新会话,说要开发认证功能。Superpowers 第一句话是:"I'm using the using-git-worktrees skill to set up an isolated workspace."
它先跑了前面那两条对比命令,确认我在主仓库而非现成工作树。CLAUDE.md里没有声明偏好,于是按优先级找到项目里已存在的.worktrees/。创建前,它自动执行git check-ignore确认该目录已被忽略——如果没被忽略,这一步会自动补规则并提交。
接着执行git worktree add .worktrees/auth -b feature/auth,检测到根目录有package.json,于是跑npm install,再跑npm test:47 个测试全过,汇报就绪。
我在里面实现了认证功能并补了测试。全绿之后切到finishing-a-development-branch技能:它重跑完整测试,问我选本地合并、发 PR 还是保留分支。我选了本地合并,合并验证通过后,它自动完成工作树清理:
git worktree list git worktree remove .worktrees/auth git worktree prune为什么执行:先用 list 确认目标,remove 删掉目录与登记,prune 清扫历史残留,下次不会被幽灵记录挡住。
⚠️ 踩坑复盘:四个最容易翻车的瞬间
1. 跳过忽略验证
现象:工作树文件突然出现在git status里,仓库被污染。根因:目录没进忽略清单,新文件被一并跟踪。Superpowers 的防护:把git check-ignore设为创建前的必经步骤,未忽略就先补规则并提交。
2. 假设目录位置
现象:有人用.worktrees/,有人用worktrees/,结构混乱,忽略规则只覆盖其中一个。根因:凭感觉选目录,没看已有惯例。Superpowers 的防护:优先级固定为"声明偏好 > 已有目录 > 默认值",两个都在时用隐藏目录。
3. 带着失败的基线继续
现象:后面测试挂了,分不清是新 bug 还是历史问题。根因:起点就是脏的,归因失去参照。Superpowers 的防护:基线失败时只报告并询问是否继续,把决定权交还给你。
4. 硬编码构建命令
现象:在 Node 项目上顺风顺水的流程,到了 Rust 项目npm install直接报错。根因:命令按单一项目的经验写死,没有检测环节。Superpowers 的防护:按项目标记文件检测对应命令,检测不到就跳过。
🧩 生态位:它在流程里的位置
brainstorming 的设计获批后,由本技能为实现准备隔离开发环境;中间的 executing-plans 和 subagent-driven-development 在工作树内完成任务;收工时由 finishing-a-development-branch 负责合并与工作树清理。四个技能形成"准备—实现—收尾"的上下游关系。
📚 延伸学习
- skills/using-git-worktrees/SKILL.md:完整创建工作树流程,含所有分支与回退路径
- skills/finishing-a-development-branch/SKILL.md:开发结束后的合并、PR 与清理规则
- tests/claude-code/test-worktree-native-preference.sh:验证代理优先选原生工具,避免产生看不见的幽灵状态
- tests/claude-code/test-worktree-path-policy.sh:回归检查,确保新工作树落在项目本地目录
- docs/porting-to-a-new-harness.md:讲解把这套流程移植到其他执行环境的思路
下次再同时改三个功能时,stash 大概只会剩一层——或者干脆为零。那七层叠层,变成几个各过各的隔离目录,切换分支从负担回到了它本来的位置。
【免费下载链接】superpowersAn agentic skills framework & software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowers
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考