Git on Windows: comment configurer mergetool?

j'ai essayé msysGit et Git sur Cygwin. Tous les deux fonctionnent très bien en eux-mêmes et tous les deux fonctionnent parfaitement gitk et git-gui.

comment configurer un mergetool? (Vimdiff fonctionne sur Cygwin, mais de préférence je voudrais quelque chose un peu plus convivial pour certains de nos collègues de Windows-aimant.)

317
demandé sur danwellman 2009-01-09 00:24:49

18 réponses

pour donner suite à la réponse de Charles Bailey, voici ma configuration git qui utilise p4merge (free cross-platform 3way merge tool); testé sur msys Git (Windows) Installer:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

ou, à partir d'un windows cmd.exe shell, la deuxième ligne devient:

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

Les changements (par rapport à Charles Bailey):

  • ajouté à global git config, i.e. valide pour tous les projets git Non juste l'actuel
  • la valeur de configuration de l'outil personnalisé se trouve dans" mergetool.[outil.]cmd", pas "fusionner.[outil.]cmd "(silly me, a passé une heure dépannage pourquoi git a continué à se plaindre de l'outil inexistant)
  • a ajouté des guillemets doubles pour tous les noms de fichiers de sorte que les fichiers avec des espaces peuvent encore être trouvés par l'outil de Fusion (Je l'ai testé dans msys Git de Powershell)
  • notez que par défaut Perforce ajoutera son répertoire d'installation au chemin, ainsi, il n'est pas nécessaire de spécifier le chemin complet vers p4merge dans la commande

télécharger: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools


modifier (fév 2014)

comme souligné par @Gregory Pakosz , dernier msys git maintenant" nativement "supporte p4merge (testé sur 1.8.5.2.msysgit.0 ).

vous pouvez afficher la liste des outils supportés en exécutant:

git mergetool --tool-help

Vous devriez voir p4merge dans disponible ou valide liste. Dans la négative, veuillez mettre à jour votre git.

si p4merge était listé comme disponible , il est en votre CHEMIN et vous n'avez qu'à définir fusionner.outil :

git config --global merge.tool p4merge

si elle était listée comme valide , vous devez définir mergetool.p4merge.chemin en plus de fusionner.outil :

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • ce qui précède est un exemple de chemin lorsque p4merge a été installé pour l'utilisateur courant, pas pour l'ensemble du système (ne nécessite pas d'administrateur droits ou élévation de UAC)
  • bien que ~ devrait étendre au répertoire d'accueil de l'utilisateur courant (donc en théorie le chemin devrait être ~/AppData/Local/Perforce/p4merge.exe ), cela n'a pas fonctionné pour moi
  • aurait été encore mieux de profiter d'une variable d'environnement( par exemple $LOCALAPPDATA/Perforce/p4merge.exe ), git ne semble pas étendre les variables d'environnement pour les chemins (si vous savez comment obtenir ce fonctionnement, s'il vous plaît laissez-moi savoir ou mettre à jour cette réponse)
282
répondu Milan Gardian 2017-05-23 11:54:47

paramètre mergetool.p4merge.cmd ne fonctionnera plus puisque Git a commencé à essayer de supporter p4merge, voir libexec/git-core/git-mergetool--lib.nous avons donc juste besoin de spécifier le chemin mergetool pour git,par exemple le p4merge:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

alors ça marchera.

85
répondu daizuozhuo 2012-05-03 14:00:48

j'utilise Git Portable sur WinXP (fonctionne un plaisir!), et nécessaire pour résoudre un conflit qui est apparu dans branching. De tous les gui j'ai vérifié, KDiff3 s'est avéré être le plus transparent à utiliser.

mais j'ai trouvé les instructions dont j'avais besoin pour le faire fonctionner dans Windows dans ce billet de blog , des instructions qui diffèrent légèrement des autres approches énumérées ici. Il s'agissait essentiellement d'ajouter ces lignes à mon .gitconfig fichier:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

fonctionne bien maintenant!

55
répondu Dɑvïd 2011-04-03 12:28:32

sous Cygwin, le seulement la chose qui a fonctionné pour moi est la suivante:

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

aussi, j'aime désactiver le message prompt pour difftool:

git config --global difftool.prompt false
19
répondu splicer 2010-11-10 23:38:32

git mergetool est entièrement configurable de sorte que vous pouvez à peu près choisir votre outil préféré.

la documentation complète est ici: http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

en bref, vous pouvez définir un mergetool par défaut en définissant la variable de configuration de l'utilisateur merge.tool .

