Configurer l'outil de comparaison avec .gitconfig

159

Comment configurer Git pour utiliser un outil différent pour la différence avec le fichier .gitconfig?

J'ai ceci dans mon .gitconfig:

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

Ça ne marche pas; il ouvre simplement la ligne de commande diff. Quand je fais

export GIT_EXTERNAL_DIFF=git-chdiff

puis git diffouvrira l'outil de différence externe (donc je sais que le script de l'outil de différence externe fonctionne bien). Est-ce que j'ai un problème avec ma configuration .gitconfig pour l'outil de comparaison?

Ryanzec
la source

Réponses:

140

Git propose une gamme de difftools préconfigurés "prêts à l'emploi" (kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffus, opendiff, p4merge et araxis), et vous permet également pour spécifier le vôtre. Pour utiliser l'un des difftools préconfigurés (par exemple, "vimdiff"), vous ajoutez les lignes suivantes à votre ~/.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 afficher la sortie 'git diff' avec mon outil / visionneuse de diff préféré?

Fredrik Pihl
la source
Le premier lien est rompu. Il semble que le domaine soit passé de .comà .org. Je peux parcourir jeetworks.org/software
RBT
1
Qu'entendez-vous par un difftool pré-configuré "prêt à l'emploi"? Pour mettre en place un outil de diff externe "winMerge" qui n'est pas dans votre liste, j'ai dû faire le même réglage que vous avez mentionné dans votre message et tout a commencé à fonctionner sans aucune configuration supplémentaire. Cela signifie-t-il que git prend également en charge "winMerge", car autant que je puisse comprendre à partir de votre message, cela nécessite un travail / des paramètres / une configuration supplémentaires pour configurer un outil de différence qui n'est pas pris en charge en dehors de la box par git.
RBT
169

Un moyen supplémentaire 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 sur tkdiff- modifiez cela selon vos préférences. La troisième ligne désactive l'invite ennuyeuse, donc chaque fois que vous frappez, git difftoolelle lancera automatiquement le difftool.

Omer Dagan
la source
11
Je l'ai fait git config --global diff.tool diffmergemais quand je l'ai fait, git diff myfile.txtil m'a quand même donné le diff unix par défaut
amphibient
Peut-être avez-vous une configuration locale qui définit un autre outil de diff?
Omer Dagan
1
peut-être que vous devez passer des paramètres corrects pour diffmerger: ce lien explique comment le faire pour meld: lien: nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy
rptr
5
@amphibient: essayez l' outil git diff myfile.txt pour utiliser l'outil.
JBRWilkinson
72

D'autres ont répondu à 99% à ce sujet, mais il reste une étape à franchir. (Ma réponse viendra d'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. Vous pouvez également résoudre ce problème sans modifier le ~/.gitconfigdirectement 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 n'a pas mentionné est que lorsque vous utilisez cela, vous ne pouvez pas simplement exécuter git diff myfile.txt; vous devez courir git difftool myfile.txt.

tgoza
la source
23
A voté pour ce dernier 1%. Il n'y a rien de plus satisfaisant qu'un clou entièrement martelé;)
Titou
1
Existe-t-il un moyen d'en faire l'outil par défaut?
math0ne
6
Génial, vous manquez l'étape git config --global --add difftool.prompt false, cependant. ;)
Suma
36

Voici la partie de mon ~ / .gitconfig où je configure les outils de comparaison et de fusion. J'aime diffmerge par 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 [difftool "diffmerge"]ligne. Ensuite, je règle l'outil "diffmerge" par défaut dans le[diff] tool = section.

J'ai évidemment la commande "diffmerge" dans mon chemin, ici. Sinon, je devrais donner un chemin d'accès complet à l'exécutable.

Dan Ray
la source
Sans que toute la barre oblique inverse ne s'échappe:diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
Tim Lovell-Smith
1
Je vais avec le plus simplediffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Tim Lovell-Smith
Et il a un script pratique 'sgdm_cygwin.sh' pour rendre la version Windows facile à utiliser à partir de Cygwin.
thoni56
Vous pouvez donc le faire ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmergeet vous êtes prêt à utiliser la configuration ci-dessus. Ainsi que diffmergedirectement depuis la ligne de commande cygwin avec les chemins cygwin.
thoni56
Ce serait de sgdm.exenos jours
kzu
22

Reproduire ma réponse de ce fil de discussion qui était plus spécifique à la définition au-delà de la comparaison en tant qu'outil de comparaison pour Git. Tous les détails que j'ai partagés sont également utiles pour tout outil de différence en général, alors partagez-les 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 ci-dessous .gitconfigdans le %userprofile%répertoire:

[diff]
    tool = bc3

