2015-10-23 19 views
122

Recentemente stavo usando GitExtension 2.46, ma la versione Git che ha lo stesso è 1.9.4.msysgit.2. Disposto a utilizzare solo i comandi Git, ho disinstallato GitExtension e installato l'ultima versione disponibile di Git e KDiff3.Git: Come configurare KDiff3 come strumento di unione e strumento diff

quando faccio una fusione e hanno conflitti, ho eseguire il seguente comando:

$ git mergetool 

Poi ricevo il messaggio:

Lo strumento di unione KDiff3 non è disponibile come 'kdiff3'.

Suppongo che debba essere dal percorso KDiff3.

Ambiente

  • OS: Windows 10
  • Git 2.6.1.windows.1
  • KDiff3 0.9.98 (64 bit)

Domande:

  • Cosa devo configurare nel file .gitconfig per il comando $ git mergetool per aprire l'interfaccia grafica KDiff3 con le versioni LOCALI, REMOTE, BASE e fusa di file in conflitto?

  • Come configurato per utilizzarlo ha diff-tool?

risposta

225

Questi siti sono stati molto utili, quasi, mergetool e difftool. Ho usato la configurazione globale, ma può essere utilizzata dal repository senza problemi.Hai solo bisogno di eseguire i seguenti comandi:

git config --global --add merge.tool kdiff3 
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe" 
git config --global --add mergetool.kdiff3.trustExitCode false 

git config --global --add diff.guitool kdiff3 
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe" 
git config --global --add difftool.kdiff3.trustExitCode false 

L'uso dell'opzione trustExitCode dipende da ciò che si vuole fare quando ritorna strumento diff. Da documentation:

git-difftool invoca uno strumento diff singolarmente su ogni file. Gli errori segnalati dallo strumento diff vengono ignorati per impostazione predefinita. Utilizzare --trust-exit-code per rendere git-difftool all'uscita quando uno strumento di diffusione invocato restituisce un codice di uscita diverso da zero.

+4

Ancora, perché dovrei volere che git-difftool non esca se kdiff3 fallisce? –

+3

Per avere lo strumento diff riconosciuto da Visual Studio 2015, ho dovuto modificare questa riga 'git config --global --add diff.guitool kdiff3' a questo: ' git config --global --add diff.tool kdiff3' –

+1

@DavidTorres Probabilmente perché gli strumenti di Windows male comportati (che escono con codici non zero in caso di successo) lo rovinano per tutti. –

7

Bene, il problema è che git non riesce a trovare kdiff3 nel% PATH%.

In una tipica installazione unix tutti gli eseguibili risiedono in diverse posizioni note (/bin/, /usr/bin/, /usr/local/bin/ etc) e si può invocare un programma semplicemente digitando il suo nome in un processore shell (per esempio cmd.exe :)).

In MS Windows i programmi vengono solitamente installati in percorsi dedicati, quindi non è possibile digitare semplicemente kdiff3 in una sessione cmd e avviare kdiff3.

La soluzione difficile: dovresti dire a git dove trovare kdiff3 specificando il percorso completo a kdiff3.exe. Sfortunatamente a git non piacciono gli spazi nella specificazione del percorso nella sua configurazione, quindi l'ultima volta che ho avuto bisogno di questo, ho finito con quegli antichi "C: \ Progra ~ 1 ... \ kdiff3.exe" come se fosse tardi anni Novanta :)

La soluzione semplice: modificare le impostazioni del computer e includere la directory con kdiff3.exe in% PATH%. Quindi prova se puoi richiamarlo da cmd.exe con il suo nome e quindi eseguire git.

31

Proprio per estendere the @Joseph's answer:

Dopo aver applicato questi comandi il tuo file globale .gitconfig avrà le seguenti righe (per accelerare il processo si può semplicemente copiare nel file):

[merge] 
    tool = kdiff3 
[mergetool "kdiff3"] 
    path = C:/Program Files/KDiff3/kdiff3.exe 
    trustExitCode = false 
[diff] 
    guitool = kdiff3 
[difftool "kdiff3"] 
    path = C:/Program Files/KDiff3/kdiff3.exe 
    trustExitCode = false 
+0

Perché suggerisci di non fidarti del codice di uscita? – Alex78191

+0

@ Alex78191, la mia risposta rispecchia la risposta di Joseph e lì puoi trovare ulteriori dettagli su questa impostazione. –

+1

Mi ci è voluto molto tempo per farlo bene. 2 cose mi hanno portato fuori strada: (1) Il file '.gitconfig' che stavo modificando era _non_ quello in uso. Vedi https://stackoverflow.com/questions/2114111/where-does-git-config-global-get-written-to per identificare l'uno o gli altri caricati. (2) Non combinare 'cmd =' e 'path =' in gitconfig, TL; DR: cancella cmd e usa solo il percorso –