J'utilisais récemment GitExtension 2.46, mais la version de Git qui en a le même est 1.9.4.msysgit.2. Désireux d'utiliser uniquement les commandes Git, j'ai désinstallé GitExtension et installé la dernière version disponible de Git et KDiff .
Lorsque je fais une fusion et que j'ai des conflits, j'exécute la commande suivante:
$ git mergetool
Puis je reçois le message:
L'outil de fusion kdiff3 n'est pas disponible en tant que 'kdiff3'.
Je suppose que ce doit être par le chemin KDiff3.
Environnement
Questions:
Qu'est-ce que je dois configurer dans le fichier .gitconfig pour la commande $ git mergetool
afin d'ouvrir l'interface graphique de KDiff3 avec les versions LOCAL, DISTANT, BASE et FUSIONNÉ d'un fichier en conflit?
Comment le configurer pour l'utiliser a-t-il diff-tool?
Ces sites ont été très utiles, presque, mergetool et difftool . J'ai utilisé la configuration globale, mais peut être utilisé par le référentiel sans problèmes. Vous devez juste exécuter les commandes suivantes:
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'utilisation de l'option trustExitCode
dépend de ce que vous voulez faire lorsque l'outil diff est renvoyé. De documentation :
git-difftool appelle un outil de différenciation individuellement sur chaque fichier. Les erreurs signalées par l'outil diff sont ignorées par défaut. Utilisez - trust-exit-code pour rendre git-difftool exit lorsqu'un outil de diff appelé est renvoyé un code de sortie non nul.
Juste pour prolonger la réponse de @ Joseph :
Après avoir appliqué ces commandes, votre fichier global .gitconfig
aura les lignes suivantes (pour accélérer le processus, vous pouvez simplement les copier dans le fichier) :
[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
Voici la réponse acceptée par @ Joseph, mais avec l'emplacement du chemin d'installation Mac par défaut, kdiff3
(Notez que vous pouvez copier et coller ceci et l'exécuter en une fois)
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add difftool.kdiff3.trustExitCode false
Eh bien, le problème est que Git ne peut pas trouver KDiff3 dans le% PATH%.
Dans une installation Unix typique, tous les exécutables se trouvent dans plusieurs emplacements bien connus (/bin/
, /usr/bin/
, /usr/local/bin/
, etc.), et on peut appeler un programme en tapant simplement son nom dans un champ. Processeur Shell (par exemple, cmd.exe
:)).
Dans Microsoft Windows, les programmes sont généralement installés dans des chemins d'accès dédiés; vous ne pouvez donc pas simplement taper kdiff3
dans une session cmd
et exécuter KDiff3.
La solution difficile: vous devez dire à Git où trouver KDiff3 en spécifiant le chemin complet de kdiff3.exe
. Malheureusement, Git n'aime pas les espaces dans la spécification du chemin dans sa configuration, donc la dernière fois que j'en ai eu besoin, je me suis retrouvé avec ces anciens "C:\Progra ~ 1 ...\kdiff3.exe" comme si c'était tard. Années 1990 :)
La solution simple: modifiez les paramètres de votre ordinateur et incluez le répertoire avec kdiff3.exe dans% PATH%. Puis testez si vous pouvez l'invoquer à partir de cmd.exe par son nom, puis exécutez Git.
Pour modifier kris ' réponse , à partir de Git 2.20 (Q4 2018), la commande appropriée pour git mergetool
sera
git config --global merge.guitool kdiff3
En effet, "git mergetool
" a appris à utiliser l'option "--[no-]gui
", tout comme "git difftool
".
Voir commit c217b9 , commit 57ba181 , commit 063f2bd (24 oct 2018) par Denton Liu (Denton-L
) .
(Fusionné par Junio C Hamano - gitster
- dans commit 87c15d1 , 30 octobre 2018)
mergetool
: accepte-g/--[no-]gui
comme argumentsConformément à la manière dont
difftool
accepte une option-g/--[no-]gui
, assurez-vous quemergetool
acceptez la même option afin de pouvoir utiliser la variablemerge.guitool
afin de trouver l'outil de fusion par défaut au lieu demerge.tool
.
J'avais besoin d'ajouter les paramètres de ligne de commande ou KDiff3 ne s'ouvrirait que sans fichiers et Me demander de base, local et distant. J'ai utilisé la version fournie avec TortoiseHg .
De plus, je devais avoir recours aux bons vieux noms de fichiers DOS 8.3.
[merge]
tool = kdiff3
[mergetool "kdiff3"]
cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED
Cependant, cela fonctionne correctement maintenant.
(En essayant de savoir comment utiliser kdiff3 de WSL git, je me suis retrouvé ici et j'ai eu les derniers éléments, alors je vais poster ma solution pour tous ceux qui trébuchent aussi en essayant de trouver la réponse.)
Étapes à suivre pour utiliser kdiff3 installé sur Windows 10 en tant qu'outil de comparaison/fusion pour git dans WSL:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
Prompt = false
[difftool "kdiff3"]
#path = kdiff3.exe
# Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
trustExitCode = false
[mergetool]
keepBackup = false
Prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false