在 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 命令的超时时间 |
验证¶
- 运行核心测试:
在仓库根目录下执行:
node D:\Project\1\dsh-auto-git\test\smoke.mjs
- 检查日志:
查看安装日志:
~\.dsh\profiles\web\.dsh-market\log.ndjson
应有该包的 `install` 与随后的 `restart` 记录。
- 检查 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 工作流环境。