web-dev-qa-db-fra.com

FileMerge se ferme immédiatement après le lancement à partir de SourceTree

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é.)

37
Greg Kopff

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:

  1. Ouvrez Xcode> Préférences> Emplacements
  2. Cliquez sur la liste déroulante à côté de Outils de ligne de commande et sélectionnez votre version actuelle de Xcode. (C'était vide pour moi car j'avais récemment installé Xcode sur un nouveau Mac.)

Command Line Tools

  1. Exécutez à nouveau 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 .

116
ChrisJF

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

SourceTree manually configure to use opendiff

De cette façon, SourceTree ouvre FileMerge comme prévu.

12
Tom Kraina

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.

8
Greg Kopff

Cela a aidé: https://Gist.github.com/kylefox/4512777

Dites au système quand les utilitaires Xcode sont en ligne:

Sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

Définissez "opendiff" comme outil de fusion par défaut dans le monde:

git config --global merge.tool opendiff

8
user3027622

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
4
fabe