186 votes

Configuration de l'outil diff avec .gitconfig

Comment configurer Git pour qu'il utilise un outil différent pour la différenciation avec le fichier .gitconfig ?

J'ai ceci dans mon .gitconfig :

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

Cela ne fonctionne pas ; cela ouvre simplement le diff de la ligne de commande ordinaire. Lorsque je fais

export GIT_EXTERNAL_DIFF=git-chdiff

puis git diff ouvrira l'outil de diffing externe (je sais donc que l'outil de diffing externe script fonctionne bien). Y a-t-il un problème avec ma configuration .gitconfig pour l'outil de diff ?

199voto

Omer Dagan Points 889

Une autre façon de le faire (à partir de la ligne de commande) :

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

Les deux premières lignes définiront le difftool et le mergetool à tkdiff - changez cela en fonction de vos préférences. La troisième ligne désactive l'invite ennuyeuse de sorte que chaque fois que vous tapez sur git difftool il lancera automatiquement le difftool.

13 votes

Je l'ai fait. git config --global diff.tool diffmerge mais quand je l'ai fait git diff myfile.txt cela me donne toujours le diff unix par défaut

0 votes

Peut-être avez-vous une configuration locale qui définit un autre outil de diff ?

1 votes

Peut-être avez-vous besoin de passer les bons paramètres à diffmerge : ce lien explique comment le faire pour meld : lien : nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy

160voto

Fredrik Pihl Points 20944

Git offre une gamme d'outils de comparaison préconfigurés "prêts à l'emploi" (kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffuse, opendiff, p4merge et araxis), et vous permet également de spécifier vos propres outils. Pour utiliser l'un des difftools préconfigurés (par exemple, "vimdiff"), vous ajoutez les lignes suivantes à votre fichier d'installation ~/.gitconfig :

[diff]
    tool = vimdiff

Maintenant, vous pourrez exécuter "git difftool" et utiliser l'outil de votre choix.

Spécifier votre propre difftool, d'un autre côté, demande un peu plus de travail, voir Comment puis-je visualiser les résultats de "git diff" avec mon outil de comparaison préféré ?

1 votes

Qu'entendez-vous par un outil de comparaison préconfiguré "prêt à l'emploi" ? Pour mettre en place un outil de comparaison externe "winMerge" qui n'est pas dans votre liste, j'ai dû faire les mêmes réglages que ceux que vous avez mentionnés dans votre message et tout a commencé à fonctionner sans aucune configuration supplémentaire. Cela signifie-t-il que git supporte "winMerge" par défaut ? En effet, d'après ce que j'ai compris de votre message, il est nécessaire d'effectuer un travail supplémentaire, des réglages et une configuration pour configurer un outil de comparaison qui n'est pas supporté par git.

88voto

tgoza Points 951

D'autres ont fait une réponse à 99% sur ce sujet, mais il y a une étape oubliée. (Ma réponse proviendra de OS X, vous devrez donc modifier les chemins de fichiers en conséquence).

Vous apportez ces modifications à votre ~/.gitconfig :

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

Cela corrigera l'outil de différenciation. Vous pouvez également corriger cela sans modifier le fichier ~/.gitconfig directement en entrant ces commandes depuis le terminal :

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

Le 1% que tout le monde a omis de mentionner, c'est que lorsque vous utilisez ceci, vous ne pouvez pas simplement exécuter git diff myfile.txt ; vous devez exécuter git difftool myfile.txt .

37voto

Dan Ray Points 14852

Voici la partie de mon ~/.gitconfig où je configure les outils de diff et de fusion. J'aime bien diffmerge de SourceGear. (Je l'aime beaucoup, en fait).

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

Donc, vous voyez, vous définissez un outil nommé "diffmerge" dans la section [difftool "diffmerge"] ligne. Ensuite, je mets l'outil "diffmerge" par défaut dans l'onglet [diff] tool = section.

J'ai évidemment la commande "diffmerge" dans mon chemin, ici. Sinon, je devrais donner le chemin complet de l'exécutable.

0 votes

Sans l'échappement des backslashs : diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"

1 votes

Je vais aller avec le plus simple diffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"

0 votes

