Git на Windows: как настроить mergetool? - PullRequest
331 голосов
/ 09 января 2009

Я пробовал msysGit и Git на Cygwin. Оба прекрасно работают сами по себе, и оба прекрасно работают с gitk и git-gui.

Теперь, как, черт возьми, я могу настроить mergetool? (Vimdiff работает на Cygwin, но желательно, чтобы некоторые из наших коллег, любящих Windows, хотели бы что-то более удобное для пользователя.)

Ответы [ 18 ]

3 голосов
/ 30 марта 2010

Если вы делаете это через cygwin, вам может понадобиться использовать 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 голосов
/ 21 декабря 2012

я использую приложение под названием WinMerge (http://winmerge.org/) информация из их руководства (http://manual.winmerge.org/CommandLine.html)

это скрипт bash, который я использую из директивы mergetool через .gitconfig

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

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

в основном bash учитывает, когда результат diff в пустом файле, и создает новый временный файл в правильном месте.

2 голосов
/ 17 февраля 2017

Я нашел два способа настроить " SourceGear DiffMerge " как difftool и mergetool в Windows github.

Следующие команды в окне командной строки обновят ваш .gitconfig для настройки GIT с использованием 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\"'

[ OR ]

Добавьте следующие строки в ваш .gitconfig. Этот файл должен находиться в вашем домашнем каталоге в 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\"
1 голос
/ 20 октября 2015

Для IntelliJ IDEA (Community Edition) 3-х сторонняя конфигурация git mergetool в среде Windows (~/.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

~ / winpath.sh предназначен для преобразования путей в Windows на msys и взят из вопроса о преобразовании путей msys для stackoverflow

#! /bin/sh                                                               

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

wpath "$@" 
1 голос
/ 24 июня 2014

Если кто-то хочет использовать gvim в качестве инструмента сравнения в TortoiseGit, то вам необходимо ввести текст для ввода пути к внешнему инструменту сравнения:

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
1 голос
/ 05 мая 2014

Вы также можете добавить эти опции:

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

Кроме того, я не знаю, почему, но цитата и прорезь из ответа Милана Гардиана испортили мне жизнь.

0 голосов
/ 17 августа 2016

Если у вас возникли проблемы с открытием p4merge из SourceTree, найдите локальный файл конфигурации с именем config в MyRepo.git и удалите все настройки слияния. В моем случае он пытался открыть Meld, который я только что удалил

0 голосов
/ 20 января 2015

Чтобы настроить p4merge, установленный с помощью chocolatey на windows для слияния и сравнения, посмотрите здесь: https://gist.github.com/CamW/88e95ea8d9f0786d746a

...