Как установить Araxis в качестве инструмента diff / merge для MSYS git?

StackOverflow https://stackoverflow.com/questions/825478

Вопрос

Я пытаюсь использовать Слияние Араксиса как мой инструмент diff / merge для MSYSGit.

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

  • На Сайт Araxis, они упоминают "простой" способ, но это подразумевает исполняемые файлы (araxisgitdiff.exe и araxisgitmerge.exe), которые не являются частью моего дистрибутива.
  • Я также нашел кое-какую информацию в гитгуру, но фактическая информация повторно:Араксис в лучшем случае разрежен, и я ничего не мог из этого извлечь.
  • Наконец, появилась некоторая информация о более старом сообщение 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^ ЗАГОЛОВОК
внешняя разница исчезла, остановившись на PowerEditor/src/Notepad_plus.cpp.


Редактировать:

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


Редактировать:

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


Редактировать:

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

Это было полезно?

Решение

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

Попробуйте добавить следующее в свою конфигурацию git::

[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

Другие советы

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

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

Правильно...У меня все заработало, с msysgit версии 1.6.3.2.1299.gee46c, под DOS или Git Bash, с пробной лицензией для Araxis Merge 2009, v2009.3713:

Подход заключается в использовании нового git difftool и git mergetool, вместо простого diff.

Во-первых, давайте настроим несколько скриптов для этих инструментов diff и merge

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 -- оболочка -- скрипты)

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

Я думаю, что вам нужно быть немного осторожнее с экранированием в вашем .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"'

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

[merge]
    tool = araxis

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

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

В любом случае, если вам интересно, как MSYSGit запустит ваше слияние с Araxis, или вам интересно, какие другие инструменты слияния он поддерживает из коробки, то стоит посмотреть \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.

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

[diff]
    tool = araxis

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

Вы могли бы попытаться следовать скрипт, упомянутый в моем ответе о DiffMerge (для Windows) и посмотрите, работает ли это.

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

#!/bin/sh

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

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

Поскольку я был склонен к настраиваемым различиям / слияниям 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"

Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top