mcpField
L
linear-worktree

linear-worktree

github.com/mblode开发16976 次安装1 天前更新
代码仓库

关于 linear-worktree

linear-worktree 是一项技能,可为 Linear issue 从 main 创建 Git worktree。它能解析 issue 链接或文本生成 issue ID 和分支名,并报告目录位置及进入命令。

主要功能

  1. 01解析 Linear 链接和 issue 文本
  2. 02生成 issue ID 与分支名
  3. 03创建前获取 origin main
  4. 04创建并列的 Git worktree
  5. 05报告路径、分支和 cd 命令

适用场景

  1. 01为 Linear issue 开始隔离开发
  2. 02根据 issue 链接创建 worktree
  3. 03使用 issue ID 设置 worktree

安装

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

$npx skills add https://github.com/mblode/agent-skills --skill linear-worktree

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

附带文件config.json

详细介绍

linear-worktree

从 main 为 Linear issue 创建一个 git worktree,作为当前仓库的同级目录。

复制并跟踪此检查清单:

Worktree creation progress:
- [ ] Step 1: Resolve REPO_ROOT / REPO_NAME / REPOS_BASE
- [ ] Step 2: Parse input into ISSUE_ID and BRANCH
- [ ] Step 3: git fetch origin main
- [ ] Step 4: git worktree add at $REPOS_BASE/$REPO_NAME-$ISSUE_ID
- [ ] Step 5: Report worktree path, branch, and cd command with resolved paths

设置

解析三个变量:

  1. 位于 git 仓库内(最常见):REPO_ROOT = git rev-parse --show-toplevel,REPO_NAME = 其基本名称,REPOS_BASE = 其父目录。
  2. 不在 git 仓库内,但 config.json 包含 repos_base:将其用作 REPOS_BASE。询问用户选择哪个仓库文件夹。
  3. 两者都不满足:询问完整的仓库路径。

输入

用户提供以下其中一项:

  • Linear URL:https://linear.app/myteam/issue/ABC-58/add-dark-mode-toggle
  • 复制为提示词:ABC-58 Add dark mode toggle to settings page
  • 仅 issue ID:ABC-58

解析

所有解析都会生成两个值:ISSUE_ID(小写)和 BRANCH(ID + slug)。

从 URL 解析
  1. 从 /issue/ 后面的路径段提取 issue ID → ISSUE_ID = abc-58
  2. 最后的路径段作为 slug → BRANCH = abc-58-add-dark-mode-toggle
从复制为提示词解析
  1. 第一个词是 issue ID → ISSUE_ID = abc-58
  2. 将其余部分转换为 slug:转为小写,将空格替换为 -,去除反引号/括号/.../引号/#/@,合并连续的连字符,去除开头和结尾的连字符
  3. BRANCH = abc-58-<slug>

示例: ABC-58 Add dark mode toggle (don't break "light" default) → abc-58-add-dark-mode-toggle-dont-break-light-default

仅从 issue ID 解析

将 ID 转为小写 → ISSUE_ID = abc-58。如果用户为分支提供了描述,则将其转换为 slug;否则 BRANCH = abc-58。

创建 Worktree

git -C $REPO_ROOT fetch origin main

git -C $REPO_ROOT worktree add \
  -b $BRANCH \
  $REPOS_BASE/$REPO_NAME-$ISSUE_ID \
  main

这会在 $REPOS_BASE/$REPO_NAME-$ISSUE_ID 创建 worktree(例如 /Users/you/Code/myrepo-abc-58)——它是主仓库的同级目录,而不是仓库内部的目录。

创建后

使用实际解析出的路径告知用户 worktree 路径、分支名称和 cd 命令:

Worktree: /Users/you/Code/myrepo-abc-58
Branch:   abc-58-add-dark-mode-toggle
Run:      cd /Users/you/Code/myrepo-abc-58

边缘情况和注意事项

  • 分支已存在但未检出:去掉 -b——使用 git worktree add $REPOS_BASE/$REPO_NAME-$ISSUE_ID $BRANCH。
  • 分支已在另一个 worktree 中检出:不要使用 --force。运行 git worktree list,并告知用户 cd 到现有 worktree。
  • 目录已存在:删除前先与用户确认——它可能是被遗忘的 worktree。
  • 始终先 fetch:在 git worktree add 之前运行 git fetch origin main,否则 worktree 会基于过时的版本创建。
  • 同级目录,而非子目录:worktree 路径位于 $REPO_ROOT 旁边,绝不会在其内部。
  • “创建分支”指创建 worktree:使用 git worktree add,而不是 git checkout -b。
  • 始终以 cd 结束:如果用户仍留在原始仓库中,worktree 就毫无用处。

评论

支持 Markdown