Когда brew link останавливается из-за того, что путь уже существует, сначала определите, кому принадлежит этот путь. Если это символическая ссылка из другой формулы Homebrew, отвяжите эту формулу; если это несвязанный файл, изучите результаты пробного запуска Homebrew перед тем, как рассматривать перезапись. Конфликт не означает, что новую формулу не удалось установить: возможно, она уже находится в своем кеге в ожидании безопасного связывания с общим префиксом Homebrew. Справочное руководство Homebrew brew
О чем сообщает текст конфликта
Формула Homebrew устанавливается в версионированный кег (keg), а команда brew link создает символические ссылки в общие каталоги, такие как bin, lib и include. В сообщении об ошибке обычно указывается целевой путь, а также может говориться, что он принадлежит другой формуле или уже существует. Согласно документации Homebrew, brew link связывает установленные файлы с общим префиксом, в то время как brew unlink удаляет ссылки формулы из этого префикса. Справочное руководство Homebrew brew
Безопасный следующий шаг зависит от принадлежности пути. Замена символической ссылки Homebrew может изменить формулу, предоставляющую команду или библиотеку. Замена несвязанного файла может повлиять на программное обеспечение вне Homebrew. Внимательно прочтите текст ошибки полностью и не используйте --overwrite как универсальный способ решения проблем.
Проверьте формулу и конфликтующий путь
Вместо FORMULA укажите имя формулы, отображаемое в сообщении о неудачной попытке связывания. Команда brew info может показать сведения о формуле, включая признак keg-only; brew list выводит сводку по файлам в текущем кеге. Вы также можете запросить ее активный префикс, не прописывая вручную путь расположения Homebrew для процессоров Mac на Intel или Apple Silicon:
brew info FORMULA
brew list FORMULA
brew --prefix FORMULA
Если в ошибке указано, что существующий целевой объект — это символическая ссылка, принадлежащая другой формуле, обратите внимание и на имя этой формулы. Сообщение о конфликте может содержать прямое предложение выполнить brew unlink OTHER_FORMULA. Если целевой объект является обычным файлом, ссылкой из cask или объектом с неясным владельцем, остановитесь и разберитесь, прежде чем вносить изменения. Не удаляйте его только потому, что Homebrew сообщает о коллизии.
Разрешение конфликта с объектом другой формулы
Если целевой объект принадлежит другой формуле и вы хотите, чтобы конфликтующий путь предоставляла новая формула, отвяжите старую формулу, а затем свяжите нужную:
brew unlink OTHER_FORMULA
brew link FORMULA
Отвязка удаляет символические ссылки этой формулы из префикса; кег при этом не удаляется. При необходимости старую формулу можно будет снова связать позже. Документация Homebrew также описывает отвязку и повторное связывание как способ временно отключить формулу. Справочное руководство Homebrew brew
Если другая формула все еще требуется, помните, что ее отвязка может сделать ее команды или файлы недоступными через общий префикс. Избегайте беспорядочной отвязки нескольких пакетов наугад. Если конфликт явно не связан с символической ссылкой другой формулы, продолжите с пробного запуска и проверьте каждый перечисленный путь.
Предварительный просмотр перед использованием --overwrite
Параметр Homebrew --overwrite удаляет уже существующие в префиксе файлы в процессе связывания. Параметр --dry-run выводит список файлов, которые были бы связаны или удалены, не изменяя их на самом деле. Сначала выполните предварительный просмотр операции:
brew link --overwrite --dry-run FORMULA
Внимательно изучите пути. Если в списке есть файлы, которые, как вы знаете, требуются другой утилите, или что-либо за пределами ожидаемого префикса Homebrew, не продолжайте, пока не выясните их владельца и назначение. Если в предварительном просмотре отображаются только те файлы, которые вы намерены заменить, выполните саму команду:
brew link --overwrite FORMULA
Это приведет к изменению путей в общем префиксе. Предварительный просмотр служит точкой принятия решения; сам по себе он не разрешает конфликт. Справочное руководство Homebrew brew
Если формула имеет статус keg-only
Отдельное сообщение может указывать на то, что формула является keg-only и должна связываться с флагом --force. Статус keg-only означает, что Homebrew хранит формулу исключительно в ее собственном кеге, не связывая ее с общим префиксом. Homebrew использует такой подход, чтобы избежать замещения системного ПО macOS или конфликтов с другими формулами. Ознакомьтесь с причиной и рекомендациями по использованию с помощью команды brew info FORMULA. FAQ по Homebrew
Не добавляйте --force только потому, что обычное связывание сообщило о конфликте путей: флаг --force разрешает связывание формулы со статусом keg-only; он не означает, что конфликтующие пути можно безопасно перезаписывать. Homebrew не рекомендует выполнять принудительное связывание зависимостей keg-only на глобальном уровне, поскольку сторонние сборки и системные команды могут в таком случае использовать непредусмотренную зависимость. Если для сборки требуется утилита или библиотека keg-only, Homebrew рекомендует указывать префикс этой формулы непосредственно для сборки, а не открывать к ней глобальный доступ. Руководство Homebrew по keg-only зависимостям
Проверка результата и когда следует остановиться
После разрешения конкретного конфликта проверьте статус связывания формулы и повторите попытку только при необходимости:
brew list --versions FORMULA
brew link FORMULA
Если формула уже связана, Homebrew может просто сообщить об этом вместо повторного создания ссылок. Если связывание по-прежнему завершается ошибкой, используйте новое сообщение для определения оставшегося пути; не повторяйте перезапись вслепую. Если целевой объект явно не управляется Homebrew или пробный запуск показывает файлы, которые нельзя безопасно заменить, оставьте связывание незавершенным и сначала исследуйте использующую их программу. Кег остается отдельной установкой независимо от наличия ссылок в префиксе, поэтому установленная формула будет доступна для диагностики, даже если процесс связывания не завершен.