当 brew link 因路径已存在而停止时,首先确定该路径的所有者。如果它是来自另一个 Homebrew formula 的符号链接,请取消链接该 formula;如果是一个无关的文件,在考虑覆盖之前请先检查 Homebrew 的试运行结果。发生冲突并不意味着新 formula 安装失败:它可能已经存在于其 keg 中,等待安全地链接到 Homebrew 的共享前缀中。Homebrew 的 brew 手册

冲突信息告诉你什么

Homebrew formula 安装在带版本号的 keg 中,而 brew link 会在共享目录(如 bin、lib 和 include)中创建符号链接。该错误通常会指出一个目标路径,并可能说明它属于另一个 formula 或它已经存在。Homebrew 文档中说明 brew link 用于将已安装的文件链接到其前缀中,而 brew unlink 则从该前缀中移除 formula 的链接。Homebrew brew 手册

下一步的安全操作取决于归属权。替换 Homebrew 符号链接可以切换由哪个 formula 提供某个命令或库。替换无关的文件可能会影响 Homebrew 之外的软件。请完整阅读错误信息,切勿将 --overwrite 视为通用的修复开关。

检查 formula 和冲突路径

将失败的链接命令中显示的 formula 名称替换到 FORMULA 处。brew info 可以显示 formula 的详细信息,包括它是否为 keg-only;brew list 概述当前 keg 中的文件。你还可以查询其活动前缀,而无需对 Mac 的 Intel 或 Apple 芯片 Homebrew 路径进行硬编码:

brew info FORMULA
brew list FORMULA
brew --prefix FORMULA

如果错误提示现有目标是属于另一个 formula 的符号链接,也请记下该 formula 的名称。冲突信息可能会直接提供 brew unlink OTHER_FORMULA 的建议。如果目标是普通文件、来自 cask 的链接,或者所有者不明的文件,请在更改之前暂停并调查。不要仅仅因为 Homebrew 报告冲突就将其删除。

解决属于另一个 formula 的冲突

当目标属于不同的 formula,并且你希望新 formula 提供该冲突路径时,请取消链接旧 formula,然后链接所需的 formula:

brew unlink OTHER_FORMULA
brew link FORMULA

取消链接会从前缀中移除该 formula 的符号链接;它不会卸载其 keg。如果需要,稍后可以再次链接旧 formula。Homebrew 还将取消链接和重新链接记录为临时禁用 formula 的一种方法。Homebrew brew 手册

如果仍然需要另一个 formula,请记住取消链接可能会使其命令或文件无法通过共享前缀访问。避免投机性地取消链接多个软件包。对于不明确是另一个 formula 符号链接的冲突,请继续进行试运行并检查列出的每个路径。

使用 --overwrite 之前先预览

Homebrew 的 --overwrite 选项会在链接时删除其前缀中已存在的文件。其 --dry-run 选项会列出将要链接或删除的文件,而不会实际更改它们。首先预览请求的操作:

brew link --overwrite --dry-run FORMULA

仔细检查这些路径。如果列表中包含你确认是其他工具所需的文件,或属于预期 Homebrew 前缀之外的任何内容,在了解其所有者和用途之前切勿继续。如果预览仅包含你打算替换的文件,请运行实际命令:

brew link --overwrite FORMULA

这将更改共享前缀中的路径。预览是做决定的节点;它本身并不解决冲突。Homebrew brew 手册

如果 formula 是 keg-only

另一条单独的消息可能会提示该 formula 为 keg-only,必须使用 --force 进行链接。Keg-only 意味着 Homebrew 将该 formula 保留在其自己的 keg 中,而不是链接到公共前缀中。Homebrew 采用这种安排是为了避免遮蔽 macOS 软件或与另一个 formula 发生冲突。查看 brew info FORMULA 获取原因和任何使用指导。Homebrew 常见问题解答

不要仅仅因为普通链接报告路径冲突就添加 --force:--force 允许链接 keg-only formula;这并不意味着冲突的路径可以安全覆盖。Homebrew 建议不要在全局范围内强制链接 keg-only 依赖项,因为不相关的构建和系统命令可能会因此解析到不同的依赖项。对于需要 keg-only 工具或库的构建,Homebrew 建议在该构建中使用其 formula 前缀,而不是将其暴露在全局中。Homebrew 的 keg-only 依赖项指南

确认结果并知晓何时停止

解决特定冲突后,检查 formula 的链接状态,仅在必要时重试:

brew list --versions FORMULA
brew link FORMULA

如果它已经链接,Homebrew 可能会报告该状态而不是重新创建链接。如果链接仍然失败,请使用新错误来识别剩余的路径;不要盲目重复覆盖。当目标显然不受 Homebrew 管理,或者试运行显示了你无法安全替换的文件时,请保持链接未解决状态,并首先调查归属软件。Keg 与其在前缀中的链接是分开安装的,因此即使链接未完成,已安装的 formula 仍可用于诊断。

来源