清单优先,不是窗口优先
一次看到全部仓库的分支、Dirty、Staged、Ahead / Behind、Stash、最近 Tag 与提交。冲突、进行中操作、分叉、有改动、有远端差异的仓库默认排在最前。
macOS · Linux · Windows — v0.2.0
Moo Fleet 是本地优先的多仓库 Git 工作台。它把一台电脑里的 Git 仓库和本机 Claude / Codex 会话收进同一张清单,日常操作按安全边界执行:不托管代码,不替代 IDE, 也不替你做冲突决策。
界面截图由隔离夹具生成,仓库名与提交均为虚构数据。
暂存一批文件(0.1.51 为 46–64 ms)
取消暂存(原 37–39 ms)
读取文件清单(原约 20 ms)
仪表盘全量扫描(1.5 s 内复用 0.7–1.3 ms)
0.2.0 发版实测 · 20 仓合成舰队 · 本机 macOS · 数字为端到端请求耗时
Why another Git UI
常规客户端服务单个仓库。Fleet 先回答另一个问题:这台电脑上,还有哪些仓库需要处理。
一次看到全部仓库的分支、Dirty、Staged、Ahead / Behind、Stash、最近 Tag 与提交。冲突、进行中操作、分叉、有改动、有远端差异的仓库默认排在最前。
Pull 只允许 fast-forward;Push 先 Fetch、复核远端并用明确 refspec,永不 force。每次写操作前重新取状态,防止过期快照落到真实的索引和工作区。
自动发现本机 Claude / Codex 会话,用自己的私有 Git 仓跨电脑备份。本机 JSONL 是真相源,只有真正分叉或跨机删除时才需要你决定。
Fleet
扫描、分组、批量执行,都围绕「今天要先动哪个仓库」展开。
Workbench
文件、Diff、分支和提交在同一个视图里对齐,不需要来回切窗口。
History & Inspection
只读的部分做到能查清,会改变仓库状态的动作才需要确认。
汇集本地分支、远端跟踪分支、Tag 与 HEAD 可达提交,也能单独浏览某个分支。分页固定读取起点,翻页不会漂移。
按提交消息、作者姓名 / 邮箱和 SHA 前缀搜索完整范围,而不是只过滤当前页。
两个本地或远端跟踪分支对比来源独有提交、累计端点差异与单条提交;待拉取清单基于最近 Fetch 的本地引用,不自动 Pull。
从工作区或提交进入单文件历史,跨重命名查看当时路径与 Diff;Blame 显示行归属,点击作者或 SHA 可追溯。
预览来源、目标与待合入提交后确认;默认快进,也可始终生成合并提交。冲突回到工作区处理,不自动切换、Push 或删除来源。
Reflog 阅读 HEAD 或本地分支的引用移动,仅只读不回滚;Tag 可建轻量 / 附注并推送或删除远端;Stash 支持查看、应用、pop 与永久删除。
AI Sessions
不是云端同步:用你自己管理的私有 Git 仓库,把本机会话备份到另一台电脑。
Appearance
红 = 冲突或失败,黄 = 待处理,蓝 = 远端差异,绿 = 同步。换主题只改配色,不改意思。
Boundaries
这些不是设置项,是产品默认行为。用户工作区是最高价值数据,普通 Git 功能不允许用破坏性捷径实现。
GIT_FLEET_HOME 后,配置、操作记录、凭据与备份绑定统一落在该目录,便于隔离验证。Analytics
按时间段和仓库范围统计提交热力图、代码量、非上班时间、活跃度与排行。仓库范围支持搜索、多选、全选与清空,应用后整页重算,并写入本机配置。
按天聚合,跨时区的提交按作者当时那一天归属;窗口结束日是未来日期时,只画已经发生的日子。
按仓库与时间段统计增删行数,单独看非上班时段的提交占比,不会把「深夜提交」混进总量里。
跨仓库看提交分布,找出真正活跃的仓库;结果带缓存与增量窗口,重新统计不会每次跑满全量。
Download
安装包托管在 Gitee 与 GitHub Release,不在本站转存。macOS 两个 DMG 已签名、公证并装订票据;Windows 两件未做代码签名。
0.2.0 这一版:勾选的新文件可整批删除;暂存 25 ms、取消暂存 17 ms、文件列表 10 ms(20 仓合成舰队实测)。
WKWebView 原生壳 · 内置官方 Node 运行时
Developer ID 签名 + Apple 公证 + 票据已 staple:双击挂载、拖进「应用程序」即可,不需要右键打开或清除隔离属性。
f80b4e29f29c9ec23253010ff0ad495685c912781f2c76184adb94595224a3df
f3cbb65dcbc19d4f402c6cf06e6607da0bc1cb9fb821ce7af876c61cf7a05650
Electron 外壳 · x86_64
AppImage 先 chmod +x。部分发行版默认禁用非特权 user namespaces,需要启用或加 --no-sandbox;deb 安装会正确设置 chrome-sandbox 权限。
4a608a7130f7fce97db05794c7f7dfb9acd47d01c9ca8cf2d253364d606c4d60
64084714d579b566ed6e9681e65223f650b7099276f0d4553bafe4cf3b9fd0ad
Electron 外壳 · x64
两件均未做 Authenticode 签名,首次运行 SmartScreen 会提示「未知发布者」:点「更多信息 → 仍要运行」。安装版约 107.6 MiB,超过 Gitee 单文件 100 MiB 上限,所以只在 GitHub 发布。
184fb2408c3cf502dc1a7d00d495d0bbf33eecb8d4d14ee6b811e73789300796
7d1d4a0a02d374d569e81d5f35be7b46982b44fe5bd4eab2986bcf59b1b1c69d
下载对应芯片的 DMG,双击挂载,把「Moo Fleet」拖进「应用程序」,再双击打开。
deb 直接安装;AppImage 赋予执行权限后运行。
sudo apt install ./Moo-Fleet-0.2.0-linux-amd64.deb chmod +x Moo-Fleet-0.2.0-linux-x86_64.AppImage ./Moo-Fleet-0.2.0-linux-x86_64.AppImage
运行安装版选择安装目录,或直接打开免安装单文件;SmartScreen 提示时选择「仍要运行」。
FAQ
还有别的想问,去仓库开 issue。
定位不同。常规客户端围绕「当前打开的仓库」组织界面;Fleet 围绕「这台电脑上所有仓库的状态」组织清单,并把本机 Claude / Codex 会话备份放进同一个应用。它也提供分支、Diff、Hunk、合并、冲突、Tag、Stash、Blame、Reflog 这些日常能力,但不会托管代码、不会替代 IDE,也不会替你决定冲突怎么解。
Pull 只允许 fast-forward,推永远不 force。Push 前会先 Fetch、复核远端状态并使用明确 refspec;每次写操作前都会重新核对仓库、分支、HEAD 和 upstream。不能安全执行时会停下并说明原因,不会自动用 reset / clean 之类的捷径绕过。
已跟踪文件如果仍存在,当前内容先移入系统废纸篓,再恢复 Git 版本;已删除的跟踪文件直接恢复;未跟踪文件进废纸篓。已暂存、冲突、复杂重命名等高风险状态会被拒绝,交给你在外部处理。
你自己准备一个私有 Git 仓库作为备份位置,Fleet 只读取它自己的 origin,不保存你填写的地址。本机 JSONL 是真相源,备份仓是 Fleet 管理的派生副本:内容相同或只有严格前后延伸时自动对齐,真正分叉或跨机删除时才让你选择。远端不可用不会阻塞本机备份,未推送的提交会在后续同步时继续上传。
不需要账号。除了 Fetch / Push / 克隆 / 检查更新这些本来就需要网络的动作,其余功能都在本机完成。本地服务只监听 127.0.0.1,写接口还要求 session token 并校验可信 Origin、Host 与受信任根目录。
DeepSeek Key 只保存在本机 GIT_FLEET_HOME/deepseek_token 或进程环境里。Git 凭据交给 SSH Agent、系统钥匙串或 Git Credential Manager;Fleet 禁止交互式凭据提示,也不保存托管平台账号、密码、Token 或 SSH 私钥。
两个独立安装包,不提供 Universal 2。M 系列芯片下 arm64 的 DMG,Intel 机器下 x64 的 DMG。两者都是 Developer ID 签名并通过 Apple 公证,票据已装订在 App 与 DMG 上。
Windows 两个包目前没有做 Authenticode 代码签名,这不是下载损坏。首次运行时会遇到 SmartScreen,点「更多信息 → 仍要运行」即可。macOS 版不受影响。
先确认已经 chmod +x。部分发行版默认禁用非特权用户命名空间,Electron 的沙箱会因此启动失败,可以启用 user namespaces,或在命令后加 --no-sandbox。用 deb 安装则不需要这一步。
macOS 把「应用程序」里的 Moo Fleet 拖进废纸篓;Windows 走应用卸载或直接删除程序目录;Linux 用包管理器卸载或删除 AppImage。配置、操作记录、会话备份绑定留在上面「数据目录」里,需要彻底清理时手动删除该目录即可。