mcpField
W
worktrees

worktrees

github.com/jayden-dang开发146 次安装1 天前更新
代码仓库

关于 worktrees

worktrees 是一项用于在隔离的 Git worktree 中开展功能开发的 Agent 技能,并要求在修改前检查起始状态。它先检测现有隔离环境,优先使用宿主提供的工作区工具,并提供 Git 备用流程、依赖安装和基线测试步骤。

主要功能

  1. 01检测现有 worktree 隔离
  2. 02优先使用原生工作区工具
  3. 03Git worktree 备用流程
  4. 04根据项目文件安装依赖
  5. 05开始前运行基线测试

适用场景

  1. 01将功能分支与当前检出隔离
  2. 02实现前准备工作区
  3. 03修改前检查现有测试状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jayden-dang/skills --skill worktrees

安装后在 Claude Code 中输入/worktrees确认已加载。

详细介绍

工作树

为功能开发提供独立工作区,并确保起点经过验证且干净。优先顺序:检测现有隔离环境 → 使用运行环境原生工作区工具 → 手动回退到 git worktree。切勿与运行环境对抗。

步骤 0 — 检测并征求同意

检查你是否已在关联工作树中:

GIT_DIR=$(cd "$(git rev-parse --git-dir)" && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" && pwd -P)
  • GIT_DIR != GIT_COMMON → 很可能是关联工作树,但要先排除子模块:如果 git rev-parse --show-superproject-working-tree 输出了路径,说明你在子模块中——将其视为普通检出。否则你已经处于隔离环境中:报告路径和分支,跳过创建,进入步骤 2。
  • GIT_DIR == GIT_COMMON → 普通检出。如果用户明确表达了对工作树的偏好,就直接遵从。如果没有,请询问:“要我在独立工作树中进行设置,以免改动你当前的分支吗?”如果用户拒绝 → 就地工作,进入步骤 2。

完成条件:你已确定自己属于这三种情况中的哪一种;如果要创建工作树,也已征得同意。

步骤 1 — 创建工作区

1a. 优先使用原生工具。 如果运行环境提供工作区/工作树机制(例如名为 EnterWorktree 的工具、/worktree 命令或 --worktree 标志),请使用它并进入步骤 2。原生工具会自行管理位置、分支和清理;同时手动创建工作树会留下运行环境无法识别的幽灵状态。仅当不存在原生工具时,才使用后备方案。

1b. Git 后备方案。 按优先级选择目录:

  1. 用户明确指定的目录——始终优先
  2. 仓库根目录中已有的 .worktrees/
  3. 已有的 worktrees/(若两者都存在,则优先 .worktrees/)
  4. 两者都不存在 → 创建 .worktrees/

将所选目录赋给 $DIR,并在以下每条命令中使用它——只有命令遵循上述优先级,这份优先级列表才有实际意义:

DIR=.worktrees   # or DIR=worktrees if that existing dir was selected above

在项目目录内创建任何内容之前,你必须确认该目录已被 git 忽略。将此条目保留为未提交的工作树更改——git 会立即遵循它;而在此处提交 .gitignore 会向用户的当前分支写入提交,这恰恰违背了这项技能承诺不触碰当前分支的原则:

git check-ignore -q "$DIR" || printf '%s/\n' "$DIR" >> .gitignore

然后创建并进入工作树:

git worktree add "$DIR/<branch-name>" -b "<branch-name>"

如果因沙箱/权限错误导致创建失败,请告知用户并改为就地工作。

完成条件:你已进入工作区(或已说明无法进入的原因)。

步骤 2 — 安装依赖项

根据锁定文件/清单自动检测包管理器并运行安装命令:pnpm-lock.yaml → pnpm,bun.lock* → bun,yarn.lock → yarn,package-lock.json/裸 package.json → npm,Cargo.toml → cargo build,uv.lock → uv,poetry.lock → poetry,requirements.txt → pip,go.mod → go mod download。没有清单 → 跳过。

步骤 3 — 干净基线

使用 docs/agents/project.md 中的命令运行测试套件(文件缺失 → 说明情况,建议使用 setup-repo,并使用对应生态的默认测试运行器)。

  • 基线通过 → 继续。
  • 基线失败 → 停止并在继续前询问用户。从失败的基线开始,会导致无法判断哪些是你引入的问题,哪些是已有问题。

报告

Workspace ready at <absolute path> (branch <name>)
Baseline: <N> tests passing, 0 failures
Ready to start <task>.

红线——绝不可

  • 步骤 0 已发现你在工作树中时,仍然创建工作树
  • 原生工具存在时,仍使用 git worktree add
  • 未检查忽略规则就创建项目内的工作树目录
  • 跳过基线测试,或基线失败后未经询问就继续

评论

支持 Markdown