name: git-worktree description: 这个技能管理Git工作树,用于隔离的并行开发。它通过简单的交互界面处理创建、列出、切换和清理工作树,遵循KISS原则。
Git工作树管理器
这个技能提供了一个统一的接口,用于在整个开发工作流中管理Git工作树。无论您是在隔离环境中审查PR还是在并行处理功能,这个技能都能处理所有复杂性。
这个技能做什么
- 创建工作树:从主分支创建,带有清晰的分支名称
- 列出工作树:显示当前状态
- 切换工作树:用于并行工作
- 清理已完成的工作树:自动执行
- 交互式确认:在每个步骤中提供确认
- 自动管理.gitignore:为工作树目录管理
- 自动复制.env文件:从主仓库复制到新工作树
关键:始终使用管理器脚本
切勿直接调用git worktree add。 始终使用worktree-manager.sh脚本。
该脚本处理原始git命令不处理的关键设置:
- 从主仓库复制.env、.env.local、.env.test等文件
- 确保.worktrees在.gitignore中
- 创建一致的目录结构
# ✅ 正确 - 始终使用脚本
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh create 功能名称
# ❌ 错误 - 切勿直接执行此操作
git worktree add .worktrees/功能名称 -b 功能名称 main
何时使用此技能
在以下场景中使用此技能:
- 代码审查(
/workflows:review):如果不在目标分支(PR分支或请求的分支)上,提供工作树进行隔离审查 - 功能工作(
/workflows:work):始终询问用户是否想要并行工作树或实时分支工作 - 并行开发:当同时处理多个功能时
- 清理:在完成工作树中的工作后
如何使用
在Claude代码工作流中
该技能会自动从/workflows:review和/workflows:work命令调用:
# 对于审查:如果不在PR分支上,提供工作树
# 对于工作:始终询问 - 新分支还是工作树?
手动使用
您也可以从bash直接调用技能:
# 创建新工作树(自动复制.env文件)
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh create 功能登录
# 列出所有工作树
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh list
# 切换到工作树
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh switch 功能登录
# 复制.env文件到现有工作树(如果未复制)
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh copy-env 功能登录
# 清理已完成的工作树
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh cleanup
命令
create <分支名称> [来源分支]
使用给定的分支名称创建新工作树。
选项:
分支名称(必需):新分支和工作树的名称来源分支(可选):基于的分支(默认为main)
示例:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh create 功能登录
发生什么:
- 检查工作树是否已存在
- 从远程更新基础分支
- 创建新工作树和分支
- 从主仓库复制所有.env文件(.env、.env.local、.env.test等)
- 显示cd到工作树的路径
list 或 ls
列出所有可用工作树及其分支和当前状态。
示例:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh list
输出显示:
- 工作树名称
- 分支名称
- 哪个是当前(用✓标记)
- 主仓库状态
switch <名称> 或 go <名称>
切换到现有工作树并cd进入它。
示例:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh switch 功能登录
可选:
- 如果未提供名称,列出可用工作树并提示选择
cleanup 或 clean
交互式清理非活动工作树,带有确认。
示例:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh cleanup
发生什么:
- 列出所有非活动工作树
- 请求确认
- 移除选定的工作树
- 清理空目录
工作流示例
使用工作树进行代码审查
# Claude代码识别您不在PR分支上
# 提供:“使用工作树进行隔离审查?(y/n)”
# 您回应:yes
# 脚本运行(自动复制.env文件):
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh create pr-123-功能名称
# 您现在处于隔离工作树中进行审查,带有所有环境变量
cd .worktrees/pr-123-功能名称
# 审查后,返回主仓库:
cd ../..
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh cleanup
并行功能开发
# 对于第一个功能(复制.env文件):
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh create 功能登录
# 后来,开始第二个功能(也复制.env文件):
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh create 功能通知
# 列出您拥有的内容:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh list
# 根据需要切换:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh switch 功能登录
# 完成后返回主仓库并清理:
cd .
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh cleanup
关键设计原则
KISS(保持简单)
- 一个管理器脚本处理所有工作树操作
- 简单命令带有合理的默认值
- 交互式提示防止意外操作
- 清晰命名直接使用分支名称
固执己见的默认值
- 工作树始终从主分支创建(除非指定)
- 工作树存储在**.worktrees/**目录中
- 分支名称成为工作树名称
- .gitignore自动管理
安全第一
- 创建前确认工作树
- 清理前确认以防止意外移除
- 不会移除当前工作树
- 清晰的错误消息处理问题
与工作流集成
/workflows:review
而不是总是创建工作树:
1. 检查当前分支
2. 如果已经在目标分支(PR分支或请求的分支)上 → 留在那里,不需要工作树
3. 如果不同于审查目标的分支 → 提供工作树:
“使用工作树进行隔离审查?(y/n)”
- yes → 调用git-worktree技能
- no → 在当前分支上继续PR差异
/workflows:work
总是提供选择:
1. 询问:“您想如何工作?
1. 当前工作树上的新分支(实时工作)
2. 工作树(并行工作)”
2. 如果选择1 → 正常创建新分支
3. 如果选择2 → 调用git-worktree技能从主分支创建
故障排除
“工作树已存在”
如果看到此消息,脚本会询问是否要切换到它。
“无法移除工作树:它是当前工作树”
首先从工作树中切换出来(到主仓库),然后清理:
cd $(git rev-parse --show-toplevel)
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh cleanup
在工作树中迷路?
查看您的位置:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh list
工作树中缺少.env文件?
如果工作树创建时没有.env文件(例如,通过原始git worktree add),复制它们:
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh copy-env 功能名称
导航回主仓库:
cd $(git rev-parse --show-toplevel)
技术细节
目录结构
.worktrees/
├── 功能登录/ # 工作树 1
│ ├── .git
│ ├── app/
│ └── ...
├── 功能通知/ # 工作树 2
│ ├── .git
│ ├── app/
│ └── ...
└── ...
.gitignore(更新以包含.worktrees)
工作原理
- 使用
git worktree add进行隔离环境 - 每个工作树有自己的分支
- 一个工作树中的更改不影响其他
- 与主仓库共享git历史
- 可以从任何工作树推送
性能
- 工作树轻量(只是文件系统链接)
- 没有仓库重复
- 共享git对象以提高效率
- 比克隆或暂存/切换快得多