昨天升级 macOS 27 Golden Gate 之后,我被 Claude Code 和 VSCode 同时上了一课。
前者一直报 Git is required for local sessions,后者的源代码管理面板直接说 git 没装;可我在终端里跑 git status,一切正常。
这就很怪。最后排下来,问题不是 Git 真没装,而是系统里藏着一个“幽灵 git”。
先说结论
macOS 27 取消了 Rosetta 2,不再运行 Intel(x86_64)二进制。
如果你的 PATH 里有一个很早以前用 Homebrew 装的老 git,GUI 应用先找到它、试着执行、执行失败,就会误报“Git 不存在”。即使后面还有一个好好的系统 git,也救不回来。
终端里没事,是因为 .zshrc 里 Homebrew 的新路径把老路径覆盖了;GUI 应用不一定走这套,所以表现完全不同。
先说结论:删掉那个旧的
/usr/local/bin/git,问题通常就没了。
怎么确认
先把 PATH 里所有叫 git 的东西列出来:
echo $PATH | tr ':' '\n' | while read dir; do
[ -e "$dir/git" ] && echo "$dir/git" && ls -la "$dir/git"
done
如果你看到类似这种输出,基本就对了:
/usr/local/bin/git
lrwxr-xr-x 1 you admin 14 Jun 28 2017 /usr/local/bin/git -> ../git/bin/git
重点看时间:2017 年。这通常就是 Intel 时代留下的软链接。
再直接跑一下它:
/usr/local/bin/git --version
如果报 zsh: bad CPU type in executable,那就是它。
为什么终端没事
因为终端和 GUI 应用拿到的环境变量不一样。
- 终端会读 shell 配置,把
/opt/homebrew/bin之类的新路径放前面 - GUI 应用更容易吃到系统级 PATH
- 所以终端里好好的,图形界面里却像“没装 git”
这类问题最烦人的地方就在这里:不是命令没装,是命令先被一个坏掉的老版本抢跑了。
修复
直接删掉这个软链接:
rm /usr/local/bin/git
删完后,/usr/bin/git 这个 Apple 自带的系统 git 还在,GUI 应用一般就会恢复正常。
如果你还想继续用 Homebrew 版 git,再重新装一个 ARM 版就行。
顺手清理一下别的 Intel 遗留物
遇到这个问题,说明系统里可能还有别的 Intel 老工具。
可以顺手扫一遍:
echo $PATH | tr ':' '\n' | while read dir; do
for f in "$dir"/*; do
[ -f "$f" ] && [ -x "$f" ] && \
file "$f" 2>/dev/null | grep -q "x86_64" && \
echo "Intel: $f"
done
done 2>/dev/null
我自己还翻出一个 thefuck 也是 Intel 版,每次开终端都先报一行 bad CPU type。brew reinstall thefuck 之后就老实了。
如果不是 git,也是别的工具
排查逻辑是一样的:
- 先看
PATH里有没有同名老工具 - 再看是不是 Intel 二进制
- 最后把它删掉或换成 ARM 版
GUI 应用说“没装”,不一定是真的没装。很多时候,只是你被一个幽灵旧版本挡路了。