Repository navigation
Moo Fleet 0.1.49
Windows 安装版请到 GitHub 下载。
Moo-Fleet-0.1.49-windows-x64-setup.exe(107.9 MiB)超过 Gitee 单个附件 100 MiB 的上限,Gitee 上没有这个文件,上传会被平台直接拒绝。需要 NSIS 安装版请到 GitHub Releases · v0.1.49 取;Gitee 侧提供的是功能一致的免安装便携版Moo-Fleet-0.1.49-windows-x64.exe。其余平台包两边完全一致,哈希见SHA256SUMS-desktop-0.1.49.txt。
本次更新
这一版只有两件事:把消息放回它该在的地方,以及修掉十个「看着像偶发、其实必然」的坑。没有新功能。
一、消息不再弹在屏幕角上
以前一次批量 Fetch 会弹两条浮层提示,最响的那条(实心绿条 + 倒计时)说的只是按钮上已经写着的数字:一个 680×69 的绿条盖在内容上,承诺几秒后自己消失,而触发它的按钮在另一个角落。上一版把它挪到右下角,仍然是浮层——问题不在位置。
根子在通道。 全应用 129 处提示共用一个变量,落点靠「此刻开着哪个面板」猜:同一句话在抽屉里出现一次,关掉抽屉跳到舰队页又一次,再开设置出现在弹窗页脚上方。为此写了 5 处「换容器就清空」的补丁,代价是切一下页签回来就看不到刚才那句。
现在每条消息带一个归属:它属于某个工作区、某个仓库、设置页,或者某一批操作。归属决定它落在哪,与你现在开着哪个面板无关——所以「换容器时清空」整套补丁消失了,切页签也不再丢话。
- 成功消息落到各自面板里,贴边一行细字,只有图标带状态色,不占浮层、不压内容、没有倒计时。
- 关掉的容器不搬消息,在入口点挂一个小圆点。
- 后台操作永远不抢用户的话:进行中可以接替进行中,但接替不了一条你还没看过的回执。
- 抽屉标题就写着仓库名,消息里的
${仓库名}:前缀删掉了(35 处);跨仓库与设置场景保留。
二、删掉的会话不会再自己回来
你在这台电脑上删掉一条会话,提示说「已移到系统废纸篓 · 备份保持不变」,几小时后同步报「恢复 1 条」——那条会话带着继续命令回来了。
原因是「备份里有、本机没有」被一律当成「另一台电脑的会话」,而它也可能是你刚删的。现在本机记住这个删除(存在本机配置里,不进备份仓——它是这台电脑的偏好),下次同步跳过它,并说明可从废纸篓找回。文件被捞回来、或同名会话重新出现时,这条记录自动作废。跨机删除仍走墓碑,另一台会正常询问。
三、同步前先认这目录还归不归我
备份目录只是一次性绑定,目录本身会被换掉。如果把它挪走、在同一路径 git init 了别的仓库,下一次同步会对你的仓库执行 reset --hard、clean -fd,再逐个删掉白名单之外的顶层目录。
现在每次同步、每次处理冲突,在动这些命令之前都先核对所有权,认不出就停手并说明「没有动它」。你遇到的是报错,不是数据丢失。
四、macOS 13 / 14 上「移到废纸篓」不再失败
系统自带的 trash 命令是 macOS 15 才有的,而本应用声明支持 13.5。在 13/14 上,丢弃改动、删除会话这两条主路径都会直接报 ENOENT。现在按可用性选:有系统命令就用它,没有就通过系统接口把文件移进同一个废纸篓(可还原、不经过 Finder、不弹授权框)。文件名里的引号也不可能改写命令——路径是参数传入的,不拼进脚本。
五、「已同步」现在只在真的同步完时说
一次同步是两件事:本机备好了、远端推上去了。原来只记一个错误字段,于是远端推送失败(断网、凭证过期、非快进被拒)时,状态卡继续显示「会话已同步」,另一台电脑其实拿不到。
现在本机与远端各记一个结果:整次失败时红,只有远端没上去时黄,写明「已备份在本机,还没上传」。恢复联网后的下一次同步会清掉。
六、勾了「自动 Stash」之后出错,改动回到工作区
原来只有「分支或 HEAD 变了」这一条路径会把 stash 还回来。Fetch 断网、复校发现工作区被改过,这两类直接抛错——改动留在 stash 里,而报错只说「Fetch 失败」,既没说改动去哪了,也没提 stash 名字。
现在这些路径统一先 pop 再抛错;pop 也失败时,错误消息里明说「改动仍在 Stash 列表」。同步的推送段同理:合并已经落库、stash 还在,推失败更要还原。
七、几个「点下去没反应」的地方
- 操作记录里的「重试」丢选项。 文案写着「可勾选 rebase」「可勾选自动 Stash」,确认框里一个勾选框都没有:用 Rebase 的人重试一次会静默变成 merge,历史里凭空多一个合并提交;靠自动 Stash 才拉下来的人,重试会再撞一次「工作区不干净」。现在两个勾选框按操作类型与工作区状态出现,值真正传下去。
- amend 跑到一半,暂存和提交按钮还能点。 点下去只换来一句「已有 Git 操作正在执行」。历史改写与 revert / cherry-pick 的忙态补齐到三处禁用判断里。
- 后台刷新只刷文件与分支。 左侧「Stash 备份 N」来自整页扫描,会自己变,列表不刷就是「计数 4、列表 3」;在终端
pop掉一条之后,列表里那条还在,点「应用」只报 ref 不存在。15 秒静默刷新现在带上 Stash 与标签(标签不重复探测远端)。 - 暂存没有复核快照。 丢弃改动会先核对文件指纹,暂存不会:编辑器保存、构建产物、另一个终端 checkout 之后,你暂存到的可能是没在 diff 里看过的内容。现在两条路径口径一致,过期快照返回 409;顺带挡住冲突文件——
git add会把未合并条目直接标成「已解决」,那是解决冲突,不是暂存。 - 冲突决策用的是旧快照。 隔十几分钟才点「用另一台电脑的」,那期间新写的内容会被整份覆盖。现在决策前先取一次远端;覆盖前把本机那份移进废纸篓(内容相同则不动),并说明这件事。
八、验收脚本不再按星期几算命
这条不影响你使用,但影响我们判断「是不是坏了」。
三条断言长期红着、被当成「已知基线」:日柱比天数少 6–7 根、45 天只画 40 根、热力图 ↑ 在周一不动。查清后是两类错:
- 断言在按星期几算命。 报告窗口的结束日是本周周日(未来日期),而图表只画已经发生的日子。同一个正确实现,周一 85 根、周二 86、周日才 91。原来写死
88..92,等于要求「今天是周五以后」。 - 把刻意设计当成缺陷。 「周一按 ↑ 不动」是 10 月 24 日就定下的:上下键是「同列内换行」,跨列那一跳是上一列最后一行到这一列第一行,视觉距离最远。代码、注释、单测三处一致,是设计。改的是断言。
现在断言按「窗口起点 → min(终点, 今天)」精确算,并单独钉首尾日期;键盘断言按光标所在那天分支。verify:ui 387 项全绿、0 失败,以后它变红就是真出问题。
另外修掉一处真缺陷:本地存储里若存了填反的起止日期,图表会拿到 start > end 的窗口,一天都画不出来、页面是空图且不报错。
九、桌面版安装包(Windows / Linux)
本版与 macOS 一同提供 Windows 与 Linux 安装包,三者用的是同一份前端与服务端载荷:dist/server/index.cjs(1.14 MB)与 dist/client 全部 39 个文件,跟 macOS 包内逐字节同哈希。
| 平台 | 文件 | 说明 |
|---|---|---|
| Windows | Moo-Fleet-0.1.49-windows-x64-setup.exe |
NSIS 安装版,可选安装目录,创建桌面与开始菜单快捷方式 |
| Windows | Moo-Fleet-0.1.49-windows-x64.exe |
便携版,免安装,双击即用 |
| Linux | Moo-Fleet-0.1.49-linux-amd64.deb |
Debian / Ubuntu(amd64),依赖见包内 control |
| Linux | Moo-Fleet-0.1.49-linux-x86_64.AppImage |
通用,chmod +x 后直接运行,不依赖系统库版本 |
Gitee 上少一个文件是正常的:Gitee 单个附件上限 100 MiB,NSIS 安装版 107.9 MiB 传不上去,只在 GitHub 发布;Gitee 侧提供免安装的便携版,功能一致。其余三个包两边都有。要 Windows 安装版,直接去 GitHub Releases · v0.1.49 下 Moo-Fleet-0.1.49-windows-x64-setup.exe。
说明
- macOS 包为 ad-hoc 签名的内测包,未经公证;请用 DMG 内的「安装 Moo Fleet(内测)」,不要手动拖进「应用程序」(下载隔离属性会导致应用无法启动)。Apple Silicon 与 Intel 请选对应架构的 DMG。
- Windows 两个包未做 Authenticode 签名(没有证书),首次运行会被 SmartScreen 拦一次,需要「更多信息 → 仍要运行」。Linux 没有系统级代码签名机制,核对
SHA256SUMS-desktop-0.1.49.txt即可。 - 本版没有新增遥测。分析页只读本机 git 仓库,不发任何网络请求。
- 会话删除「只在这台电脑忽略」的记录存在
config/session-ignores.json,不进备份仓;想让它重新同步,删掉对应条目即可。
验证
- 类型检查、
vue-tsc、ESLint 与生产构建全部通过;126 个文件 / 1245 个用例全绿。 - macOS 包已装进
/Applications实跑:0.1.49 / build 149、arm64、隔离属性 0 处、codesign通过、窗口完整渲染(仓库 54、待推送 2、待拉取 4),7 个只读接口全 200,日志无错。 - 桌面版载荷逐个解包核对:deb 的
control版本 0.1.49、win-unpacked/linux-unpacked内package.json均为 0.1.49,服务端 bundle 哈希与本地构建一致,客户端 39 个文件零差异。 - 界面断言 387 项(真机跑,全部通过):消息归属 4 条与抽屉归属 6 条、暂存快照 2 条、键盘可达性、日柱窗口边界。
- 变异验证(确认断言真的会拦):删掉同步前的所有权检查 → 「同步被拒绝」挂;
/stage退回只做 id 转换 → 「过期快照应 409」挂;冲突守卫改if (false && …)→ 「冲突不允许暂存」挂;stash 还原改回裸throw→ 「改动必须回到工作区」挂;热力图不画未来日期这一条改回画 → 恰好 4 条新断言挂、其余不动;窗口读回不归位 → 反向区间用例挂。 - 已实测的反例:
git 2.54上「空仓库取消暂存必失败」不成立(git init后add再reset --退出码 0),所以这条没有改动。