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

вы можете попытаться использовать XmlReader для того, чтобы делать то, что хотите, это довольно просто. Посмотрите здесь Как перезагрузитьData в tableView с помощью didSelectedRowAtIndexPath и вызвать группу методов в нем

14
задан Community 23 May 2017 в 11:45
поделиться

7 ответов

Если вы хотите, чтобы '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
16
ответ дан 1 December 2019 в 09:13
поделиться

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

К сожалению, из-за того, как переменная конфигурации расширена и уклонена, ваша строка должна быть действительной командой оболочки, которая затем будет сброшена с помощью 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"'
2
ответ дан 1 December 2019 в 09:13
поделиться

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

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

#!/bin/sh

"C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"
0
ответ дан 1 December 2019 в 09:13
поделиться

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

0
ответ дан 1 December 2019 в 09:13
поделиться

Так как я был укушен настройкой git different / mergers, я подумал, что постараюсь исправить это раз и навсегда. Я дошел до того, что 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 была выдана та же ошибка для меня. После изменения сценария, чтобы он содержал только «эхо», это не изменилось. Таким образом, ошибка не зависит от содержимого скрипта.

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

external = "git-diff-driver.sh"

... и это начало работать: это начало слияние, но он не выходит из части «(репо)» правильно. В качестве обходного пути я заставил его работать без заголовков с помощью:

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

Удачи!

Таким образом, ошибка не зависит от содержимого скрипта.

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

external = "git-diff-driver.sh"

... и это начало работать: это начало слияние, но он не выходит из части «(репо)» правильно. В качестве обходного пути я заставил его работать без заголовков с помощью:

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

Удачи!

Таким образом, ошибка не зависит от содержимого скрипта.

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

external = "git-diff-driver.sh"

... и это начало работать: это начало слияние, но он не выходит из части «(репо)» правильно. В качестве обходного пути я заставил его работать без заголовков с помощью:

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

Удачи!

0
ответ дан 1 December 2019 в 09:13
поделиться

Верно ... У меня все заработало, с 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 - временные имена.

Для инструмента слияния вы должны установить следующие глобальные значения: Другой подход - назвать ваши инструменты ( mergetool.araxis.cmd , mergetool.winmerge.cmd , ...) и указать правильный инструмент в diff.tool Параметр или merge.tool .

Создайте difftool.sh и mergetool.sh в каталоге, на который ссылается ваша глобальная переменная среды ПУТЬ . Они будут работать даже из DOS (а это sh - shell - scripts)

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 открывает одну вкладку для каждого файла для сравнения или объединения.
разрешая пробелы в заголовке!)

  • $ 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 открывает одну вкладку для каждого файла для сравнения или объединения.
    разрешая пробелы в заголовке!)

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

    4
    ответ дан 1 December 2019 в 09:13
    поделиться

    Я долго боролся с этой проблемой, и теперь я наконец могу сказать, что все предлагаемые грязные хаки (например, промежуточные сценарии оболочки) не нужны = 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.

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

    [diff]
        tool = araxis
    

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

    1
    ответ дан 1 December 2019 в 09:13
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: