brew bundle dump 默认只记录 brew 公式,漏掉 cask、mas 和 tap;需加 --force --global 参数生成完整清单,并确保 mas 登录、Brewfile 语法正确(brew/cask/mas 分类声明)、Homebrew 已初始化且包名未过时。

brew bundle dump 生成的清单为什么装不全
因为默认只记录 brew 安装的公式,漏掉 cask(GUI 应用)、mas(Mac App Store 应用)和 tap 里的自定义源。你看到 Brewfile 里只有几十行,但实际装了上百个软件——大概率是没加 --global 或没开 --force。
实操建议:
- 用
brew bundle dump --force --global生成完整清单,--global才会包含所有用户级安装项 - 如果用了
mas装过 Xcode、Things、1Password 等,得先mas signin your@apple.com,否则dump会跳过它们 -
Brewfile中出现cask "visualstudiocode"是对的,但若写成brew "visualstudiocode"就会报错:No available formula or cask with the name "visualstudiocode"
迁移时 brew bundle install 报错 “not in Brewfile”
常见于重装系统后首次运行:Homebrew 自身没装好,或 Brewfile 里写了已废弃/重命名的包(比如老版本写 brew "node",新 Homebrew 要求显式指定 brew "node@20")。
实操建议:
- 先确保 Homebrew 已初始化:
brew update必须成功,否则bundle install会静默失败部分条目 - 检查
Brewfile里有没有带版本号的旧写法,如brew "python@3.9"—— macOS Sonoma 后官方不再维护python@3.9,得手动改成brew "python@3.11"或删掉让 Homebrew 自选 - 遇到报错
Error: No available formula with the name "xxx",直接在终端跑brew search xxx,看是否改名或移到 cask
如何让 Brewfile 同时管理命令行工具 + GUI 应用 + Mac App Store
必须靠三类声明混写,且顺序和语法不能错。Homebrew-bundle 不自动推断类型,写错就跳过或报错。
实操建议:
-
brew "ripgrep"→ 命令行工具 -
cask "rectangle"→ dmg/pkg 安装的 GUI 应用(含开源和商业) -
mas "1440147259"→ Mac App Store 应用,ID 必须是数字,不能写名字;查 ID 用mas search rectangle - 不要在
Brewfile里写注释行#开头以外的内容,比如空行后跟tap "homebrew/cask-versions"可能被忽略——tap行必须紧贴顶部,且需提前brew tap homebrew/cask-versions
迁移后某些应用打不开或图标异常
不是 brew bundle 的问题,而是 macOS Gatekeeper 和权限链没重建。特别是从 Time Machine 迁移或跨 Apple ID 登录后,cask 安装的 app 会被标记为“已损坏”,即使签名正常。
实操建议:
- 终端执行
xattr -rd com.apple.quarantine /Applications/Rectangle.app清除隔离属性(把Rectangle.app换成你的应用名) - 如果提示“无法验证开发者”,右键点应用 → “显示简介” → 勾选“仍要打开”(仅首次)
- macOS Sequoia 开始,部分 cask(如
docker、stats)需要额外授权:系统设置 → 隐私与安全性 → 完全磁盘访问,手动添加对应二进制
真正麻烦的是 mas 应用的许可状态——它不随 Brewfile 恢复。哪怕 mas install 1440147259 成功,App Store 里仍可能显示“云朵下载图标”,这时只能打开 App Store 手动点一次“打开”来激活许可。

