Ensuite, vous exécutez la commande ci-dessous (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 dans 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 ci-dessous dans le .gitconfigfichier:

[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 des outils de comparaison bien connus disponibles sur le marché ( bc3correspond à la 3ème version de l'outil Beyond Compare). Si vous voulez voir toutes les clés prédéfinies, exécutez simplement la git difftool --tool-helpcommande sur git bash. Il renvoie 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 votre propre clé personnalisée. Si vous souhaitez configurer un nouvel outil (ou une version nouvellement publiée d'un outil bien connu) qui ne correspond à aucune des clés répertoriées ci-dessus, vous êtes libre de le mapper à l'une des clés répertoriées ci-dessus ou à un nouveau clé personnalisée de votre choix.

Et si vous deviez configurer un outil de comparaison

  • Absolument nouveau sur le marché

OU

  • Une nouvelle version d'un outil bien connu existant a été publiée et n'est mappée à aucune clé prédéfinie dans git ?

Comme dans mon cas, j'avais installé au-delà de la comparaison 4. au-delà de la comparaison est un outil bien connu pour 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 mapper au-delà de la comparaison 4 outil avec une clé déjà existante bc3 qui correspond à la version 3 au-delà de la comparaison. Je n'avais pas au-delà de la comparaison de la version 3 sur mon ordinateur, donc je m'en fichais. Si je voulais, j'aurais pu le mapper à l'une des clés prédéfinies dans la liste ci-dessus, par exemple examdiff.

    Si vous mappez une version bien connue des outils à une clé déjà existante / bien connue appropriée, vous n'aurez pas besoin d'exécuter la deuxième commande car leur chemin d'installation est déjà connu de git .

    Par exemple, si j'avais installé au-delà de la comparaison de la version 3 sur ma box alors avoir la configuration ci-dessous dans mon .gitconfigfichier aurait suffi pour démarrer:

    [diff]
    tool = bc3
    

    Mais si vous voulez changer l'outil associé par défaut, vous finissez par mentionner l' pathattribut séparément afin que git connaisse le chemin à partir duquel l'exe de votre nouvel outil doit être lancé. Voici l'entrée que les renards git lancer au-delà de comparer 4 à la place. Notez le chemin de l'exe:

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. L'approche la plus claire consiste à définir une nouvelle clé pour le nouvel outil de comparaison ou une nouvelle version d'un outil bien connu. Comme dans mon cas, j'ai défini une nouvelle clé bc4pour qu'elle soit facile à retenir. Dans un tel 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 l' cmdattribut de 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 ci-dessous dans votre .gitconfigfichier:

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

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

RBT
la source
16

L'ajout de l'un des blocs ci-dessous me permet d'utiliser KDiff3 pour mes environnements de développement Windows et Linux. Cela constitue un bel outil de comparaison et de fusion multiplateforme cohérent.

Linux

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

les fenêtres

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3
humeur
la source
Avez-vous trouvé un moyen de créer un fichier .gitconfig multi-plateforme unique qui spécifie les bons chemins sous condition à la fois pour Linux et Windows?
Jerry Asher
1
Honnêtement, je suis passé à fusionner partout, et cela semble fonctionner.
moodboom
Y a-t-il une raison de définir trustExitCode = false? D'après ce que je comprends, si false est défini, git ignorerait le code de sortie non nul de votre outil. Donc, si votre outil écrase, git penserait à tort que la fusion est réussie. Mais peut-être y a-t-il une raison pour le définir sur false, veuillez expliquer.
apollo le
Je crois trustExitCode = falseque git vous demandera si la fusion a réussi, plutôt que de se fier à la sortie de l'outil avec un statut vrai ou faux.
moodboom
4

Si vous voulez avoir une option pour utiliser plusieurs outils de comparaison, ajoutez un alias à .gitconfig

[alias]
    kdiff = difftool --tool kdiff3
Alexandre Katz
la source
pour mentionner l' --tooloption. Merci
itMaxence
0

Reportez-vous à Microsoft vscode-tips-and-tricks . Exécutez simplement ces commandes dans votre terminal:

git config --global merge.tool code

Mais tout d'abord, vous devez ajouter une codecommande à votre PATH. entrez la description de l'image ici

sudoz
la source
0

Dans Windows, nous devons exécuter la $git difftool --tool-helpcommande pour voir les différentes options telles que:

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

et nous pouvons ajouter n'importe lequel d'entre eux (par exemple winmerge) comme

$  git difftool --tool=winmerge

Pour configurer notepad ++ pour voir les fichiers avant de valider:

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

et utiliser $ git commitouvrira les informations de validation dans notepad ++

Goyal Vicky
la source