Как установить Araxis в качестве инструмента сравнения / слияния для MSYS git? - PullRequest
14 голосов
/ 05 мая 2009

Я пытаюсь использовать Araxis Merge в качестве инструмента сравнения / слияния для MSYSGit.

Я нашел несколько ресурсов в сети:

  • На сайте Araxis они упоминают «простой» способ, но он подразумевает исполняемые файлы (araxisgitdiff.exe и araxisgitmerge.exe), которые не являются частью моего дистрибутива.
  • Я также нашел некоторую информацию в gitguru , но фактическая информация о: араксис в лучшем случае редка, и я не мог ничего из этого сделать.
  • Наконец, была некоторая информация о более старом посте stackoverflow , но предложенный метод не работает для меня. Эта конкретная информация была ориентирована на OS X. Я «перевел» на Windows как можно лучше, но безуспешно:

Я создал /bin/git-diff-driver.sh

#!/bin/sh

"/c/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"

и отредактировано gitconfig

[merge]
    tool = araxismerge
[mergetool "araxismerge"]
    cmd = "/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait $LOCAL $BASE $REMOTE $MERGED
[diff]
    external = "/bin/git-diff-driver.sh"

и единственный результат, который я получаю:

$ git diff HEAD ^ HEAD
внешний diff умер, останавливаясь на PowerEditor / src / Notepad_plus.cpp.


Edit:

Я также пытался с exe, названным "c:/Program Files/Araxis/Araxis Merge/compare.exe", как предложено в одном из ответов, с теми же результатами.


Edit:

Я обнаружил, что его легко установить, если вы используете TortoiseGit, но, похоже, он обрабатывает diff сам по себе, и никакие настройки из TortoiseGit не дают никаких указаний о том, как настроить Araxis в качестве инструмента слияния при вызове diff из командная строка.


Edit:

Итак, вопрос в том, есть ли кто-нибудь, кто успешно использует Araxis Merge для сравнения и объединения материалов с MSYSGit, и если да, то как вы это делаете?

Ответы [ 8 ]

16 голосов
/ 16 сентября 2009

Если вы хотите, чтобы 'git diff' всегда использовал araxis, вы можете использовать инструкции в файле справки, но если вы хотите иметь контроль, чтобы использовать 'git diff', как обычно, из командной строки и 'git difftool 'задействовать графический интерфейс Araxis.

Попробуйте добавить следующее в ваш git config ::

[difftool "araxis"]
    path = "/c/Program Files/Araxis/Araxis Merge/compare.exe"
    renames = true
    trustExitCode = true
[diff]
    tool = araxis
    stat = true
[mergetool "araxismergetool"]
    cmd = 'C:\\Program Files\\Araxis\\Araxis Merge\\araxisgitmerge.exe' "$REMOTE" "$BASE" "$PWD/$LOCAL" "$PWD/$MERGED"
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = araxismergetool
    stat = true
6 голосов
/ 03 декабря 2010

Обновлена ​​документация по araxis: http://www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

Я могу использовать показанную там конфигурацию без каких-либо изменений.

4 голосов
/ 19 июня 2009

Правильно ... У меня все получилось, с 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 открывает одну вкладку на файл для сравнения или слияния.
Попробуйте и дайте нам знать;)

2 голосов
/ 05 мая 2009

Я думаю, что вам нужно быть немного осторожнее с выходом из вашего .gitconfig.

К сожалению, из-за того, как переменная config расширена и удалена, ваша строка должна быть допустимой командой оболочки, которая затем экранируется «git config».

Попробуйте что-то вроде этого:

[mergetool "araxismerge"]
    cmd = \"/c/Program Files/Araxis/Araxis Merge/compare.exe\" -3 -merge -wait \"$LOCAL\" \"$BASE\" \"$REMOTE\" \"$MERGED\"

Да, не очень красиво, я знаю. Это один из случаев, когда напрямую использовать git config проще.

git config --global mergetool.araxismerge.cmd '"/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait "$LOCAL" "$BASE" "$REMOTE" "$MERGED"'
1 голос
/ 02 ноября 2009

