dsh-auto-git:为每个新注册的 DSH 工作区自动 git init

在 DSH 工作流中,git 相关插件(如 @linxin666/dsh-client-ui-git-graph)的分支胶囊依赖工作区目录是一个 git 仓库。如果目录未初始化 git,相关功能将不可用。dsh-auto-git 解决了这个问题,它监听工作区注册事件并自动为每个新工作区执行 git init,使 git 功能在所有工作区中可用。

核心功能

  • 自动初始化:监听 domain/changed 事件,对新工作区根目录执行 git init -b main。
  • 初始提交:默认情况下,执行一个空提交 (git commit --allow-empty),确保 HEAD 不处于 detached 状态,分支胶囊能正常显示分支名。
  • 幂等处理:在同一个 host 进程内,同一个路径只处理一次;如果仓库已存在则跳过。
  • 零运行时依赖:仅使用 Node.js 原生模块 (node:child_process / node:fs/promises),无额外依赖。
  • 无嵌套:如果父目录已经是仓库或当前目录是 git worktree 检出,则跳过初始化。

安装与启用

从 GitHub 安装:

dsh plugin --profile web add github:zhitiaojun/dsh-auto-git

本地开发用 link: 指向 checkout:

dsh plugin --profile web add link:D:/Project/1/dsh-auto-git

重要:安装后必须重启 dsh web 才会装进 host 进程。

配置

安装后由 profile 的 bundle patch (cordis.patch.yml) 提供行配置。以下是可用字段:

字段 默认值 含义
enabled true 总开关,false 时插件什么都不装
branch main 初始分支名
initialCommit true 是否补一个空提交(关闭则新仓库分支名可能显示为 detached)
sweepExisting true 是否也处理启动前已注册的工作区(默认会处理当前所有未注册为仓库的已注册工作区)
timeoutMs 30000 每条 git 命令的超时时间

验证

  1. 运行核心测试:
    在仓库根目录下执行:
    node D:\Project\1\dsh-auto-git\test\smoke.mjs
  1. 检查日志:
    查看安装日志:
    ~\.dsh\profiles\web\.dsh-market\log.ndjson
应有该包的 `install` 与随后的 `restart` 记录。
  1. 检查 Git 状态:
    在任意新注册的 DSH 工作区目录中执行:
    git -C <新目录> log --oneline
应该能看到 `chore: initial commit`。

注意事项

  • sweepExisting 行为:默认为 true。安装并重启后,当前所有还不是仓库的已注册工作区都会被初始化。如果只想影响以后新建的工作区,需将 sweepExisting 改为 false。
  • 卸载回滚:卸载插件不会回滚已经建好的仓库。
  • 依赖版本:需要 DSH 版本 >=0.1.5-rc.1。
  • 运行环境:纯 host 侧插件,无浏览器贡献代码。

总结

dsh-auto-git 通过在 DSH 工作区注册时自动初始化 git 仓库,解决了 git 相关插件在非仓库目录下不可用的问题。它是一个轻量级的 host 侧插件,适合需要统一 git 管理的 DSH 工作流环境。

更多细节与源代码,请访问:GitHub | 目录站

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

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

小夜