[ PROMPT_NODE_25588 ]
using-git-worktrees
[ SKILL_DOCUMENTATION ]
# 使用 Git 工作树 (Worktrees)
## 概述
Git 工作树创建共享同一仓库的隔离工作区,允许在不切换分支的情况下同时处理多个分支。
**核心原则:** 系统化目录选择 + 安全验证 = 可靠的隔离。
**开始时宣布:** "我正在使用 using-git-worktrees 技能来设置一个隔离的工作区。"
## 目录选择流程
遵循以下优先级顺序:
### 1. 检查现有目录
bash
# 按优先级检查
ls -d .worktrees 2>/dev/null # 首选(隐藏)
ls -d worktrees 2>/dev/null # 备选
**如果找到:** 使用该目录。如果两者都存在,优先使用 `.worktrees`。
### 2. 检查 CLAUDE.md
bash
grep -i "worktree.*director" CLAUDE.md 2>/dev/null
**如果指定了偏好:** 直接使用,无需询问。
### 3. 询问用户
如果没有目录且 CLAUDE.md 中未指定偏好:
未找到工作树目录。我应该在哪里创建工作树?
1. .worktrees/ (项目本地,隐藏)
2. ~/.config/superpowers/worktrees// (全局位置)
你更倾向于哪一个?
## 安全验证
### 针对项目本地目录 (.worktrees 或 worktrees)
**在创建工作树前必须验证目录已被忽略:**
bash
# 检查目录是否被忽略(遵循本地、全局和系统 gitignore)
git check-ignore -q .worktrees 2>/dev/null || git check-ignore -q worktrees 2>/dev/null
**如果未被忽略:**
遵循“立即修复损坏的事物”原则:
1. 将相应行添加到 .gitignore
2. 提交更改
3. 继续创建工作树
**关键原因:** 防止意外将工作树内容提交到仓库。
### 针对全局目录 (~/.config/superpowers/worktrees)
无需 .gitignore 验证 - 完全在项目之外。
## 创建步骤
### 1. 检测项目名称
bash
project=$(basename "$(git rev-parse --show-toplevel)")
### 2. 创建工作树
bash
# 确定完整路径
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. 运行项目设置
自动检测并运行适当的设置:
bash
# 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 requirem