Git工作树管理器Skill git-worktree

这个技能是一个Git工作树管理器,用于实现隔离的并行开发和代码审查。通过交互式界面,用户可轻松创建、列出、切换和清理工作树,自动复制.env环境文件,遵循KISS原则。关键词:Git工作树、并行开发、代码审查、DevOps工具、环境管理、版本控制、开发工作流、隔离开发。

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

name: git-worktree description: 这个技能管理Git工作树,用于隔离的并行开发。它通过简单的交互界面处理创建、列出、切换和清理工作树,遵循KISS原则。

Git工作树管理器

这个技能为您的开发工作流提供了一个统一的管理Git工作树的接口。无论您是在隔离环境下审查PR,还是在并行开发功能,这个技能都能处理所有复杂性。

这个技能的作用

  • 创建工作树:从主分支创建,使用清晰的分支名称
  • 列出工作树:显示当前状态
  • 在工作树之间切换:支持并行工作
  • 清理已完成的工作树:自动执行
  • 交互式确认:每个步骤都有提示
  • 自动管理.gitignore:用于工作树目录
  • 自动复制.env文件:从主仓库复制到新工作树

关键:始终使用管理器脚本

切勿直接调用 git worktree add 始终使用 worktree-manager.sh 脚本。

脚本处理了原始git命令未处理的关键设置:

  1. 从主仓库复制 .env.env.local.env.test 等文件
  2. 确保 .worktrees.gitignore
  3. 创建一致的目录结构
# ✅ 正确 - 始终使用脚本
bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh create 功能名称

# ❌ 错误 - 切勿直接操作
git worktree add .worktrees/功能名称 -b 功能名称 main

何时使用这个技能

在以下场景中使用此技能:

  1. 代码审查 (/workflows:review):如果不在目标分支(PR分支或请求的分支),提供工作树进行隔离审查
  2. 功能开发 (/workflows:work):始终询问用户是希望并行工作树还是实时分支工作
  3. 并行开发:当同时处理多个功能时
  4. 清理:完成工作树中的工作后

如何使用

在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 功能登录

发生的情况:

  1. 检查工作树是否已存在
  2. 从远程更新基础分支
  3. 创建新工作树和分支
  4. 从主仓库复制所有.env文件(.env、.env.local、.env.test等)
  5. 显示用于cd到工作树的路径

listls

列出所有可用工作树及其分支和当前状态。

示例:

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 功能登录

可选:

  • 如果未提供名称,列出可用工作树并提示选择

cleanupclean

交互式清理非活动工作树,带确认。

示例:

bash ${CLAUDE_PLUGIN_ROOT}/skills/git-worktree/scripts/worktree-manager.sh cleanup

发生的情况:

  1. 列出所有非活动工作树
  2. 请求确认
  3. 移除选定的工作树
  4. 清理空目录

工作流示例

使用工作树进行代码审查

# Claude代码识别您不在PR分支上
# 提供:“使用工作树进行隔离审查?(是/否)”

# 您响应:是
# 脚本运行(自动复制.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(保持简单)

  • 一个管理器脚本处理所有工作树操作
  • 简单命令带合理默认值
  • 交互式提示防止意外操作
  • 清晰命名直接使用分支名称

有主见的默认值

  • 工作树始终从 main 创建(除非指定)
  • 工作树存储在 .worktrees/ 目录
  • 分支名称成为工作树名称
  • .gitignore 自动管理

安全第一

  • 创建前确认工作树
  • 清理前确认防止意外移除
  • 不移除当前工作树
  • 清晰的错误消息针对问题

与工作流集成

/workflows:review

并非总是创建工作树:

1. 检查当前分支
2. 如果已在目标分支(PR分支或请求的分支)→ 停留,无需工作树
3. 如果不同于审查目标的分支 → 提供工作树:
   “使用工作树进行隔离审查?(是/否)”
   - 是 → 调用git-worktree技能
   - 否 → 在当前分支上继续PR差异

/workflows:work

始终提供选择:

1. 询问:“您希望如何工作?
   1. 当前工作树上的新分支(实时工作)
   2. 工作树(并行工作)”

2. 如果选择1 → 正常创建新分支
3. 如果选择2 → 调用git-worktree技能从main创建

故障排除

“工作树已存在”

如果看到此消息,脚本将询问是否要切换到它。

“无法移除工作树:它是当前工作树”

首先切换出工作树(到主仓库),然后清理:

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对象提高效率
  • 比克隆或暂存/切换快得多