dsh-git-worktree

by LaoYueHanNi

0 开发与运行时github 检测到 manifest package.json#dsh 社区精选 收录于 08-17

在 Web UI 简单管理分支与 worktree 的 dsh 插件:编辑器工具行显示当前分支,点选即原地切换,Worktree 开关可一键切换

A dsh plugin for simple branch & worktree management in the Web UI. The composer tool row shows the current branch: pick another to switch in place, or flip the Worktree toggle…

安装

dsh plugin --profile web add github:LaoYueHanNi/dsh-git-worktree

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

Web 界面中的 dsh-git-worktree

简体中文 | English

一个 dsh 插件:在 Web 界面进行简单的分支与 worktree 管理。输入框工具行显示当前分支 —— 选其他分支原地切换;勾选**「工作树」**则获得一个注册为真实工作区的隔离 worktree,效果见上图。

仓库:https://github.com/LaoYueHanNi/dsh-git-worktree

功能

  • IDEA 风格分支选择器:分支菜单把 / 视为文件夹层级 —— 可折叠文件夹、末段标签,当前分支所在链路默认展开并居中。单击选中(蓝底),双击或 Enter 弹出右侧确认弹层。左侧工具栏提供定位当前分支与全部展开/折叠;底部搜索保留匹配分支的祖先文件夹并高亮命中字符;超长标签悬停显示全名。
  • 分支切换:从 chip 菜单选分支、确认后原地 git switch。在 worktree 会话内只作用于该 worktree。
  • 工作树隔离:空白会话上勾选**「工作树」**再选分支,在 ~/.dsh/gitworktree/<仓库>-<分支>/ 下执行 git worktree add 并注册为真实工作区,跳转到新目录的空白会话。重复选同一分支直接复用;失效注册自动 prune 恢复。
  • 存放根路径可配:设置 → 插件页签下的 Git 工作树 卡片 —— 原生目录选择器或手输绝对路径,保存即生效(新建的 worktree 落在新目录,已有的留在原地,git 仍能识别复用)。留空使用默认 $DSH_HOME/gitworktree(~/.dsh/gitworktree)。设置存于 dsh 统一设置文档;旧版 ~/.dsh/git-work-tree/settings.json 的已保存值会在升级后自动迁入(原文件改名 .migrated 保留)。

安装

从 GitHub 安装(推荐)

dsh plugin --profile web add github:LaoYueHanNi/dsh-git-worktree

包声明了 dsh.bundle,add 会自动把插件挂进 profile 的层栈,无需手动改配置。构建产物 lib/ 随仓库提交(没有 prepare 脚本),git 安装开箱即用,无需任何构建白名单。需要 web profile(dsh web)。

从本地目录安装(开发调试用)

dsh plugin --profile web add link:D:/Code/dsh-worktree

link: 安装的是符号链接:重新构建插件后重启 dsh web 即可生效。

更新

dsh plugin --profile web update dsh-git-worktree

移除

dsh plugin --profile web remove dsh-git-worktree

插件会从 profile 移除并停止加载。~/.dsh/gitworktree/ 下的 worktree 目录会保留;已迁移的旧设置文件(settings.json.migrated)如不需要可手动删除,插件自身的设置项存于 dsh 设置文档。

开发

先构建一次插件:

npm install
npm run build && npm run build:client
npm test                # vitest(60 项测试)
node scripts/smoke.mjs  # 基于构建产物的真实 git 冒烟

刻意不设 prepare 脚本。 编译产物 lib/ 已提交进仓库。pnpm ≥ 10 默认拒绝执行 git-hosted 依赖的构建脚本,除非加入白名单(报错 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED),因此若保留 prepare,每个用户用 github: 安装都会失败。改为随仓库分发预构建产物后,dsh plugin add github:LaoYueHanNi/dsh-git-worktree 才能零配置开箱即用。改动 src/ 下的任何文件后,务必重新构建并提交更新后的 lib/,否则别人安装到的是旧产物:

npm run build && npm run build:client
git add lib/

临时挂载 —— 仅当次启动生效,不动 profile。在仓库旁建一个 cordis.yml 指向构建出的 host 半边(Windows 需要 file:/// 形式):

- insert:
    - id: git-worktree
      name: 'file:///D:/Code/dsh-worktree/lib/index.js'
dsh web --patch <插件目录>/cordis.yml

此模式只挂载 host 半边(/plugin/git-worktree/* 三条路由照常工作);分支 chip 依赖按包名解析的客户端 bundle,因此开发 UI 请用上面的 link: 安装方式:执行 npm run build && npm run build:client(或在插件目录跑 npx tsdown --watch)并重启 dsh web 后,浏览器端插件会自动热重载。

原始 README: https://github.com/LaoYueHanNi/dsh-git-worktree/blob/main/README.zh.md ↗