我试图使用 轴合并 作为我的diff/合并工具MSYSGit.

我发现了一些资源上的净额:

  • 轴网站, 他们提到一个"简单"方式,但它意味着一个可执行文件(araxisgitdiff.exe 和araxisgitmerge.exe)是不一部分,我的发行版的.
  • 我还发现一些信息 gitguru, 但实际的信息:轴是疏在最好的,我不能让任何东西出了这一点。
  • 最后,有一些信息在一个旧的 计算器后, 但该建议的方法不会为我工作。该特定信息是针对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"

和唯一的结果我得到的是:

$内设的比较头^头
外部差异死亡,停止在PowerEditor/src/Notepad_plus.cpp.


编辑:

我们还试图与exe命名为 "c:/Program Files/Araxis/Araxis Merge/compare.exe" 作为建议通过一的答案,与相同的结果。


编辑:

我发现它很容易可以设置的,如果你使用TortoiseGit,但它似乎来处理差异本身并没有设置TortoiseGit给予任何指示关于如何设置轴作为一个合并工具的时候差异是援引自该命令行。


编辑:

因此,问题是:是否有任何人成功地使用轴的合并比较和合并的东西与MSYSGit,如果是,你怎样?

有帮助吗?

解决方案

如果你想有'混帐的差异'总是用轴可使用说明在帮助文件,但是如果你想要控制使用'混帐的差异',你通常会从命令行和'混帐difftool'参与的轴GUI。

尽量添加以下目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

其他提示

该文件轴已经更新: http://www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

我可以使用配置所示,没有任何修改。

右...我得到了它的工作,与msysgit版1.6.3.2.1299.gee46c,在DOS或Git庆典,与评估许可证用于轴合并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

注:

  • 通过设置比较差异。外从初脚本 git-difftool--helper, 我将使用difftool甚至当我会type'git diff'.
  • 不要忘记通过 $MERGED 你difftool脚本:这是唯一的变量的真实姓名的文件的差异'ed. $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

通过设置这些工具到一些脚本,你将能够开关工具,从这些脚本。
另一种办法是命名你的工具(mergetool.araxis.cmd, mergetool.winmerge.cmd,...)和指定的正确的工具 diff.toolmerge.tool 设置。

创建 difftool.shmergetool.sh 在目录中所引用的全球环境变量 PATH.他们会的工作,甚至从DOS(以及他们 sh --壳--脚本)

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" 

注:

  • 不可能有-标题1:"someTitle与空间"...唯一的标题没有空间会的工作,所以现在试试,没有任何'titleN 选项。
    得到它!你不能通过标题值直接来的 -title 选项,需要设置这一地方变量, "' '" 报价组合(双倍行情就会消失在shell script执行,留下的简报价,允许空间内的一个标题!)
  • $3 代表的真实姓名以及不是某些临时文件名为比较的目的。因此,使用 $3title1 选项,与空间。
  • 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

我不确定我的那些脚本做法正常工作时多个文件所涉及的(多差异、多重的文件要合并).
只是测试:它的工作,并轴compare.exe 不会打开一个选项每文件的差异或合并。
给它一个尝试,让我们知道;)

我认为你需要更小心你逃跑在你的.gitconfig.

不幸的是,由于配置变量是扩大和evaled,你的串需要一个有效的命令它那么'混帐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"'

我在努力与这个问题相当长一段时间,现在我终于可以说,所有建议肮脏的黑客(喜欢中间的外壳脚本),而不必要=D。事实是,所有的最新版本的MSYSGit(我1.6.4)支持轴合并(我2008年)。它涉及在不惊讶的是,国内它就是所谓的"轴".因此,所有你需要的是集

[merge]
    tool = araxis

在你 .gitconfig.你也必须包括轴文件夹到你的路径的环境变量(MSYSGit看起来 Compare.exe).

对于一个良好的措施,释放相关的设置"轴"mergetool,你可能已经配置(特别是,如果你碰巧选择的正是这一名称,如一些人在这页),都应该删除。这包括下的一切 [mergetool "araxis"] 部分。一定要删除它们从所有的配置(系统、全球和仓库),否则,它们可能会干扰正常的"的内部工具"的行为。

在任何情况下,如果你感兴趣的是如何MSYSGit将开始你的轴合并,或不知道什么其他mergetools它支持开箱,地方看起来是 \share\git-gui\lib\mergetool.tcl 脚本在你的MSYSGit安装的文件夹。

PS。你可能可以避免设置路环境变量,通过配置 mergetool.araxis.path.gitconfig.就个人而言,我从不介意这样做,因为

  1. 我用轴合并从命令行。
  2. 指定目录的路径 .gitconfig (尤其是一个喜欢 "C:\Program Files\Araxis\Araxis Merge\", ,其中包含空间)可以证明难以做正确的,因为它容易产生的反斜杠/正斜杠注的问题,这一瘟疫MSYSGit.

PPS。上述所有适用于使轴你difftool,太。I.e,你需要添加

[diff]
    tool = araxis

和除其他东西在 [difftool "araxis"] 部分,如果你在你的配置(不要忘记,设置了路径,虽然).

你可以尝试要遵循 脚本中所提到我的回答有关diffMerge (Windows),并看看如果它的工作。

可执行的路径可以更好地表示的:

#!/bin/sh

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

一个办法,我发现要这样做"简单的"是安装 TortoiseGit 并设置diff/合并工具在TortoiseGit的选择。
然而,这并没有解决的问题,如果你想要差异从命令行。

自从我被咬到制git不同,/并购,我想我会试图解决这个问题的一个一次。我有点AraxisMerge开始,但没有职称的标签。因此,将保留为一个运动对于读者:)

意见和评论:

  • 我没有AraxisMerge,所以我下载了它,并得到了一个免费的30天以评估许可以试试看的。这个版本(7.0它似乎)配有araxisgitdiff.exe和链接指示你送工作。所以这将是选#1:升级轴合并。
  • 因为我工作CMD.EXE,'混帐的差异头头^'不起作用。该'^'需要逃到'混帐的差异头"头^"'.
  • 我自己的工作我的使用kdiff3作为一个免费更换窗户的工作合理(它有助于,它是默认支持通过git)

开始的git-diff-driver.sh 给了相同的错误,给我。改变之后的脚本来只包含'echo',这并没有改变。这样的错误是独立于内容的剧本。

然后我删除'/bin'的一部分。gitconfig,使该线变得

external = "git-diff-driver.sh"

...这开始的工作:它开始合并,但它不会逃脱'(回购)'部分正确。作为一种解决办法,我得到了它的工作没有的标题:

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

祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top