Et il dispose d'un script 'sgdm_cygwin.sh' script pour rendre la version Windows facile à utiliser depuis Cygwin.

36voto

Reproduisant ma réponse de cette question qui était plus spécifique à la mise en place Au-delà de la comparaison comme outil de comparaison pour Git. Tous les détails que j'ai partagés sont également utiles pour tout outil de diff en général, donc je les partage ici :

La première commande que nous exécutons est la suivante :

git config --global diff.tool bc3

La commande ci-dessus crée l'entrée suivante dans le fichier .gitconfig trouvé dans le %userprofile% répertoire :

[diff]
    tool = bc3

Ensuite, vous exécutez la commande suivante ( L'exécution de cette commande est redondante dans ce cas particulier et n'est requise que dans certains cas spécialisés. Vous le saurez en peu de temps ):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

La commande ci-dessus crée l'entrée suivante dans le fichier .gitconfig archivo:

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

La chose à savoir ici est la clé bc3 . Il s'agit d'une clé bien connue de Git correspondant à une version particulière d'outils de comparaison bien connus sur le marché ( bc3 correspond à la troisième version de l'outil Beyond Compare). Si vous voulez voir toutes les clés prédéfinies, exécutez simplement git difftool --tool-help sur Git Bash . Il retourne la liste ci-dessous :

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

Vous pouvez utiliser l'une des clés ci-dessus ou définir une clé personnalisée de votre choix. Si vous souhaitez configurer un nouvel outil (ou une nouvelle version d'un outil bien connu) qui ne correspond à aucune des clés énumérées ci-dessus, vous êtes libre de le faire correspondre à l'une des clés énumérées ci-dessus ou à une clé personnalisée. nouveau une clé personnalisée de votre choix.

Et si vous deviez mettre en place un outil de comparaison qui soit

  • Absolument nouveau sur le marché

Ou

  • Une nouvelle version d'un outil existant bien connu a été publiée, mais elle n'est associée à aucune clé prédéfinie dans Git.

Comme dans mon cas, j'avais installé Beyond Compare 4. Beyond Compare est un outil bien connu de Git, mais sa version 4 n'est mappée à aucune des clés existantes par défaut. Vous pouvez donc suivre l'une des approches ci-dessous :

  1. Je peux associer l'outil Beyond Compare 4 à une clé déjà existante. bc3 qui correspond à la version de Beyond Compare 3. Je n'avais pas Beyond Compare version 3 sur mon ordinateur, donc je ne m'en souciais pas. Si j'avais voulu, j'aurais pu le mapper sur n'importe quelle touche prédéfinie de la liste ci-dessus également, par ex, examdiff .

    Si vous faites correspondre une version connue d'outils à une version appropriée déjà existante/bien connue connue, vous n'aurez pas besoin d'exécuter la deuxième commande puisque leur chemin d'installation est déjà connu de Git .

    Par exemple, si j'avais installé Beyond Compare version 3 sur mon ordinateur, j'aurais la configuration suivante dans mon ordinateur .gitconfig aurait été suffisant pour se lancer :

    [diff]
    tool = bc3

    Mais si vous voulez changer l'outil associé par défaut, vous finissez par mentionner l'option path séparément, afin que Git puisse connaître le chemin à partir duquel le fichier EXE de votre nouvel outil doit être lancé. Voici l'entrée qui force Git à lancer Beyond Compare 4 à la place. Notez le chemin du fichier EXE :

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
  2. L'approche la plus propre est de définir une nouvelle clé entièrement pour le nouvel outil de comparaison ou une nouvelle version d'un outil bien connu. Dans mon cas, j'ai défini une nouvelle clé bc4 pour qu'il soit facile à retenir. Dans ce cas, vous devez exécuter deux commandes en tout, mais votre deuxième commande ne définira pas le chemin de l'exécutable de votre nouvel outil. Au lieu de cela, vous devez définir le paramètre cmd pour votre nouvel outil, comme indiqué ci-dessous :

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""

    L'exécution des commandes ci-dessus crée les entrées suivantes dans votre fichier .gitconfig archivo:

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"

Je vous recommande vivement de suivre l'approche n° 2 afin d'éviter toute confusion pour vous à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X