Я довольно долго боролся с этой проблемой, и теперь я наконец могу сказать, что все предложенные грязные хаки (например, скрипты промежуточной оболочки) скорее не нужны = D. Дело в том, что все последние версии MSYSGit (у меня есть 1.6.4) поддерживают Araxis Merge (у меня есть 2008) из коробки. Неудивительно, что внутренне это называется «араксис». Итак, все, что вам нужно, это установить

[merge]
    tool = araxis

в вашем .gitconfig. Также вы должны включить папку Araxis в переменную окружения PATH (MSYSGit ищет Compare.exe).

В качестве хорошей меры следует удалить все настройки Git, связанные с «araxis» mergetool, которые вы могли бы настроить (особенно, если вы выбрали именно это имя, как это делали некоторые люди на этой странице), и все они должны быть удалены. Это включает в себя все в разделе [mergetool "araxis"]. Обязательно удалите их из всех конфигов (системных, глобальных и репозитория), иначе они могут помешать нормальному поведению «внутреннего инструмента».

В любом случае, если вас интересует, как MSYSGit запустит ваше слияние с Araxis, или вам интересно, какие другие mergetools он поддерживает «из коробки», вам стоит поискать скрипт \share\git-gui\lib\mergetool.tcl в папке установки MSYSGit.

PS. Вы можете избежать установки переменной среды PATH, настроив mergetool.araxis.path в .gitconfig. Лично я никогда не удосужился сделать это, так как

  1. В любом случае я использую Araxis Merge из командной строки.
  2. Указание пути к каталогу в .gitconfig (особенно такого, как "C:\Program Files\Araxis\Araxis Merge\", который содержит пробелы) может оказаться трудным для правильного выполнения, так как оно подвержено проблемам с обратной / прямой перемоткой, которые мешают MSYSGit.

PPS. Все вышесказанное относится и к тому, чтобы сделать Araxis вашим difftool. Т.е. нужно добавить

[diff]
    tool = araxis

и удалите все остальное в разделе [difftool "araxis"], если оно есть в вашей конфигурации (хотя не забудьте настроить PATH).

0 голосов
/ 14 июня 2009

Так как я был укушен в индивидуальные git-различия / слияния, я подумал, что попытаюсь исправить это раз и навсегда. Я дошел до того, что начал AraxisMerge, но без заголовков вкладок. Так что это будет оставлено в качестве упражнения для читателя:)

Наблюдения и комментарии:

  • У меня не было AraxisMerge, поэтому я скачал его и получил бесплатную 30-дневную пробную лицензию, чтобы опробовать его. Эта версия (кажется, 7.0) поставляется с araxisgitdiff.exe, и ссылка с инструкциями, которые вы отправляете, работает. Так что это будет вариант № 1: обновить слияние с Araxis.
  • Поскольку я работаю с CMD.EXE, 'git diff HEAD HEAD ^' не работает. '^' Должен быть экранирован в 'git diff HEAD "HEAD ^"'.
  • Для своей собственной работы я использую kdiff3 в качестве бесплатной замены в Windows, которая работает достаточно хорошо (помогает то, что она поддерживается по умолчанию git)

Начиная с git-diff-driver.sh, я получил ту же ошибку. После изменения скрипта, чтобы он содержал только «echo», это не изменилось. Таким образом, ошибка не зависит от содержимого скрипта.

Затем я удалил часть / bin из .gitconfig, поэтому строка становится

external = "git-diff-driver.sh"

... и это начало работать: оно начало слияние, но не прошло корректно часть '(repo)'. В качестве обходного пути я получил его без названий:

#!/bin/sh
"/c/Program Files/Araxis/Araxis Merge/compare.exe" -max "$2" "$5"

Удачи!

0 голосов
/ 06 мая 2009

Один из способов сделать это «просто» - установить TortoiseGit и установить инструменты сравнения / слияния в параметрах TortoiseGit.
Однако это не решает проблему, если вы хотите использовать diff из командной строки.

0 голосов
/ 05 мая 2009

Вы можете попробовать следовать сценарию , упомянутому в моем ответе о diffMerge (для Windows), и посмотреть, работает ли он.

Путь к исполняемому файлу лучше выразить с помощью:

#!/bin/sh

"C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"
...