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

时间:2009-05-05 15:37:37

标签: windows git diff msysgit araxis

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

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

  • Araxis site上,他们提到了一种“简单”的方式,但它暗示了一个不属于我的发行版的可执行文件(araxisgitdiff.exe和araxisgitmerge.exe)。
  • 我也在gitguru找到了一些信息,但实际的信息是:Araxis充其量是稀疏的,我无法做出任何改变。
  • 最后,有一些关于旧版stackoverflow post的信息,但建议的方法对我不起作用。该特定信息面向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
  外部差异死亡,停在PowerEditor / src / Notepad_plus.cpp。


编辑:

我也尝试使用名为"c:/Program Files/Araxis/Araxis Merge/compare.exe"的exe,如其中一个答案所示,结果相同。


编辑:

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


编辑:

所以,问题是:是否有人成功使用Araxis Merge与MSYSGit进行差异合并,如果是,那你是怎么做的?

8 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

是的...我使用msysgit版本1.6.3.2.1299.gee46c,在DOS或Git Bash下,使用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

注意:

  • 通过将diff.external设置为Git脚本git-difftool--helper,即使我输入“git diff”,我也会使用difftool。
  • 不要忘记将$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

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

在全局环境变量difftool.sh引用的目录中创建mergetool.shPATH。它们甚至可以从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” ...只有没有空格的标题才能正常工作......所以现在,试试它没有任何'{{1} ''选项。
    得到它了!您不能将标题值直接传递给titleN选项,您需要将其设置为局部变量,使用-title引号组合(双引号将在shell脚本执行期间消失,留下简单的引号,允许标题内的空格!)
  • "' '"代表真实姓名,而不是用于差异目的的临时文件名。因此,在$3选项中使用$3,其中包含空格。
  • title1在DOS会话中不起作用:只有git diff HEAD^ HEAD会。

<强> mergetool.sh

git diff "HEAD^" HEAD

我不确定当涉及多个文件时,这些脚本是否正常工作(多个差异,要合并的多个文件)。
刚试过它:它有效,Araxis compare.exe会为每个文件打开一个标签进行区分或合并 试一试,让我们知道;)

答案 3 :(得分:2)

我认为您在.gitconfig中转义时需要更加小心。

不幸的是,由于config变量的扩展和扩展方式,你的字符串需要是一个有效的shell命令,然后'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"'

答案 4 :(得分:1)

我在这个问题上挣扎了很长一段时间,现在我终于可以说,所有建议的脏黑客(比如中间shell脚本)都是不必要的= D。事实上,所有最新版本的MSYSGit(我有1.6.4)都支持Araxis Merge(我有2008年)。毫不奇怪,内部它被称为“araxis”。所以,你需要的只是设置

[merge]
    tool = araxis

.gitconfig中。此外,您必须将Araxis文件夹包含在PATH环境变量中(MSYSGit查找Compare.exe)。

对于一个好的衡量标准,与“araxis”mergetool相关的其他Git设置,您可以配置(特别是,如果您碰巧选择该名称,就像本页面上的某些人一样),应该全部删除。这包括[mergetool "araxis"]部分下的所有内容。请务必将其从所有配置(系统,全局和存储库)中删除,否则,它们可能会干扰正常的“内部工具”行为。

在任何情况下,如果您对MSYSGit如何启动Araxis Merge感兴趣,或者想知道它支持哪些其他合并工具,那么在MSYSGit安装文件夹中查找的地方是\share\git-gui\lib\mergetool.tcl脚本。

PS。您可以通过在mergetool.araxis.path中配置.gitconfig来避免设置PATH环境变量。就个人而言,我从不打扰这样做,因为

  1. 无论如何我从命令行使用Araxis Merge。
  2. 指定.gitconfig中的目录路径(尤其是包含空格的"C:\Program Files\Araxis\Araxis Merge\"之类的目录路径)可能很难正确完成,因为它容易出现反斜杠/转发闪烁问题,困扰MSYSGit。 / LI>

    PPS。以上所有内容也适用于使Araxis成为你的难度。即,你需要添加

    [diff]
        tool = araxis
    

    并删除[difftool "araxis"]部分中的任何其他内容(如果您在配置中已将其删除)(不要忘记设置PATH)。

答案 5 :(得分:0)

您可以尝试按照script mentioned in my answer about diffMerge(适用于Windows)查看是否有效。

可执行路径可以用以下方式更好地表达:

#!/bin/sh

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

答案 6 :(得分:0)

我发现“简单”执行此操作的一种方法是安装TortoiseGit并在TortoiseGit选项中设置差异/合并工具。
但是,如果要从命令行进行区分,则无法解决此问题。

答案 7 :(得分:0)

由于我被咬过定制的git差异/合并,我想我会尝试一劳永逸地解决这个问题。我到了AraxisMerge开始的地步,但没有标签的标题。所以这将留给读者练习:)

观察和评论:

  • 我没有AraxisMerge,所以我下载了它并获得了30天的免费评估许可证来试用它。此版本(似乎是7.0)附带araxisgitdiff.exe,并且您发送的说明链接有效。所以这将是选项#1:升级araxis merge。
  • 由于我在CMD.EXE工作,'git diff HEAD HEAD ^'不起作用。 '^'需要转义为'git diff HEAD“HEAD ^”'。
  • 对于我自己的工作,我使用kdiff3作为Windows上的免费替代品,工作得相当好(默认情况下git支持它有帮助)

从git-diff-driver.sh开始向我提出了同样的错误。将脚本更改为仅包含'echo'后,这并没有改变。所以错误与脚本的内容无关。

然后我从.gitconfig中删除了'/ bin'部分,因此该行变为

external = "git-diff-driver.sh"

...这开始起作用:它开始合并,但它没有正确地逃避'(repo)'部分。作为一种解决方法,我让它在没有标题的情况下工作:

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

相关问题