Я пробовал msysGit и Git на Cygwin. Оба отлично работают сами по себе, и оба запускают gitk и git -gui отлично.
Теперь как я могу настроить mergetool? (Vimdiff работает на Cygwin, но я бы хотел, чтобы кое-что было немного более удобным для некоторых наших любящих Windows сотрудников.)
Для ответа на вопрос Чарльза Бейли, здесь моя установка git, использующая p4merge (бесплатный инструмент для слияния с тремя платформами 3way); проверено на msys git (Windows):
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
или, из оболочки windows cmd.exe, вторая строка:
git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
Изменения (относительно Чарльза Бейли):
Загрузить: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools
РЕДАКТИРОВАТЬ (февраль 2014)
Как указано @Gregory Pakosz, последний msys git теперь "изначально" поддерживает p4merge (проверен на 1.8.5.2.msysgit.0).
Вы можете отобразить список поддерживаемых инструментов, выполнив:
git mergetool --tool-help
Вы должны увидеть p4merge в любом доступном или действительном списке. Если нет, обновите свой git.
Если p4merge был указан как доступный, он находится в вашем PATH, и вам нужно только установить merge.tool:
git config --global merge.tool p4merge
Если он был указан как действительный, вы должны определить mergetool.p4merge.path в дополнение к merge.tool:
git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
~
должен расширяться в текущий домашний каталог пользователя (так теоретически путь должен быть ~/AppData/Local/Perforce/p4merge.exe
), это не сработало для меня$LOCALAPPDATA/Perforce/p4merge.exe
), git, похоже, не расширяет переменные среды для путей (если вы знаете, как это сделать, сообщите мне или обновите этот ответ)настройка mergetool.p4merge.cmd больше не будет работать, так как Git начал пытаться поддерживать p4merge, см. libexec/git -core/git -mergetool--lib.so нам просто нужно указать mergetool путь для git, например p4merge:
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
Тогда он будет работать.
Я использую Portable Git в WinXP (работает с удовольствием!) и нужен для разрешения конфликта, возникшего при ветвлении. Из всех проверенных gui, KDiff3 оказался наиболее прозрачным в использовании.
Но я нашел инструкции, которые мне нужны, чтобы заставить его работать в Windows в этом сообщении в блоге, инструкции, которые немного отличаются от других подходов, перечисленных здесь, В основном это было добавление этих строк в мой файл .gitconfig
:
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
keepBackup = false
trustExitCode = false
Хорошо работать сейчас!
path = C:\\Program Files (x86)\\KDiff3\\kdiff3.exe
(обратите внимание на двойную обратную косую path = C:\\Program Files (x86)\\KDiff3\\kdiff3.exe
)
Под Cygwin работа только, которая работала для меня, такова:
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)"'
Кроме того, мне нравится отключать подсказку для diffftool:
git config --global difftool.prompt false
git mergetool
полностью настраивается, поэтому вы можете в значительной степени выбрать свой любимый инструмент.
Полная документация находится здесь: http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html
Вкратце, вы можете установить по умолчанию mergetool, установив переменную пользовательской конфигурации merge.tool
.
Если инструмент слияния является одним из тех, которые поддерживаются изначально, вам просто нужно установить mergetool.<tool>.path
на полный путь к инструменту (замените <tool>
на то, что вы настроили merge.tool
).
В противном случае вы можете установить mergetool.<tool>.cmd
на бит оболочки, который будет отображаться во время выполнения, с переменными оболочки $BASE, $LOCAL, $REMOTE, $MERGED
, установленными в соответствующие файлы. Вы должны быть немного осторожны с тем, чтобы избежать того, что вы непосредственно редактируете файл конфигурации или задаете переменную командой git config
.
Что-то вроде этого должно придать аромат того, что вы можете сделать ( "mymerge" - вымышленный инструмент).
git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'
Как только вы настроите свой любимый инструмент слияния, это просто вопрос запуска git mergetool
, когда у вас возникнут конфликты.
Инструмент p4merge от Perforce - довольно хороший автономный инструмент слияния.
Для сравнения с Windows 7
git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"
Кажется, что более новые версии git поддерживают p4merge напрямую, поэтому
git config --global merge.tool p4merge
должно быть все, что вам нужно, если p4merge.exe находится на вашем пути. Нет необходимости настраивать cmd или путь.
Мне пришлось отказаться от дополнительного цитирования с помощью msysGit в Windows 7, не зная почему.
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
Я использую приложение под названием WinMerge (http://winmerge.org/) информацию из их руководства (http://manual.winmerge.org/CommandLine.html)
это bash script я из директивы 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 в пустом файле и создает новый файл temp в правильном месте.
Ба, это, наконец, сработало для меня (Windows 7 + Cygwin + TortoiseMerge):
В .git/config:
cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")
Благодаря предыдущим плакатам для подсказки для использования cygpath!
Если вы делаете это через 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`'
Я нашел два способа настроить " SourceGear DiffMerge" как diffftool и mergetool в github Windows.
Следующие команды в окне командной строки обновят ваш .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\"'
[ ИЛИ]
Добавьте следующие строки в ваш .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\"
Для IntelliJ IDEA (Community Edition) 3-way 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 и взято из https://stackoverflow.com/questions/12015348/msys-path-conversion-or-cygpath-for-msys
#! /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 "$@"
Если кто-то хочет использовать gvim как свой инструмент diff на TortoiseGit, тогда вам нужно ввести текстовый ввод для пути к внешнему инструменту diff:
path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
Вы также можете добавить эти параметры:
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
Кроме того, я не знаю, почему, но цитирование и слэш из ответа Милана Гардиана напутали меня для меня.
Если у вас возникли проблемы с открытием p4merge из SourceTree, найдите локальный файл конфигурации с именем config в MyRepo.git и удалите любую конфигурацию слияния. В моем случае он пытался открыть Meld, который я только что удалил
Чтобы настроить p4merge, установленный с использованием шоколада на окнах для слияния и разброса, посмотрите здесь: https://gist.github.com/CamW/88e95ea8d9f0786d746a