Lorsque brew link s’arrête parce qu’un chemin existe déjà, identifiez d’abord le propriétaire de ce chemin. S’il s’agit d’un lien symbolique provenant d’une autre formule Homebrew, déliez cette formule ; s’il s’agit d’un fichier non lié, examinez la simulation (dry run) de Homebrew avant d’envisager un écrasement. Un conflit ne signifie pas que la nouvelle formule n’a pas pu être installée : elle peut déjà être présente dans son keg, en attente d’un lien sécurisé vers le préfixe partagé de Homebrew. Manuel brew de Homebrew
Ce que le message de conflit vous indique
Une formule Homebrew est installée dans un keg versionné, et brew link crée des liens symboliques vers des répertoires partagés tels que bin, lib et include. L’erreur indique généralement un chemin cible et peut préciser qu’il appartient à une autre formule ou qu’il existe déjà. La documentation de Homebrew décrit brew link comme une commande reliant les fichiers installés dans son préfixe, tandis que brew unlink supprime les liens d’une formule de ce préfixe. Manuel brew de Homebrew
L’étape suivante la plus sûre dépend de l’appartenance du fichier. Remplacer un lien symbolique Homebrew peut changer la formule qui fournit une commande ou une bibliothèque. Remplacer un fichier tiers peut affecter des logiciels extérieurs à Homebrew. Lisez l’erreur complète et ne traitez pas --overwrite comme une option de réparation générique.
Inspecter la formule et le chemin en conflit
Utilisez le nom de la formule affiché dans la commande de liaison ayant échoué à la place de FORMULA. brew info permet d’afficher les détails de la formule, notamment si elle est « keg-only » ; brew list récapitule les fichiers du keg actuel. Vous pouvez également demander son préfixe actif sans coder en dur l’emplacement Homebrew sur Mac Intel ou Apple Silicon :
brew info FORMULA
brew list FORMULA
brew --prefix FORMULA
Si l’erreur indique que la cible existante est un lien symbolique appartenant à une autre formule, notez également le nom de cette dernière. Le message de conflit peut suggérer directement brew unlink OTHER_FORMULA. Si la cible est un fichier ordinaire, un lien provenant d’un cask ou un élément dont le propriétaire n’est pas clair, faites une pause et examinez la situation avant de la modifier. Ne la supprimez pas simplement parce que Homebrew signale une collision.
Résoudre un conflit causé par une autre formule
Lorsque la cible appartient à une formule différente et que vous souhaitez que la nouvelle formule fournisse le chemin en conflit, déliez l’ancienne formule, puis liez celle demandée :
brew unlink OTHER_FORMULA
brew link FORMULA
Le déliement supprime les liens symboliques de cette formule du préfixe ; il ne désinstalle pas son keg. L’ancienne formule pourra être reliée ultérieurement si nécessaire. La documentation de Homebrew présente également le déliement et la re-liaison comme un moyen de désactiver temporairement une formule. Manuel brew de Homebrew
Si l’autre formule reste nécessaire, n’oubliez pas que son déliement peut rendre ses commandes ou ses fichiers inaccessibles via le préfixe partagé. Évitez de délier plusieurs paquets de manière spéculative. Pour un conflit qui n’est pas clairement le lien symbolique d’une autre formule, poursuivez avec une simulation (dry run) et inspectez chaque chemin répertorié.
Prévisualiser avant d’utiliser --overwrite
L’option --overwrite de Homebrew supprime les fichiers déjà présents dans son préfixe lors de la création des liens. Son option --dry-run liste les fichiers qui seraient liés ou supprimés sans les modifier. Prévisualisez d’abord l’opération demandée :
brew link --overwrite --dry-run FORMULA
Examinez attentivement les chemins. Si la liste comprend des fichiers dont vous savez qu’ils sont nécessaires à un autre outil, ou tout élément situé en dehors du préfixe Homebrew attendu, ne continuez pas tant que vous n’en comprenez pas le propriétaire et l’utilité. Si la prévisualisation ne contient que des fichiers que vous avez l’intention de remplacer, exécutez la commande réelle :
brew link --overwrite FORMULA
Cela modifie les chemins dans le préfixe partagé. La prévisualisation constitue le point de décision ; elle ne résout pas le conflit à elle seule. Manuel brew de Homebrew
Si la formule est keg-only
Un message distinct peut indiquer que la formule est keg-only et doit être liée avec --force. Keg-only signifie que Homebrew conserve la formule dans son propre keg au lieu de la lier dans le préfixe commun. Homebrew utilise cette configuration pour éviter d’écraser des logiciels macOS ou d’entrer en conflit avec une autre formule. Consultez brew info FORMULA pour en connaître la raison ainsi que les conseils d’utilisation. FAQ de Homebrew
N’ajoutez pas --force simplement parce qu’une liaison normale signale un conflit de chemin : --force autorise la liaison d’une formule keg-only ; cela ne signifie pas que les chemins en conflit peuvent être écrasés en toute sécurité. Homebrew déconseille de forcer la liaison globale des dépendances keg-only, car des builds non liés et des commandes système peuvent alors résoudre une dépendance différente. Pour un build nécessitant un outil ou une bibliothèque keg-only, Homebrew recommande d’utiliser le préfixe de la formule pour ce build plutôt que de l’exposer globalement. Guide des dépendances keg-only de Homebrew
Confirmer le résultat et savoir quand s’arrêter
Après avoir résolu le conflit spécifique, vérifiez l’état de liaison de la formule et ne réessayez que si nécessaire :
brew list --versions FORMULA
brew link FORMULA
Si elle est déjà liée, Homebrew peut l’indiquer au lieu de recréer les liens. Si la liaison échoue toujours, utilisez la nouvelle erreur pour identifier le chemin restant ; ne répétez pas l’écrasement à l’aveugle. Lorsque la cible n’est pas manifestement gérée par Homebrew, ou que la simulation affiche des fichiers que vous ne pouvez pas remplacer en toute sécurité, laissez le lien non résolu et examinez d’abord le logiciel propriétaire. Le keg demeure une installation distincte de ses liens dans le préfixe, de sorte qu’une formule installée peut rester disponible pour le diagnostic même si sa liaison est incomplète.