Repository navigation
Releases
dsh-git-idea 0.3.0
这一版把面板收成一张卡片:两颗 chip(分支,以及工作区里不止一个仓库时的仓库)打开的是同一张卡片 —— 最上面是这个工作区的仓库,下面 HEAD 当前分支 / 本地 / 远端,再下面是仓库级动作与暂存区。它和输入框旁那张悬浮卡片是同一段代码。
「工作树」页签删掉了。工作树是同一个仓库的第二份检出,不是分支,而且只有 DSH 的 create_worktree 建过之后才存在;它留下的东西放回了该在的地方:chip 自己的字形,以及源仓库 .agents/ 那条未跟踪改动上的「工作树池」注解。
差异记号照 IDEA:只有有事可做才写 ↓N / ↑M(蓝的等着拉、绿的等着推),与上游一致、或者没有上游,都空着 —— 中间试过的 = 去掉了。当前分支那一行还带着未提交改动数 ●N,和面板左栏、输入框 chip 角标同一个记号、同一个数。
工作区自己不是仓库时会往下找(git/repos,读 .git 目录,不起 git 进程),chip 写「N 个仓库」,面板多一颗仓库 chip,卡片第一组就是这张清单 —— 换的只是「看哪一个仓库」,不搬会话。
没有远端时 fetch / pull / push 不再假装:Host 回 no-remote,面板用一句中文加一条可复制的命令说清楚;push / pull 失败会问 upstreamMissing(symbolic-ref / rev-parse,不再匹配 git 的英文报错),横幅上给「推送并设为上游」/「拉取并设为上游」。卡片里的「远端」列全部远端跟踪分支,本地已有同名的压暗一档。
1016 条断言全绿(新增 gp48、gp49)。README 的图和文字跟上了新面板。
安装
dsh plugin --profile web add dsh-git-idea@0.3.0dsh-git-idea 0.2.6
这一版修 0.1.7 上的两个症状:面板说「未检测到仓库」、换会话时 chip 变慢。
根因是一个 0.1.7 的行为变化:sessions.get(id) 只回答活着的会话(0.1.5 会从存储里加载)。刚选中、还在恢复的会话因此解析不到工作区 —— 面板第一次读落在这一刻,读到 not-a-repository 就把它当成了最终答案(它只在挂载时读一次),于是挂着「未检测到仓库」;chip 晚一步读、还会重试,所以它最终能报出分支,只是慢。
- Host:每个请求在进处理函数之前先把会话工作区解析出来 —— 活着的会话先问
sessions,否则退到sessionPersistence.stat(id)读会话头(只读头,不读事件日志,也不拿所有权)。 - 面板:重新打开时,上一次读成「不是仓库」的会重读一次;读到仓库的那份快照照旧保留,重开仍然是瞬时的。
- 回归加了两条:没有存储时解析不到那条会话的工作区,有存储时必须解析出来。
- 836 条断言全绿;另起一个 0.1.7 实例做 A/B:同一个非活动会话,旧构建返回
not-a-repository/ repo=null,修好的构建解析出/mnt/d/work/idea_work/holox-esg、分支main。
安装
dsh plugin --profile web add dsh-git-idea@0.2.6dsh-git-idea 0.2.5
这一版修好新版 DSH 上「读不到仓库」。
DSH 0.1.7 把执行器的一次性 run(spec) 换成了 execute(spec) 加 result()。Host 那一半两种形状都认,0.1.5/0.1.6 和 0.1.7+ 装的是同一份包;修之前,0.1.7 上每一条 git 命令都拿到 shell.run is not a function —— 图标空白,面板停在「正在读取仓库…」。
package.json的engines.dsh只声明最低版本(>=0.1.5-rc.1),不再写上限;市场读的就是这个字段。- 回归里加了一条:把同一个 shell 服务换成 0.1.7 的
execute/result形状,真命令照跑,断言走的是新那条路。 - 834 条断言全绿;另外在一个独立
DSH_HOME、3099 端口的 0.1.7 实例上验过:git/toolchain、git/branches、git/panel、git/watch都返回真实数据,面板显示「这个目录不是 Git 仓库 / 在此初始化仓库」而不是卡在读取。
安装
dsh plugin --profile web add dsh-git-idea@0.2.5dsh-git-idea 0.2.4
这一版把插件的说明和声明补齐(功能与 0.2.3 相同):
- 定位改成它实际的样子:照着 IDEA 的 VCS 做的 Git 集成 —— 输入框「权限模式」旁边一个 Git 图标,显示当前分支与未提交改动数,悬停切分支,点击弹出面板(分支树、提交图、变更与暂存、提交详情、文件差异),加上一个设置页;仍然不向 DSH 注册任何模型工具。
package.json新增engines.dsh: ">=0.1.5-rc.1 <0.1.6",把「依赖哪个 DSH」写成可被市场读取的声明(市场读的就是这个字段)。- README 顶部加了「当前版本 / 下载安装 / 依赖」一张表;安装要求写成同一个范围。
0.2.3 的行为(同一个工作区里换会话,面板首帧直接用记忆里的那份读数)不变;832 条断言全绿。
安装
dsh plugin --profile web add dsh-git-idea@0.2.4dsh-git-idea 0.2.3
同一页面里换会话时,DSH 会把 session 作用域的 slot 子树整个重挂(组件 state 从头来)。面板以前于是每一帧都从「正在读取仓库…」开始 —— 可它要显示的那份数据本来就在记忆里:Host 的每一次读都按仓库缓存,客户端那份「工作区读数」也按仓库记。
这一版让面板挂载时先用记忆里的快照铺屏(rememberedPanel),挂载时那次读照旧发出,用答复确认或纠正。于是:
- 同一个工作区里换会话:面板不再先空一帧、再换成一模一样的东西;分支名、变更数、提交列表当帧就在。
- 换到另一个看过的工作区:同样秒出。
- 从没读过的仓库:行为不变,仍然是先读一次(这是应该的)。
只有过一次整树读的记录才会被拿来铺屏 —— 只问过几条路径的读证明不了整份快照是完整的。
顺带一个修正:npm 包里现在带上 docs/,README 里那几张截图在 npm 页面上也能显示了(之前只有 GitHub 上能看)。
832 条断言全绿(会话套件新增 3 条:同工作区重挂第一帧不再出现「正在读取仓库…」、第一帧就带着记忆里的改动数、没见过的会话仍从空帧开始)。
安装
dsh plugin --profile web add dsh-git-idea@0.2.3dsh-git-idea 0.2.2
0.2.1 重启后,页面报「Failed to load plugins」,或只看到:
git plugin: the shell Service is unavailable; no RPC registered
原因在主机那半侧:apply 用 ctx.get('shell') 直接读服务,而提供 shell 的 bash-sandbox 自己还停在 subprocess / sandbox / sandboxPolicy 上等它们就绪。于是插件先 apply、读不到,按自己的守卫直接返回,一条 RPC 都没注册(对 /dsh-git-idea/rpc 的调用一律答 git/config is not registered),预置的路由还在,所以看起来像「插件加载失败」。
这一版把 shell 改成声明式依赖(inject: ['shell']),由 Cordis 等到执行器就绪再 apply——产品自带的 dsh-tool-bash 用的就是同一个。829 条断言全绿,另外给发布产物加了一条守卫:host 半侧必须声明 inject: ['shell'],client 半侧必须定义 styles(这是这套布局先后踩到的两个安装期故障)。
安装
dsh plugin --profile web add dsh-git-idea@0.2.2dsh-git-idea 0.2.1
0.2.0 装上以后面板起不来,报:
Failed to load plugins
dsh-git-idea failed to apply loader entry … styles is not defined
原因是客户端那半侧:这些片段原本是给动态桥的浏览器环境写的,那个环境会把 React、host、styles 三个符号直接交到闭包里;打成正式包时前两个都补上了,styles 漏了,于是每次 apply 都死在 styles is not defined。这一版把同一个 insert(text) 注入器补进 prelude(dsh-client-modules 照旧会认领它插进去的 <style>,HMR 记账不受影响)。
安装
dsh plugin --profile web add dsh-git-idea@0.2.1dsh-git-idea 0.2.0
设置页多了三件读者真正会去找的事:提交身份、用哪个 git、网络命令带什么参数;同时把「仓库动过了之后要等多久」这条链重新量了一遍。
新增
- 提交身份(设置页 → 提交身份):读此刻生效的
user.name/user.email连同它们的来源(.git/config还是~/.gitconfig),可以写进--global或只写这个仓库(--local)。空着的框一个字节都不写 ——git config user.name ''正是「empty ident name」那个错误的来路。 - git 位置:装在不在这条 PATH 上的地方(Homebrew 前缀、IDE 自带的 git、nix profile)时写绝对路径;旁边实时显示它解析到哪、什么版本、能不能跑,并且分得清「设置里写错了」和「这台机器没有 git」。
- 网络三项:
fetch --all --prune、pull --rebase、推送没有上游的分支时自动push -u。它们是面板给 git 的实参,不是 git 设置的副本;设置页底部会照实参写一遍会执行成什么。
改动
- chip 和面板共用同一份「工作区有几个改动」,两块屏幕上的数字不可能各说各话。
- 一次「仓库动过了」之后只问屏上那些路径;折叠的未跟踪目录只问它自己(带上父目录会把旁边整棵树扫一遍)。
- 整棵树有自己的时钟:
max(30 秒, 8 × 上次耗时),上限 5 分钟;⟳ 仍然立刻整棵树重读。 - 还没核对出来的时候 chip 说的是「正在核对改动…」,不谎称「工作区干净」。
安装
dsh plugin --profile web add dsh-git-ideadsh-git-idea v0.1.0
First public release.
- Real DSH plugin package: dsh.bundle patch + web client bundle
- Composer repository chip, branch tree, commit graph, working tree and commit detail, Settings page
- 8 git model tools and 24 host RPCs
Install: dsh plugin --profile web add github:mays-hi/dsh-git-idea (restart dsh web afterwards).