Правильно ... У меня все получилось, с msysgit версии 1.6.3.2.1299.gee46c, под DOS или Git Bash, с пробной лицензией на Araxis Merge 2009, v2009.3713:
Подход заключается в использовании новых git difftool
и git mergetool
вместо простого дифференциала.
Во-первых, давайте настроим некоторые скрипты для этих инструментов сравнения и слияния
C:\>git config --global diff.tool adifftool
C:\>git config --global diff.external git-difftool--helper
C:\>git config --global difftool.adifftool.cmd "difftool.sh \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
C:\>git config --global difftool.prompt false
Примечания:
- установив diff.external для скрипта Git
git-difftool--helper
, я буду использовать difftool, даже когда наберу 'git diff
'.
- не забудьте передать
$MERGED
вашему сценарию difftool: это единственная переменная с реальным именем файла, который проверяется. $LOCAL
и $REMOTE
- временные имена.
Для инструмента слияния вы должны установить следующие глобальные значения:
C:\>git config --global merge.tool amergetool
C:\>git config --global mergetool.amergetool.cmd "mergetool.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""
C:\>git config --global mergetool.prompt false
Установив эти инструменты для некоторых сценариев оболочки, вы сможете переключать инструменты из этих сценариев.
Другой подход - назвать ваши инструменты (mergetool.araxis.cmd
, mergetool.winmerge.cmd
, ...) и указать правильный инструмент в настройках diff.tool
или merge.tool
.
Создайте difftool.sh
и mergetool.sh
в каталоге, указанном в вашей глобальной переменной среды PATH
. Они будут работать даже из DOS (и они sh
- shell - скрипты)
difftool.sh
#!/bin/sh
echo Launching Araxis Merge.exe: $3
t1="'$3 (from)'"
t2="'(to)'"
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -nowait -2 -title1:${t1} -title2:${t2} "$1" "$2"
Примечания:
Невозможно иметь -title1: "someTitle With Space" ... работает только заголовок без пробела ..., так что пока попробуйте его без какой-либо опции 'titleN
' .
Понял! Вы не можете передать значение заголовка непосредственно параметру -title
, вам нужно установить его в локальную переменную с "' '"
комбинациями кавычек (двойные кавычки исчезнут при выполнении сценария оболочки, оставляя простые кавычки, оставляя пробелы внутри название!)
$3
представляет настоящее имя, а не какое-то временное имя файла для разных целей. Следовательно, использование $3
в опции title1
с пробелом в нем.
git diff HEAD^ HEAD
не будет работать в сеансе DOS: только git diff "HEAD^" HEAD
будет.
mergetool.sh
#!/bin/sh
# Passing the following parameters to mergetool:
# local base remote merge_result
alocal=$1
base=$2
remote=$3
result=$4
t1="'$4 (current branch)'"
t2="'(common ancestor)'"
t3="'(to be merged)'"
if [ -f $base ]
then
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$base" "$remote" "$result"
else
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$result" "$remote" "$result"
fi
Я не уверен, что эти сценарии работают правильно, когда задействовано несколько файлов (несколько разностей, несколько файлов для объединения).
Только что проверил: он работает, и Araxis compare.exe открывает одну вкладку на файл для сравнения или слияния.
Попробуйте и дайте нам знать;)