最可靠方式是用 brew bundle dump --force --global 生成完整 brewfile,需提前 mas signin、确保语法正确(brew/cask/mas 分类声明)、homebrew 已初始化且包名未过时,再在新机运行 brew bundle install 还原。
直接用 brew bundle 配合正确参数生成完整清单,再在新机上执行安装,是目前最可靠、可复现的方式。它能覆盖命令行工具、gui 应用和 mac app store 软件,但默认行为容易漏项,关键在参数和语法细节。
生成完整 Brewfile 的必要操作
默认 brew bundle dump 只导出 brew 类型公式,cask 和 mas 安装的软件不会出现。要真正“全量”导出,必须加两个参数:
-
--global:包含当前用户所有层级安装项(含非 root 用户安装的 cask/mas) -
--force:强制重写 Brewfile,避免跳过已存在但内容不全的文件
此外,如果用了 mas(比如 Xcode、1Password、Things),需提前运行 mas signin your@apple.com,否则 dump 会静默跳过它们。
Brewfile 语法必须严格分类
Homebrew-bundle 不会自动识别类型,写错就报错或跳过。三类声明必须分开、准确、无歧义:
-
brew "ripgrep"→ 命令行工具(来自 homebrew-core) -
cask "visualstudiocode"→ dmg/pkg 安装的 GUI 应用(注意不是brew "visualstudiocode") -
mas "1440147259"→ Mac App Store 应用,ID 必须是纯数字(查 ID 用mas search code)
tap 声明(如 tap "homebrew/cask-versions")要放在 Brewfile 最顶部,且对应 tap 必须已通过 brew tap 启用,否则后续 cask 可能无法解析。
新机安装前的关键准备
直接运行 brew bundle install 很可能失败,常见原因不是 Brewfile 写错,而是环境没就绪:
- 先确保 Homebrew 已成功初始化:
brew update必须无报错,否则 bundle 会静默忽略部分条目 - 检查 Brewfile 中是否存在已废弃包名,例如
brew "python@3.9"(Sonoma 后官方已移除),需手动改为brew "python@3.11"或删掉让 Homebrew 自选 - 遇到
No available formula with the name "xxx",别猜,直接终端跑brew search xxx看是否改名、移到 cask,或已归档
迁移后 GUI 应用打不开怎么办
这不是 brew bundle 的问题,而是 macOS Gatekeeper 对跨设备安装的 app 做了安全限制。常见表现是双击图标弹出“已损坏,无法打开”。
解决方法很简单:右键点击应用图标 → “显示简介” → 勾选“仍要打开”;或终端执行:
xattr -rd com.apple.quarantine /Applications/YourApp.app适用于 Rectangle、VS Code、TablePlus 等所有 cask 安装的图形应用。注意,此操作仅需一次,无需重复。