si l'outil de fusion est l'un de ceux supportés nativement par lui, vous avez juste à définir mergetool.<tool>.path pour le chemin d'accès complet de l'outil (remplacer <tool> par ce que vous avez configuré merge.tool .

sinon, vous pouvez définir mergetool.<tool>.cmd à un peu de shell pour être évalué à l'exécution avec les variables shell $BASE, $LOCAL, $REMOTE, $MERGED définies aux fichiers appropriés. Vous devez être un peu prudent avec l'échappement si vous éditez directement un fichier de configuration ou définissez la variable avec la commande git config .

quelque chose comme ça devrait donner la saveur de ce que vous pouvez faire ('mymerge" est un personnage fictif de l'outil).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

une fois que vous avez configuré votre outil de fusion préféré, il suffit d'exécuter git mergetool chaque fois que vous avez des conflits à résoudre.

l'outil p4merge de Perforce est un très bon outil de fusion autonome.

16
répondu CB Bailey 2009-01-08 21:37:02

Il semble que les nouvelles versions git soutien p4merge directement, de sorte que

git config --global merge.tool p4merge

devrait être tout ce dont vous avez besoin, si p4merge.exe est sur votre chemin. Pas besoin de configurer cmd ou path.

6
répondu friederbluemle 2013-06-11 06:02:07

Pour au-delà de comparer sur Windows 7

git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"
6
répondu developer747 2014-03-25 17:56:42

Comme déjà répondu (et ici et ici ), mergetool est la commande pour configurer cela. Pour une interface graphique agréable je recommande kdiff3 (GPL).

5
répondu hlovdal 2017-05-23 12:26:07

j'ai dû laisser tomber les citations supplémentaires en utilisant msysGit sur windows 7, Je ne sais pas pourquoi.

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
4
répondu Mike Glenn 2009-08-02 02:04:20

si vous faites cela par cygwin, vous pourriez avoir besoin d'utiliser cygpath:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge `cygpath -w $BASE` `cygpath -w $LOCAL` `cygpath -w $REMOTE` `cygpath -w $MERGED`'
3
répondu idbrii 2010-03-30 17:39:15

Bah, ce enfin travaillé pour moi (Windows 7 + Cygwin + TortoiseMerge):

In .git / config:

cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")

Merci aux posters précédents pour le Conseil d'utiliser cygpath!

3
répondu Nathan McDaniel 2011-01-13 15:08:50

j'utilise une application appelée WinMerge ( http://winmerge.org / ) info de leur manuel ( ) http://manual.winmerge.org/CommandLine.html )

c'est le script bash que j'utilise de la directive mergetool via .gitconfig

#!/bin/sh
# using winmerge with git
# replaces unix style null files with a newly created empty windows temp file

file1=
if [ "$file1" == '/dev/null' ] || [ "$file1" == '\.\nul' ] || [ ! -e "$file1" ]
    then 
       file1="/tmp/gitnull"
       `echo "">$file1`
fi
file2=
if [ "$file2" == '/dev/null' ] || [ "$file2" == '\.\nul' ] || [ ! -e "$file2" ]
    then 
       file2="/tmp/gitnull"
       `echo "">$file2`
fi
echo diff :  -- 
"C:\Program files (x86)\WinMerge\WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$file1" "$file2"

le bash comptes pour quand le résultat de la comparaison dans un fichier vide et crée un nouveau fichier temporaire dans l'emplacement correct.

3
répondu xero 2012-12-20 22:40:31

j'ai trouvé deux façons de configurer " SourceGear DiffMerge " comme difftool et mergetool dans Github Windows.

les commandes suivantes dans une fenêtre D'invite de commande vont mettre à jour votre .gitconfig pour configurer GIT utilisation DiffMerge:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  \"$LOCAL\" \"$REMOTE\"'

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd  'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  -merge  -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'

[ ou ]

ajouter les lignes suivantes à votre .gitconfig. Ce fichier doit être dans votre répertoire personnel en C:\Users\UserName:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"

[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
2
répondu vineel 2017-02-17 10:52:38

vous pouvez ajouter ces options aussi:

git config --global merge.tool p4mergetool
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.p4mergetool.trustExitCode false
git config --global mergetool.keepBackup false

aussi, je ne sais pas pourquoi, mais les citations et les slash de la réponse de Milan Gardian ont tout gâché pour moi.

1
répondu Roberto 2014-05-04 21:42:06

si quelqu'un veut utiliser gvim comme outil diff sur TortoiseGit, alors c'est ce que vous devez entrer dans la saisie de texte pour le chemin vers l'outil diff externe:

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
1
répondu Attila Szeremi 2014-06-24 12:57:13

For IntelliJ IDEA (Community Edition) 3-way git mergetool configuration in Windows environment ( ~/.gitconfig )

Cygwin

[mergetool "ideamerge"]
     cmd = C:/Program\ Files\ \(x86\)/JetBrains/IntelliJ\ IDEA\ Community\ Edition\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED`
[merge]
     tool = ideamerge

Msys

[mergetool "ideamerge"]
cmd = "/c/Program\ Files\ \(x86\)/JetBrains/IntelliJ\ IDEA\ Community\ Edition\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED`
[merge]
 tool = ideamerge

le ~/winpath.sh est de convertir les chemins vers Windows sur msys et est pris de question de conversion de chemin msys sur stackoverflow

#! /bin/sh                                                               

function wpath {                                                         
    if [ -z "" ]; then                                                 
        echo "$@"                                                        
    else                                                                 
        if [ -f "" ]; then                                             
            local dir=$(dirname "")                                    
            local fn=$(basename "")                                    
            echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\|g';  
        else                                                             
            if [ -d "" ]; then                                         
                echo "$(cd ""; pwd -W)" | sed 's|/|\|g';              
            else                                                         
                echo "" | sed 's|^/\(.\)/|:\|g; s|/|\|g';          
            fi                                                           
        fi                                                               
    fi                                                                   
}                                                                        

wpath "$@" 
1
répondu Usman Saleem 2017-05-23 12:34:29

pour configurer p4merge, installé en utilisant chocolatey sur windows à la fois pour la fusion et diff, jetez un oeil ici: https://gist.github.com/CamW/88e95ea8d9f0786d746a

0
répondu CamW 2015-01-20 06:15:30

si vous avez des problèmes pour ouvrir P4merge depuis SourceTree, cherchez votre fichier de configuration local nommé config sous MyRepo.git et supprimer toute configuration de fusion. Dans mon cas, il essayait d'ouvrir la soudure que je viens de désinstaller

0
répondu Kautsky Lozano 2016-08-17 16:21:58