Skip to content

feat(Worktree): 新增 Worktree 视图与完整工作树操作功能 - #18

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/add-worktree-view-operations
Jun 29, 2026
Merged

feat(Worktree): 新增 Worktree 视图与完整工作树操作功能#18
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/add-worktree-view-operations

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

Hyper Git 活动栏容器(hyper-git)下已有 Changes / Commit / Log / Branches / Stash / Shelf 六个视图,但缺少 git worktree(工作树)的管理入口。用户在仓库内并行维护多个工作树(不同分支各开一个)时只能退回终端手动操作,体验断层。

目标

新增 hyperGit.worktrees 视图,提供完整的工作树管理能力,对齐 lazygit / GitKraken / VS Code 原生的工作树工作流。

功能清单

视图:列出全部工作树(git worktree list --porcelain -z),区分:

  • 主工作树(home 图标 + 「主」标注)
  • 普通 / detached(git-branch / git-commit 图标)
  • locked(🔒)/ prunable(⚠ 警示色)
  • 当前打开的工作树高亮(macOS 软链 realpath 归一比较)

9 个操作命令

命令 说明
新建 Worktree 三模式:新建分支 / 检出已有分支 / Detached HEAD,可选 start-point
打开 Worktree 默认新窗口打开(符合单仓库并行工作语义)
删除 Worktree 普通 / 强制 + modal 二次确认;主工作树与当前工作树守护
锁定 / 解锁 防止 prune 自动清理(含 reason)
移动 Worktree 改路径
清理失效 Worktree 预览 prunable 列表 + 确认后 worktree prune
复制路径 / 刷新 便利项

实现要点

  • 零新增依赖:全程走 service.execGit CLI 通道(vscode.git 稳定 API 未暴露 worktree 创建/删除,对齐 StashTreeProvider 哲学)
  • 分层解耦:engine 纯逻辑解析器 parseWorktreeList(NUL 段累积状态机)+ adapter TreeDataProvider,解析器可独立单测
  • 复刻现有范式:TreeDataProvider / contextValue 菜单守护 / in-flight 缓存 / errMsg 错误处理 / refreshAll 刷新链,与 Branches/Stash 视图一致
  • 安全守护:主工作树删除/移动、当前打开工作树删除经菜单 when + 命令内双重拦截
  • 降级:vscode.git API 不可用时复用 EmptyChangesProvider,避免「视图未提供器」报错

验证

  • pnpm test:unit:178 个单测全绿(含 12 个 parseWorktreeList 用例)
  • pnpm compile:tsc 类型检查 + eslint + esbuild 全过
  • 真实 git 端到端验证:用真实 git 仓库产出 worktree list --porcelain -z 喂给解析器,正确识别 main / detached / locked / prunable
  • ⏳ F5 实机回归:待在 VS Code Extension Host 中验证 UI 交互(右键菜单、新建/删除/锁定等流程)

关键修正(循证工程)

实现中发现并修正了一个 porcelain 格式假设错误:git worktree list --porcelain -z-z每字段 NUL 分隔、记录间空段(双 NUL),而非「记录级 NUL、块内 \n」。该错误被单元测试的自洽掩盖,最终通过真实 git 端到端验证发现并修正解析器为 NUL 段累积状态机。


🤖 Generated with Claude Code

- 新增 hyperGit.worktrees 视图:经 git worktree list --porcelain -z 枚举工作树,区分主工作树 / 普通 / detached / locked / prunable,当前打开的工作树高亮;
- 新增 9 个命令:刷新、新建(新建分支·检出已有·Detached 三模式)、打开(新窗口)、删除(普通/强制 + 二次确认)、复制路径、锁定、解锁、移动、清理(prunable 预览 + 确认);
- 新增 engine 纯逻辑解析器 parseWorktreeList(NUL 段累积状态机,适配 -z 真实格式)+ vitest 单测;
- 主工作树与当前打开工作树的删除/移动经菜单 when 与命令内双重守护;
- API 不可用降级复用 EmptyChangesProvider,避免「视图未提供器」报错。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI
ThreeFish-AI merged commit 9554bb3 into feature/1.x.x Jun 29, 2026
5 checks passed
@ThreeFish-AI
ThreeFish-AI deleted the ThreeFish-AI/add-worktree-view-operations branch June 29, 2026 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant