name: 使用Git工作树 description: Git工作树基于工作树的隔离工作空间,用于并行或非破坏性开发。当工作必须在不修改或干扰当前工作树的情况下进行时使用。
使用Git工作树
概览
Git工作树创建共享同一仓库的隔离工作空间,允许同时在多个分支上工作而无需切换。
核心原则: 系统目录选择 + 安全验证 = 可靠的隔离。
开始时宣布: “我正在使用使用Git工作树技能设置隔离工作空间。”
目录选择流程
按照此优先级顺序:
1. 检查现有目录
# 按优先级顺序检查
ls -d .worktrees 2>/dev/null # 首选(隐藏)
ls -d worktrees 2>/dev/null # 替代
如果找到: 使用该目录。如果两个都存在,.worktrees胜出。
2. 检查CLAUDE.md
grep -i "worktree.*director" CLAUDE.md 2>/dev/null
如果指定了偏好: 不询问直接使用。
3. 询问用户
如果没有目录存在且没有CLAUDE.md偏好:
没有找到工作树目录。我应该在哪里创建工作树?
1. .worktrees/ (项目本地,隐藏)
2. ~/.config/superpowers/worktrees/<项目名称>/ (全局位置)
你更喜欢哪一个?
安全验证
对于项目本地目录(.worktrees或worktrees)
必须在创建工作树之前验证.gitignore:
# 检查目录模式是否在.gitignore中
grep -q "^\.worktrees/$" .gitignore || grep -q "^worktrees/$" .gitignore
如果不在.gitignore中:
根据Jesse的规则"立即修复破损事物":
- 向.gitignore添加适当的行
- 提交更改
- 继续创建工作树
为什么至关重要: 防止不小心将工作树内容提交到仓库。
对于全局目录(~/.config/superpowers/worktrees)
不需要.gitignore验证 - 完全在项目之外。
创建步骤
1. 检测项目名称
project=$(basename "$(git rev-parse --show-toplevel)")
2. 创建工作树
# 确定完整路径
case $LOCATION in
.worktrees|worktrees)
path="$LOCATION/$BRANCH_NAME"
;;
~/.config/superpowers/worktrees/*)
path="~/.config/superpowers/worktrees/$project/$BRANCH_NAME"
;;
esac
# 使用新分支创建工作树
git worktree add "$path" -b "$BRANCH_NAME"
cd "$path"
3. 运行项目设置
自动检测并运行适当的设置:
# Node.js
if [ -f package.json ]; then npm install; fi
# Rust
if [ -f Cargo.toml ]; then cargo build; fi
# Python
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ -f pyproject.toml ]; then poetry install; fi
# Go
if [ -f go.mod ]; then go mod download; fi
4. 验证清洁基线
运行测试以确保工作树从清洁状态开始:
# 示例 - 使用项目适当的命令
npm test
cargo test
pytest
go test ./...
如果测试失败: 报告失败,询问是否继续或调查。
如果测试通过: 报告准备就绪。
5. 报告位置
工作树准备就绪于 <完整路径>
测试通过(<N> 测试,0 失败)
准备实现 <功能名称>
快速参考
| 情况 | 行动 |
|---|---|
.worktrees/ 存在 |
使用它(验证.gitignore) |
worktrees/ 存在 |
使用它(验证.gitignore) |
| 两者都存在 | 使用 .worktrees/ |
| 两者都不存在 | 检查CLAUDE.md → 询问用户 |
| 目录不在.gitignore中 | 立即添加 + 提交 |
| 基线测试失败 | 报告失败 + 询问 |
| 没有package.json/Cargo.toml | 跳过依赖安装 |
常见错误
跳过.gitignore验证
- 问题: 工作树内容被跟踪,污染git状态
- 修复: 创建项目本地工作树前始终grep .gitignore
假设目录位置
- 问题: 创建不一致性,违反项目约定
- 修复: 遵循优先级:现有 > CLAUDE.md > 询问
测试失败时继续进行
- 问题: 无法区分新错误和现有问题
- 修复: 报告失败,获得明确许可后继续
硬编码设置命令
- 问题: 在使用不同工具的项目中中断
- 修复: 从项目文件(package.json等)自动检测
示例工作流
你:我正在使用使用Git工作树技能设置隔离工作空间。
[检查.worktrees/ - 存在]
[验证.gitignore - 包含.worktrees/]
[创建工作树:git worktree add .worktrees/auth -b feature/auth]
[运行npm install]
[运行npm test - 47通过]
工作树准备就绪于 /Users/jesse/myproject/.worktrees/auth
测试通过(47测试,0失败)
准备实现auth功能
红旗
绝不:
- 无.gitignore验证创建工作树(项目本地)
- 跳过基线测试验证
- 测试失败未经询问继续
- 假设目录位置时含糊不清
- 跳过CLAUDE.md检查
始终:
- 遵循目录优先级:现有 > CLAUDE.md > 询问
- 验证项目本地的.gitignore
- 自动检测并运行项目设置
- 验证清洁测试基线
集成
由以下调用:
- 头脑风暴 Skillc(第4阶段) - 设计获批后实施时必需
- 任何需要隔离工作空间的技能
与以下配对:
- 完成开发分支 Skill - 工作完成后清理必需
- 执行计划或子代理驱动开发 Skill - 工作在此工作树中进行