如何将Araxis设置为MSYS git的差异/合并工具?

joc*_*oce 14 windows git diff msysgit araxis

我正在尝试使用Araxis Merge作为MSYSGit的差异/合并工具.

我在网上找到了一些资源:

  • Araxis网站上,他们提到了一种"简单"的方式,但它暗示了一个不属于我的发行版的可执行文件(araxisgitdiff.exe和araxisgitmerge.exe).
  • 我也在gitguru中找到了一些信息,但实际的信息是:Araxis充其量只是稀疏,我无法做出任何改变.
  • 最后,有一些旧的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"
Run Code Online (Sandbox Code Playgroud)

并编辑 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"
Run Code Online (Sandbox Code Playgroud)

我得到的唯一结果是:

$ git diff HEAD ^ HEAD
外部差异死亡,停在PowerEditor/src/Notepad_plus.cpp.


编辑:

我也尝试过使用"c:/Program Files/Araxis/Araxis Merge/compare.exe"其中一个答案所建议的exe ,并得到相同的结果.


编辑:

我发现如果你使用TortoiseGit它可以轻松设置,但它似乎自己处理diff并且没有来自TortoiseGit的设置给出任何关于如何在从命令行调用diff时将Araxis设置为合并工具的指示.


编辑:

所以,问题是:是否有人成功使用Araxis Merge来区分和合并MSYSGit,如果是这样,你怎么样?

The*_*ell 16

如果你想要'git diff'总是使用araxis你可以使用帮助文件中的说明,但是如果你想控制使用'git diff',就像你通常从命令行那样使用'git difftool'来搞定Araxis GUI.

尝试将以下内容添加到您的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
Run Code Online (Sandbox Code Playgroud)


eck*_*kes 6

araxis上的文档已更新:http://www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

我可以使用那里显示的配置而不做任何修改.


Von*_*onC 5

对...我在 DOS 或 Git Bash 下使用 msysgit 版本 1.6.3.2.1299.gee46c 运行,并获得了 Araxis Merge 2009, v2009.3713 的评估许可证:

方法是使用新的git difftoolgit 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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 通过将 diff.external 设置为 Git 脚本git-difftool--helper,即使我将键入“ git diff” ,我也会使用 difftool 。
  • 不要忘记传递$MERGED给您的 difftool 脚本:这是唯一一个具有被 diff 文件真实名称的变量。$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
Run Code Online (Sandbox Code Playgroud)

通过将这些工具设置为某些 shell 脚本,您将能够从这些脚本中切换工具。
另一种方法是命名您的工具(mergetool.araxis.cmd, mergetool.winmerge.cmd, ...)并在diff.toolmerge.tool设置中指定正确的工具。

在全局环境变量引用的目录中创建difftool.sh和。它们甚至可以在 DOS 下工作(它们是-- shell -- 脚本)mergetool.shPATHsh

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" 
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 不可能有 -title1:"someTitle With Space" ......只有没有空格的标题才有效......所以现在,尝试不带任何 ' titleN' 选项。
    知道了!您不能将标题值直接传递给-title选项,您需要将其设置为局部变量,带"' '"引号组合(在 shell 脚本执行过程中双引号会消失,留下简单的引号,标题中允许有空格!)
  • $3代表真实名称而不是一些用于差异目的的临时文件名。因此$3title1选项内使用,其中有空格。
  • git diff HEAD^ HEAD不会在 DOS 会话中工作:只会git diff "HEAD^" HEAD

合并工具

#!/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
Run Code Online (Sandbox Code Playgroud)

当涉及多个文件(多个差异,要合并的多个文件)时,我不确定这些脚本是否能正常工作。
刚刚测试了它:它有效,并且 Araxis compare.exe 确实为每个文件打开一个选项卡以进行差异或合并。
试一试,让我们知道;)