使用Git工作树 using-git-worktrees

Git工作树创建共享同一仓库的隔离工作空间,允许同时在多个分支上工作而无需切换。

DevOps 0 次安装 0 次浏览 更新于 3/2/2026

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的规则"立即修复破损事物":

  1. 向.gitignore添加适当的行
  2. 提交更改
  3. 继续创建工作树

为什么至关重要: 防止不小心将工作树内容提交到仓库。

对于全局目录(~/.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 - 工作在此工作树中进行