Skip to content

Moo Fleet 0.1.34

Choose a tag to compare

@charsen charsen released this 19 Oct 14:33
· 111 commits to master since this release

本次更新

这一版解决三件与「把一个项目接进来」有关的事:检出远端分支不再被一个过严的门槛挡住,加入新仓库不用再钻进设置里翻,私有仓库克隆失败时会当场问你要账号。

检出远端分支不再要求工作区干净

以前「检出」按钮经常是灰的,即使你只是多了几个未跟踪文件。原因不是渲染出错,而是客户端与服务端都硬性要求工作区完全干净,判据里连未跟踪文件都算。

这个门槛站不住:git switch --track --create 和切到已有本地分支是同一种操作——能兼容的本地改动与未跟踪文件会被一起带过去,只有会覆盖本地内容时才拒绝,而且拒绝时分支引用、HEAD 与工作区三者都不变。

现在交给 Git 判断:

  • 有改动也能检出,兼容的改动随分支带过去;
  • 会覆盖本地内容时 Git 拒绝,界面说明原因,本地内容完好;
  • 未解决冲突、进行中操作、只读、Worktree 占用、远端引用漂移这些护栏一个都没放宽;
  • 「创建并切换」仍然要求干净工作区,但确认弹窗里可以取消勾选,只创建分支引用。

首页就能加入仓库

此前仓库舰队首页没有任何「加入仓库」入口——正常路径是头像 → 设置 → 「仓库接入」→ 滚过配置目录与扫描,才轮到克隆。克隆是加入新项目最深的一步,而它本身只是一个自包含表单。

  • 批量操作那一行的右端常驻「添加仓库」与「克隆远端」,与列表同屏可见;
  • 两者都是偶尔用一次的动作,所以默认无边框、无底色、用弱化文字色,只在悬停或键盘聚焦时显形;
  • 克隆改成独立弹窗:选根目录、填地址、按回车即可,成功后收起并提示,失败时错误留在弹窗里;
  • 设置里的「03 克隆远端仓库」已删除,克隆只有这一个入口,扫描列表下方留了一句指向。

顺带修掉两处真实缺陷:只有一个扫描目录时,表单仍停在「请选择要克隆到哪个目录」(rootId 从来没有默认值);关闭弹层后键盘焦点落到页面根部,要重新 Tab 一整圈才能回到触发按钮。

克隆私有仓库失败时,当场补填凭证

GIT_TERMINAL_PROMPT=0 之下,缺凭证的克隆只会得到一句 could not read Username,以前这句话就那样躺在弹窗底部,得自己猜到是认证问题、再去设置里找凭证入口。

现在按失败类型给下一步,而不是每次克隆都先问一遍账号:

失败类型 界面反应
该主机还没有凭证 就地展开「用户名 + 访问令牌」,主机预填、焦点直接落在用户名;保存进系统钥匙串后自动重试一次
已保存的凭证被拒绝 同一表单,提示可能已过期,用户名保留、令牌框清空
SSH 主机指纹未信任 / 公钥被拒 / 主机名解析失败 只给准确指引(如 ssh -T git@主机),不摆一个填了也没用的表单
未加密的 http 地址 提示改用 https——凭证按 protocol=https 存取,填了也命中不了
  • 凭证存在系统钥匙串,Moo Fleet 不保存副本,也不写进仓库配置;
  • 地址一改,补填面板就收起、上一次的失败信息一并清掉,避免把令牌存到另一个主机;
  • 面板展开时底部只留「取消」,「保存并重试」成为主按钮,不会再让你重复撞同一堵墙。

修复

  • 克隆失败的错误行不再带 git 的进度前缀(Cloning into 'x'...)与 fatal:,只留原因。
  • 禁用按钮上挂 title 是无效的(禁用控件不派发鼠标事件,弹不出 tooltip),改为内联说明。

说明

  • macOS 包为 ad-hoc 签名的内测包,未经公证;请用 DMG 内的「安装 Moo Fleet(内测)」,不要手动拖进「应用程序」(下载隔离属性会导致应用无法启动)。Apple Silicon 与 Intel 请选对应架构的 DMG。
  • Windows 与 Linux 包未做代码签名,首次运行可能触发系统警告。
  • 本版没有新增遥测或网络请求;凭证只在本机钥匙串与 git 之间流转。

验证

  • 类型检查、104 文件 / 880 用例、生产构建全部通过;新增 clone-auth.test.ts 14 项,branches.test.ts 换成两条真实 Git 用例(兼容改动随分支带走、冲突时拒绝且仓库三者不动)。
  • 检出放宽在临时 bare 仓上逐场景实测:未跟踪文件与兼容改动都带过去、upstream 正确建立;远端与本地对同一文件各有版本时拒绝,仍在原分支、未创建新分支、本地内容完好。
  • 克隆补填跑的是出厂产物:用已安装包自带的 Node 与 server bundle 起隔离实例,对端是一个要求 Basic 认证的真 HTTPS Git 服务。首次克隆展开面板并聚焦用户名 → 填错令牌转「凭证被拒」→ 改对令牌后不弹二次确认、克隆成功、仓库入列,钥匙串与 origin/main 跟踪都核对过。
  • 四个桌面包的载荷结构、版本、架构与体积全部通过校验;macOS 两包为 ad-hoc 签名,Windows/Linux 未签名。