J'utilise régulièrement Atlassian SourceTree (sur Mac OS X) pour lancer FileMerge pour résoudre les conflits de fusion git. À l'improviste, il a cessé de fonctionner: quand je clique avec le bouton droit et sélectionne Resolve Conflicts > Launch External Merge Tool
, FileMerge se lance, crée ses fichiers intermédiaires, puis se ferme immédiatement. SourceTree interprète cela comme le processus de fusion étant terminé.
Quel est le problème et comment puis-je le déboguer/le corriger?
Je note qu'une question précédente " SourceTree filemerge se ferme immédiatement et crée 4 fichiers. Comment y remédier? " ne traite pas de ce scénario particulier (pour commencer, il dit que FileMerge se ferme dans le titre, mais dans le corps, il indique que FileMerge affiche/dev/null comme l'un des panneaux. De plus, mon conflit de fusion n'est pas dû à un fichier supprimé.)
Pour diagnostiquer le problème, j'ai exécuté opendiff
à partir du terminal. J'ai reçu l'erreur suivante:
xcode-select: erreur: l'outil 'opendiff' nécessite Xcode, mais le répertoire de développeur actif '/ Library/Developer/CommandLineTools' est une instance d'outils de ligne de commande
Résoudre:
opendiff
dans Terminal, et l'erreur ci-dessus ne devrait plus apparaître.FileMerge s'ouvrira désormais correctement à partir de SourceTree lorsque vous cliquez sur Lancer l'outil de fusion externe .
Pour moi, SourceTree n'a même pas lancé FileMerge. En cliquant sur Lancer l'outil de fusion externe rien ne s'est produit.
De plus, l'exécution de opendiff
dans Terminal a fonctionné comme prévu:
$ opendiff
opendiff[64176:5561154] too few arguments
opendiff[64176:5561154] usage: opendiff file1 file2 [-ancestor ancestorFile] [-merge mergeFile]
Ce qui m'a aidé à configurer manuellement SourceTree pour utiliser FileMerge via la commande opendiff
avec les arguments suivants: $LOCAL $REMOTE -ancestor $BASE -merge $MERGED
De cette façon, SourceTree ouvre FileMerge comme prévu.
Si Xcode s'est récemment mis à jour, vous devrez peut-être accepter les nouvelles conditions de licence. Si vous n'avez pas accepté les termes de la licence, FileMerge (lorsqu'il est lancé à partir de SourceTree) se ferme immédiatement.
Pour vérifier cela, ouvrez un shell et exécutez en tant qu'utilisateur habituel:
$ opendiff
Si la licence est le problème, il vous le dira. Pour accepter les nouvelles conditions de licence, vous devrez exécuter open diff en utilisant Sudo
:
$ Sudo opendiff
Après avoir accepté les termes du contrat de licence, vous pouvez maintenant réessayer de lancer FileMerge à partir de SourceTree en utilisant Resolve Conflicts > Launch External Merge Tool
. FileMerge doit se lancer et se comporter normalement.
Cela a aidé: https://Gist.github.com/kylefox/4512777
Sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
git config --global merge.tool opendiff
Cela fonctionne également pour résoudre le message "xcode-select: error: l'outil 'opendiff' nécessite Xcode, mais le répertoire de développeur actif '/ Library/Developer/CommandLineTools' est une instance d'outils de ligne de commande":
Sudo xcode-select -s /Applications/Xcode.app/Contents/Developer