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

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

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

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

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

#!/bin/sh

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

и отредактированы 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
внешний дифференциал умер, остановившись на PowerEditor/src / Notepad_plus.СРР.


Edit:

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


Edit:

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


Edit:

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

8 ответов


Если вы хотите, чтобы "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 и 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.внешний по отношению к скрипту 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 -- scripts)

difftool.sh

#!/bin/sh
echo Launching Araxis Merge.exe: 
t1="' (from)'"
t2="'(to)'"
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -nowait -2 -title1:${t1} -title2:${t2} "" "" 

Примечания:

  • невозможно иметь-title1: "someTitle с Космос"... работает только название без пробела..., так что пока попробуйте без каких-либо ''.
    Получил его! Вы не можете передать значение заголовка непосредственно в -title вариант, вам нужно установить его в локальную переменную, с "' '" комбинации кавычек (двойные кавычки исчезнут во время выполнения сценария оболочки, оставив простые кавычки, позволяя пробелы в заголовке!)
  • представляют реальное имя, а не какое-то временное имя файла для целью дифф. Следовательно, использование внутри 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=
base=
remote=
result=

t1="' (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 сравнить.exe открывает одну вкладку на файл в diff или слиться.
Дайте ему попробовать и дайте нам знать ;)


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

к сожалению, из-за того, как переменная config расширена и evaled, ваша строка должна быть допустимой командой оболочки, которая затем "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 в свой путь переменная среды (MSYSGit ищет Compare.exe).

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

In в любом случае, если вас интересует, как 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\", который содержит пробелы) может оказаться трудно сделать правильно, так как он склонен к проблемам обратной косой черты/forwardslash, что чума MSYSGit.

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

[diff]
    tool = araxis

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


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

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

#!/bin/sh

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

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


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

замечания и комментарии:

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

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

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

external = "git-diff-driver.sh"

...и это начало работать: он начал слияние, но он не избегает части "(РЕПО) " правильно. В качестве обходного пути я получил его работу без названий с:

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

удачи!