答案是show命令依赖本地Git缓存而非实时镜像源;“Already up-to-date”仅表示Git拉取完成,但新包未被解析进索引,需检查git pull是否完整、缓存是否清除、HOMEBREW_BOTTLE_DOMAIN是否配置正确,并直连镜像站比对提交时间验证同步状态。

show命令输出和镜像源不同步,是因为它查的是本地 Git 仓库状态,不是远程镜像源
你执行 brew update 或 brew search 时看到的包列表、版本号、更新时间,全部来自本地 Git 仓库缓存(homebrew-core 等),而不是实时从镜像站拉取。所谓“不同步”,其实是本地 Git 仓库没及时 git pull,和镜像源本身是否最新无关。
为什么 brew update 显示“Already up-to-date”,但 brew search 找不到新包?
这是最典型的“假同步”现象——Git 仓库确实拉下来了,但新包信息还没被 Homebrew 解析进本地索引。常见原因包括:
-
brew update成功但中途被 Ctrl+C 中断,导致索引未重建 - 切换镜像后没清空旧缓存:
rm -rf $(brew --cache)可强制刷新 - Homebrew 版本太老(
brew --version小于 4.0),不支持新版镜像的元数据格式 -
HOMEBREW_BOTTLE_DOMAIN环境变量未设或指向错误地址,导致二进制包下载失败,进而跳过部分索引生成步骤
如何验证镜像源是否真同步?别信 show,直接查 Git 提交时间
show 类命令(如 brew info --json=3、brew search --desc)依赖本地缓存,不能反映镜像站真实状态。要确认镜像是否同步,必须绕过 Homebrew,直连 Git 仓库:
- 进入 core 仓库:
cd "$(brew --repo homebrew/core)" - 查看最近提交:
git log -1 --format="%h %ar %s",对比清华镜像站页面 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core/ 的“Last updated”时间 - 若本地 commit 时间比镜像站晚 >2 小时,说明你没真正拉到最新;执行
git pull强制同步
切换镜像后 brew update 卡住或报错,优先检查这三处
卡在 Updating Homebrew... 不是网络慢,而是 Git 配置冲突或权限问题:
- 确认所有仓库都切了同一镜像:主 repo、
homebrew-core、homebrew-cask,漏一个就会 fallback 到 GitHub - 检查 SSH 配置:
ssh -T git@github.com若成功但镜像用 HTTPS,说明本地 Git 默认走 SSH,需加-c core.sshCommand=none临时禁用 - Mac 上若装过 Xcode 命令行工具但未授权,
git会弹窗卡住——运行xcode-select --install再试
git pull 和 brew update 必须成对执行,且中间不能中断。

















