2015-09-23 11 views
15

Uso regolarmente Atlassian SourceTree (su Mac OS X) per avviare FileMerge per risolvere i conflitti di merge. All'improvviso ha smesso di funzionare: quando faccio clic destro e selezioni Resolve Conflicts > Launch External Merge Tool, FileMerge si avvia, crea i suoi file intermedi, quindi esce immediatamente. SourceTree interpreta il completamento del processo di unione.FileMerge si chiude immediatamente dopo l'avvio da SourceTree

Qual è il problema e come posso eseguire il debug/risolvere il problema?

Ho notato che una domanda precedente 'SourceTree filemerge quits immediately and creates 4 files. How to fix it?' non affronta questo particolare scenario (per uno, dice FileMerge si chiude nel titolo, ma nel corpo dice FileMerge visualizza/dev/null come uno dei pannelli. , il mio conflitto di unione non è dovuto a un file rimosso.)

risposta

6

Se Xcode si è aggiornato di recente, potrebbe essere necessario accettare i nuovi termini della licenza. Se non hai accettato i termini della licenza, FileMerge (quando lanciato da SourceTree) si chiuderà immediatamente.

Per verificare questo, aprire una shell ed eseguire come al solito utente:

$ opendiff 

Se la licenza è il problema, vi dirà. Per accettare i nuovi termini di licenza, è necessario eseguire diff aperta utilizzando sudo:

$ sudo opendiff 

Dopo aver accettato le condizioni di licenza, è ora possibile riprovare lanciando FileMerge da SourceTree utilizzando Resolve Conflicts > Launch External Merge Tool. FileMerge dovrebbe avviarsi e comportarsi normalmente.

+3

Dice 'opendiff xcode-select: errore: lo strumento 'opendiff' richiede Xcode, ma la directory di sviluppo attiva '/ Library/Developer/CommandLineTools' è un'istanza di strumenti da riga di comando' – KarenAnne

25

Per diagnosticare il problema, ho eseguito opendiff dal Terminale. Ho ricevuto il seguente errore:

xcode-select: error: tool 'opendiff' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

da risolvere:

  1. Aprire Xcode> Preferenze> Locali
  2. Fare clic sulla casella a discesa accanto riga di comando Strumenti e selezionare la corrente Versione Xcode. (Questo è stato vuoto per me, perché avevo da poco installato Xcode su un nuovo Mac.)

Command Line Tools

  1. Run opendiff nel Terminal di nuovo, e l'errore precedente non dovrebbe appaiono più a lungo.

Ora FileMerge si aprirà correttamente da SourceTree quando si fa clic su Unisci lancio esterno Strumento.

+0

Problema risolto, soluzione facile grazie bud! :) – emotality

+0

Grazie mille. Ho avuto lo stesso problema e ho capito che deve essere correlato a XCode, semplicemente non sapevo come risolverlo. – Ray

+0

@Ray Sei il benvenuto. :) – ChrisJF

4

Per me SourceTree non ha nemmeno avviato FileMerge. Quando si fa clic su Avvia strumento di unione esterno non è successo nulla.

Inoltre, in esecuzione opendiff nel Terminal ha funzionato come previsto:

$ opendiff 
opendiff[64176:5561154] too few arguments 
opendiff[64176:5561154] usage: opendiff file1 file2 [-ancestor ancestorFile] [-merge mergeFile] 

Cosa mi ha aiutato è stato configurare manualmente SourceTree utilizzare FileMerge tramite il comando opendiff con i seguenti argomenti: $LOCAL $REMOTE -ancestor $BASE -merge $MERGED

SourceTree manually configure to use opendiff

In questo modo, SourceTree apre FileMerge come previsto.

+0

Stessa cosa qui, ma non so perché non ha funzionato quando è appena impostato il file merge – MegaManX

3

questo funziona anche per risolvere il messaggio "Xcode-select: errore: strumento 'opendiff' richiede Xcode, ma directory sviluppatore attivo '/ Library/Developer/CommandLineTools' è un'istanza strumenti a linea di comando":

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer 
+1

ad es., Assicurati che la tua selezione xcode sia effettivamente puntata al sottodiritto '/ Contents/Developer' di un'istanza reale di Xcode . Utile, grazie –

+0

La mia istanza non ha una tale directory, qualche consiglio? – Matt

+0

Hai scaricato xcode dall'appstore? – fabe