dsh-fork-worktree:从工作区行 fork 出 git worktree

前言

在 DeepSeek Harness(DSH)里,侧边栏会列出多个工作区,每个工作区对应一个目录和会话。当你要在同一仓库上并行试不同改动、或想保留一份「干净检出」又不想手动敲 git worktree,通常要自己记目录命名、分支名,再在 DSH 里再登记一次新路径。

dsh-fork-worktree 把这件事接到工作区行上:在 … 和 + 之间多两个按钮,用确认弹窗完成 fork 或删除,并在成功后打开新会话或清理登记。下面介绍它做什么、怎么装、怎么用,以及使用时要注意的边界。

这是什么

dsh-fork-worktree 是社区维护的 DSH 插件(维护者 Bainianzzz),分类为工作流。它给侧边栏每条工作区记录增加 fork 与垃圾桶操作:前者基于当前工作区目录对应的 git 仓库创建 worktree 并注册为新工作区;后者删除该工作区的 worktree 并移除登记。插件以 MIT 许可证发布,当前 package 版本为 0.2.1,要求 DSH >=0.2.1-rc.2 <0.3.0。

目录页:skillhub.cn/plugins/Bainianzzz/dsh-fork-worktree
源码与说明:github.com/Bainianzzz/dsh-fork-worktree

核心功能

工作区行上的两个按钮

安装并启用后,将鼠标悬停在工作区行上可见:

  • fork:从该工作区 fork 出新的 git worktree,登记为新工作区,并在新工作区中打开会话。
  • 垃圾桶:删除该工作区对应的 worktree,并移除工作区登记。

两种操作都会先弹出确认框;仅点击按钮不会直接执行。

fork:两种创建方式

确认框里可选择:

  1. 创建 git worktree:只检出已提交内容;未提交修改、未跟踪文件、以及被 .gitignore 忽略的内容仍留在源目录。
  2. 复制并创建 worktree:检出后把 worktree 里缺失的文件从源目录复制过去,包括未跟踪与被忽略的内容(例如 node_modules、.env、构建产物、配置文件等)。已跟踪文件保持 HEAD 版本;相对路径软链按原样保留。

目录已是 git 仓库时

点任一创建按钮后:

  • 在仓库同级创建目录 <仓库名>-wt-<label>。
  • 分支名为 wt/<label>,基于当前 HEAD。
  • 若选了复制方式,会补齐缺失文件,并注册为新工作区。

目录还不是 git 仓库时

弹窗会切到「初始化」模式(保留你已选的方式)。再次确认后会执行 git init,把目录当前内容作为首个提交(空目录则为空提交),再创建 worktree。

成功后会在新工作区打开会话,并用 toast 显示路径;复制方式下还会提示复制了多少项。若复制失败,刚创建的 worktree 与分支会一并撤销。

删除 worktree

  1. 点垃圾桶后,确认框会写明将要删除的路径,并说明会话记录会保留。
  2. 确认后通过 git worktree remove 删除 worktree,清理仓库 worktree 元数据,并移除工作区登记。
  3. 若存在未提交修改或未跟踪文件,会拒绝删除;弹窗切到「强制删除」模式,需再次确认才执行。
  4. 护栏:不会删除 $HOME 与文件系统根目录。

删除刻意没有斜杠命令入口,避免一条命令误删当前会话正在使用的目录。

自动清理

若 worktree 目录在文件系统里被外部删掉,对应的工作区登记会自动移除;普通目录以及不符合命名规则的目录不受影响。

安装与启用

在侧栏打开插件面板,点添加插件,填入下面这一行(与 README 一致):

github:Bainianzzz/dsh-fork-worktree

安装完成后点立即启用。启用后 hover 工作区行即可看到 fork 与垃圾桶按钮。更多安装方式见仓库 Release 页。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。插件在当前 dsh 进程权限下执行 git 与文件操作,安装前请自行查看源码与 MIT 许可证。

典型用法

侧栏按钮

  1. 选中一条工作区,点 fork,在弹窗里选「创建 git worktree」或「复制并创建 worktree」,再点对应创建按钮并确认。
  2. 需要拆掉某个 fork 出来的工作区时,点 垃圾桶,核对路径后确认;有脏工作区时按提示走强制删除二次确认。

会话内命令(仅 fork)

在该工作区的会话里可以执行:

/fork-worktree [name] [--init] [--copy]

省略 name 时,会用 6 位随机 hex 作为 label;--copy 对应「复制并创建 worktree」。非 git 目录可用 --init 配合初始化流程(与侧栏「初始化」模式一致)。

适用场景与注意

适合在同一仓库上开多条并行工作区、或需要把当前目录(含本地未提交/被忽略文件)快速复制到新 worktree 再继续对话的场景。若你只想要纯 HEAD 检出、且希望源目录里的未提交改动完全隔离,选「创建 git worktree」即可。

注意:

  • 复制方式会带入 node_modules、.env 等被忽略文件,请确认无敏感信息误拷到新目录。
  • 删除会动真实目录与 git worktree 元数据;强制删除可清掉有未提交改动的 worktree,操作前看清确认框里的路径。
  • 引擎版本需落在 >=0.2.1-rc.2 <0.3.0,与当前 DSH 不匹配时请先升级或换兼容版本。

结尾

dsh-fork-worktree 把 git worktree 的创建与清理绑到 DSH 工作区行上,减少手抄路径和重复登记。需要细节与更新时,以 GitHub README 为准:Bainianzzz/dsh-fork-worktree;也可从目录页进入:skillhub.cn/plugins/Bainianzzz/dsh-fork-worktree。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