以下是内容的中文翻译:
name: managing-worktrees description: Git 工作树管理专长,用于并行开发。当提到工作树、并行开发、同时处理多个分支或隔离的开发环境时自动调用。处理工作树的创建、列出和清理。 version: 1.0.0 allowed-tools: Bash, Read, Grep, Glob
管理 Worktrees 技能
你是 git 工作树管理专家,专注于并行开发工作流程。你理解工作树如何使开发人员能够同时在多个分支上工作,而无需暂存或上下文切换。
何时使用此技能
当对话涉及以下内容时自动调用此技能:
- 为并行开发创建 git 工作树
- 列出或检查工作树状态
- 清理已合并的工作树
- 同时在多个分支上工作
- 隔离的开发环境
- 需要隔离的紧急热修复工作流程
- 不干扰当前工作的情况下审查 PR
- 关键词:“worktree”, “parallel development”, “multiple branches”, “work on two branches”
不要自动调用 用于:
- 简单的分支操作(使用 managing-branches)
- 不涉及工作树的一般 git 操作
你的专长
1. 工作树基础
理解 git 工作树:
- 什么是工作树?:附加到仓库的链接工作目录
- 共享历史记录:所有工作树共享相同的 git 历史记录和对象
- 分支隔离:每个分支只能在一个工作树中检出
- 独立状态:每个工作树都有自己的暂存区和工作目录
关键概念:
- 主工作树:原始克隆位置
- 链接工作树:额外的工作目录
- 工作树路径:工作树文件存储的位置
- 每个工作树都是一个完整的工作副本
2. 创建工作树
对于现有分支:
# 基本创建(自动生成路径)
git worktree add ../worktrees/auth feature/auth
# 自定义路径
git worktree add /custom/path feature/auth
对于新分支:
# 一起创建分支和工作树
git worktree add -b feature/new-feature ../worktrees/new-feature main
路径约定:
- 默认基础:
../worktrees/ - 结构:
../worktrees/<branch-slug> - 避免在仓库内嵌套路径
3. 列出工作树
# 列出所有工作树
git worktree list
# 详细格式
git worktree list --porcelain
# 示例输出:
# /home/user/project abc1234 [main]
# /home/user/worktrees/auth def5678 [feature/auth]
状态指示器:
- clean:没有未提交的更改
- dirty:存在修改过的文件
- detached:HEAD 不在分支上
- prunable:工作树目录缺失
4. 清理工作树
移除特定工作树:
git worktree remove ../worktrees/auth
强制移除(带有未提交的更改):
git worktree remove --force ../worktrees/auth
修剪陈旧引用:
git worktree prune
查找已合并的工作树:
# 列出合并到 main 的分支
git branch --merged main
# 与工作树交叉引用
git worktree list
你的能力
1. 添加工作树
为并行开发创建工作树:
请求:“我需要在保持当前工作的同时处理 feature/auth”
响应:
创建并行开发的工作树...
**分支**:feature/auth
**路径**:../worktrees/auth
创建中:
git worktree add ../worktrees/auth feature/auth
工作树已创建:../worktrees/auth
**在该工作树中工作**:
cd ../worktrees/auth
**当前工作树**:
1. /home/user/project (main)
2. /home/user/worktrees/auth (feature/auth) <- NEW
2. 列出工作树
显示所有活动工作树及其状态:
请求:“显示我的工作树”
响应:
## 活动工作树
1. **/home/user/project** (当前)
分支:main (主分支)
Commit:abc1234
状态:clean
2. **/home/user/worktrees/auth**
分支:feature/auth
Commit:def5678
状态:3 个未提交的更改
3. **/home/user/worktrees/hotfix**
分支:hotfix/security-patch
Commit:ghi9012
状态:clean
**总计**:3 个工作树
**建议**:
- 工作树 #2 有未提交的更改
- 合并分支后考虑清理
3. 清理工作树
移除已合并分支的工作树:
请求:“清理我的工作树”
响应:
检查已合并的分支...
**发现 2 个已合并分支的工作树**:
1. /home/user/worktrees/old-feature
分支:feature/old-feature
合并到:main
2. /home/user/worktrees/bugfix
分支:bugfix/validation-error
合并到:main
**清理计划**:
1. 移除工作树目录
2. 删除本地分支
3. 修剪陈旧引用
继续吗?[y/N]
清理中...
移除:/home/user/worktrees/old-feature
删除:feature/old-feature
移除:/home/user/worktrees/bugfix
删除:bugfix/validation-error
修剪陈旧引用
清理完成!
用例
用例 1:并行功能开发
用户:"我需要在保持认证工作的同时处理仪表板"
你:
为仪表板创建单独的工作树...
**当前工作**:feature/auth(将被保留)
**新工作树**:feature/dashboard
创建工作树:
git worktree add ../worktrees/dashboard feature/dashboard
工作树已创建!
**工作流程**:
- 认证工作:留在当前目录
- 仪表板:cd ../worktrees/dashboard
- 提交在两者中都可见(共享历史)
用例 2:紧急热修复
用户:"急需修复生产中的漏洞"
你:
创建隔离的热修复环境...
**热修复分支**:hotfix/critical-fix
**隔离路径**:../worktrees/hotfix
创建中:
git worktree add -b hotfix/critical-fix ../worktrees/hotfix main
**下一步**:
1. cd ../worktrees/hotfix
2. 修复问题
3. 提交:git commit -m "fix: critical bug"
4. 完成后:git worktree remove ../worktrees/hottrees
你的当前工作保持不变!
用例 3:PR 审查
用户:"在不丢失我的更改的情况下审查 PR #123"
你:
为 PR 审查创建工作树...
**获取 PR 分支**:
git fetch origin pull/123/head:pr-123
**创建工作树**:
git worktree add ../worktrees/pr-123 pr-123
**审查工作流程**:
1. cd ../worktrees/pr-123
2. 运行测试,审查代码
3. 完成后:git worktree remove ../worktrees/pr-123
你的当前工作被保留!
工作流模式
模式 1:功能隔离
触发器:“在多个功能上工作”
工作流:
- 检查当前分支是否有未提交的更改
- 根据分支名称确定工作树路径
- 使用
git worktree add创建工作树 - 提供导航指令
- 显示所有活动工作树
模式 2:热修复工作流
触发器:“需要紧急修复”
工作流:
- 从主分支创建工作树
- 可选地创建新的热修复分支
- 提供快速通道指令
- 注释合并后的清理步骤
模式 3:清理例程
触发器:“清理工作树”
工作流:
- 列出所有工作树
- 检查每个分支与主分支(已合并?)
- 确定清理候选
- 显示预览
- 确认后移除
- 修剪陈旧引用
配置
.claudle/github-workflows/branching-config.json 中的工作树设置:
{
"worktrees": {
"baseDir": "../worktrees",
"autoCreate": {
"hotfix": true,
"release": true
}
}
}
重要说明
- 每个分支一个工作树:一个分支只能在一个工作树中检出
- 共享历史:任何工作树中的提交在任何地方都可见
- 独立暂存:每个工作树都有单独的暂存更改
- 路径在仓库外:工作树应该在主仓库目录外
- 定期清理:移除已合并分支的工作树以避免混乱
- 需要强制:使用
--force移除带有未提交更改的工作树
错误处理
常见问题:
- 分支已检出 -> 找到并移除现有的工作树
- 路径已存在 -> 选择不同的路径或移除现有的
- 权限被拒绝 -> 检查目录权限
- 可修剪的工作树 -> 目录被手动删除,运行
git worktree prune
集成点
与管理分支
- 为热修复/发布分支自动创建工作树
- 分支完成后清理工作树
- 分享分支命名约定
与分支开始/分支结束命令
/branch-start hotfix name可能自动创建工作树/branch-finish建议工作树清理
当你遇到工作树操作时,使用此专长帮助用户有效地管理并行开发环境!