我正在尝试使用Araxis Merge作为MSYSGit的差异/合并工具。
我在网上找到了一些资源:
我创建了/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进行差异合并,如果是,那你是怎么做的?
答案 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 difftool
和git 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
注意:
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.cmd
,mergetool.winmerge.cmd
,...),并在diff.tool
或merge.tool
设置中指定正确的工具。
在全局环境变量difftool.sh
引用的目录中创建mergetool.sh
和PATH
。它们甚至可以从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"
注意:
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环境变量。就个人而言,我从不打扰这样做,因为
.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开始的地步,但没有标签的标题。所以这将留给读者练习:)
观察和评论:
从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"
祝你好运!