我试图使用Araxis合并作为我的MSYSGit的差异/合并工具。
我在网上find了一些资源:
我创build了/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 "c:/Program Files/Araxis/Araxis Merge/compare.exe"
,其结果如下。
我发现如果使用TortoiseGit,可以很容易地设置它,但似乎是自行处理差异,并且从命令行调用diff时,没有任何来自TortoiseGit的设置给出了关于如何将Araxis设置为合并工具的任何指示。
所以,问题是:有没有人成功使用Araxis Merge来与MSYSGit进行区分和合并,如果是这样的话,你是怎么做的?
如果你想让'git diff'总是使用araxis,你可以使用帮助文件中的指令,但是如果你想要控制使用'git diff',就像你通常从命令行和'git difftool' Araxis GUI。
尝试添加以下到您的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合并2009年,v2009.3713评估许可证:
方法是使用新的git difftool
和git mergetool
,而不是简单的diff。
首先,我们为这些差异和合并工具设置一些脚本
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
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
或diff.tool
设置中指定正确的工具。
在您的全局环境变量PATH
引用的目录中创建difftool.sh
和mergetool.sh
。 他们甚至可以在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
选项,你需要把它设置为一个局部变量,用"' '"
quotes组合(双引号将在shell脚本执行过程中消失,留下简单的引号,一个标题!) $3
代表真实的名称,而不是一些临时的文件名,用于比较目的。 因此,在title1
选项中使用$3
,其中有空格。 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确实打开每个文件的一个选项卡进行比较或合并。
试试看,让我们知道;)
我认为你需要在你的.gitconfig文件中更加小心。
不幸的是,由于配置变量扩展和逃避的方式,你的字符串需要是一个有效的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"'
你可以试着按照我在关于diffMerge (对于Windows)的回答中提到的脚本 ,看看它是否有效。
可执行路径可以更好地表达为:
#!/bin/sh "C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"
我发现做“简单”的一种方法是安装TortoiseGit并在TortoiseGit选项中设置差异/合并工具。
但是,如果您想从命令行进行比较,则不能解决问题。
由于我一直被咬到定制git的不同/合并,我想我会试图修复这一个一劳永逸。 我达到了AraxisMerge开始的地步,但没有标签的标题。 所以这将留给读者作为练习:)
意见和评论:
从git-diff-driver.sh开始,给了我同样的错误。 在将脚本更改为仅包含“回显”后,这并没有改变。 所以错误是独立于脚本的内容。
然后,我从.gitconfig中删除了“/ bin”部分,所以这一行变成了
external = "git-diff-driver.sh"
…这开始工作:它开始合并,但它不正确地逃避“(回购)”的一部分。 作为一个解决方法,我得到了它的工作没有标题:
#!/bin/sh "/c/Program Files/Araxis/Araxis Merge/compare.exe" -max "$2" "$5"
祝你好运!
我在这个问题上苦苦挣扎了好一会儿,现在我终于可以说,所有建议的肮脏的黑客(比如中间shell脚本)都是不必要的= D。 事情是,所有的最新版本的MSYSGit(我有1.6.4)支持Araxis合并(我有2008)开箱即用。 毫不奇怪,在内部它被称为“araxis”。 所以,你需要的就是设置
[merge] tool = araxis
在你的.gitconfig
。 此外,您必须包括Araxis文件夹到您的PATH环境变量(MSYSGit查找Compare.exe
)。
对于一个好的措施,其他与“araxis”mergetool有关的Git设置,你可以配置(特别是如果你恰好选择了这个名字,就像本页上的一些人一样),都应该被删除。 这包括[mergetool "araxis"]
部分下的所有内容。 确保从所有配置(系统,全局和存储库)中删除它们,否则,它们可能会干扰正常的“内部工具”行为。
无论如何,如果您对MSYSGit将如何启动您的Araxis Merge感兴趣,或者想知道它支持的其他合并工具是什么,那么在您的位置查看\share\git-gui\lib\mergetool.tcl
脚本MSYSGit安装文件夹。
PS。 您可以通过在.gitconfig
配置mergetool.araxis.path
来避免设置PATH环境变量。 就我个人而言,我从来没有打扰过这样做
.gitconfig
指定目录路径(尤其是像"C:\Program Files\Araxis\Araxis Merge\"
,其中包含空格)的目录路径可能难以正确完成,因为它容易出现反斜杠/转发问题,困扰MSYSGit 。 PPS。 以上所有内容都适用于使Araxis成为你的差异化工具。 即,你需要添加
[diff] tool = araxis
并删除[difftool "araxis"]
部分中的任何其他内容,如果您的配置中有它(不要忘记设置PATH,虽然)。