Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使WinMerge成为我的git合并工具?_Git_Winmerge_Difftool_Mergetool - Fatal编程技术网

如何使WinMerge成为我的git合并工具?

如何使WinMerge成为我的git合并工具?,git,winmerge,difftool,mergetool,Git,Winmerge,Difftool,Mergetool,我正在尝试将WinMerge与Git集成,就像我以前在Windows7Ultimate上看到的那样 我遵循了以下步骤,但是当我使用默认为vimdiff的git mergetool时,仍然会出现一个错误 在git:C/Program Files(x86)/git/with:winmergu的根目录中创建了一个名为winmerge.sh的文件,这是正确的位置 #!/bin/sh echo Launching WinMergeU.exe: $1 $2 "C:/Program Files (x86)/W

我正在尝试将WinMerge与Git集成,就像我以前在Windows7Ultimate上看到的那样

我遵循了以下步骤,但是当我使用默认为vimdiff的git mergetool时,仍然会出现一个错误

在git:C/Program Files(x86)/git/with:winmergu的根目录中创建了一个名为winmerge.sh的文件,这是正确的位置

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files (x86)/WinMerge/WinMergeU.exe" 
git /e /u /dl "Base" /dr "Mine" "$1" "$2"
并使用以下命令

git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
错误显示为:

git config option merge.tool set to unknown tool: winmerge

您的路径不正确,应该是
“/c/程序文件(x86)/WinMerge/winmergu.exe”

您正在shell脚本环境中运行,而不是本机windows命令提示符。

这是我的(在*nix上的
%userprofile%\.gitconfig
~/.gitconfig
中),没有包装(Win 7 Home Pro):


这更容易做到,对我来说也很有效:

git config --global diff.tool winmerge

git config --replace --global difftool.winmerge.cmd "\"C:\path to winmerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"

git config --global difftool.prompt false
您正在谈论合并工具,但您(以及其他一些有答案的人)正在将其配置为一个diff工具

要配置合并工具,您需要使用
merge.tool
mergetool
配置,而不是
diff.tool
difftool
,如下所示:

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false
然后你可以使用

git mergetool
这将打开要编辑的两个文件

@dvdvck在评论中提到,您可以为winmerge的结果文件指定第三个文件(outputpath参数),这值得称赞


为了完整起见,我要提到的是,winmerge的完整配置也旨在作为diff和merge工具。

在与此争论了一个多小时后,我安装了winmerge,到目前为止,它正是我想要的


Winmerge for Tortoise git的设置在

中描述。如果您决定使用SourceTree(或任何使用SourceTree的Google搜索程序),您可以通过将合并工具设置为自定义,将Diff命令指向WinMergeU.exe,将Winmerge用于合并工具,通常:

C:\Program Files (x86)\WinMerge\WinMergeU.exe
在参数使用中:

-e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED
这将导致左侧(标记为“我的”)可编辑,并且在WinMerge中保存时它将成为输出文件。右侧(标记为“他们的”)将是只读的(这是-wr参数),这是必需的,因为WinMerge将所有保存的文件输出到$MERGED文件,因此如果两侧都被编辑,它将输出左侧,然后用右侧覆盖;最好避免这种混乱

如果保持“备份文件”选项处于打开状态,WinMerge将生成一个.bak文件。此文件的内容将是原始左侧文件,如果保存多次,则将是倒数第二个输出文件。您可以关闭此功能,也可以将*.bak添加到.gitignore文件中

Git本身将在冲突解决后创建一个*.orig冲突文件,以防您弄糟它。同样,您可以将*.orig添加到.gitignore文件或关闭此功能。不幸的是,SourceTree没有GUI选项,因此启动git bash,或者,如果在安装过程中选择了正确的路径选项,则启动Windows命令提示符并执行以下操作:

git config --global mergetool.keepBackup false
这将停止Git创建*.orig文件。您还可以通过在用户目录的根目录中定位.gitconfig文件来直接编辑配置文件。如果您知道如何使用VIM,可以使用以下命令编辑整个内容:

git config --global --edit
例如:

git config --global --add diff.tool winmerge
git config --replace --global difftool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"
git config --global difftool.prompt false
Git 2.5+(2015年第二季度)将把Winmerge作为一个已知的

如果Winmerge位于
%PATH%
中,则只需使用
git config merge.tool Winmerge
即可
(它也适用于diff工具:
git config diff.tool winmerge

2015年5月20日,见 (于2015年6月1日被合并)
帮助人:

现在,所有配置都直接在Git中完成,包括:

  • diff命令:
    “$merge\u tool\u path”-u-e“$LOCAL”“$REMOTE”
  • 合并命令:
    “$merge\u tool\u path”-u-e-dl Local-dr Remote“$Local”“$Remote”“$MERGED”
mergetools
:将winmerge添加为内置工具 使用中描述的命令添加winmerge scriptlet,以便 用户可以使用winmerge而无需执行任何 附加配置


要将WinMerge作为Visual Studio 2017 Git插件的比较和合并工具,请执行以下操作:

在windows命令提示符下:键入>>git config--global--edit 这将打开要编辑的.getconfig文件

请使用以下命令更新:

[mergetool]
   prompt = false
   keepBackup = false
   keepTemporaries = false
[merge]
   tool = winmerge
   [mergetool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[diff]
   tool = winmerge
   [difftool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -u -e $LOCAL $REMOTE

通过命令行输入设置已包含在其他答案中。用于与WinMerge进行完全三向合并的
.gitconfig
文件可以如下配置(此示例来自Windows):

旗帜资料:

  • /e-允许只需按一次“esc”键即可关闭WinMerge
  • /u-防止WinMerge将文件记录在最近使用的列表中
  • /dl、/dm和/dl—左窗格、中窗格和右窗格的说明
  • /o-输出文件。保存任何窗格将把该窗格的内容输出到输出文件
trustExitCode=true
告诉git接受输出,无需进一步提示

keepBackup=false
将自动删除自动生成的
*.orig
文件


注意:使用difftool时,$BASE和$MERGE变量都只包含文件名。

我最初对@CapinWinky使用SourceTree中WinMerge的答案投了赞成票。这个答案仍然有效,但WinMerge现在还支持需要额外参数的三方合并

在SourceTree选项对话框中,我选择“自定义”作为合并工具,输入命令如下:

C:\Program Files\WinMerge\WinMergeU.exe
论点如下:

-u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
似乎没有必要将远程/本地/基本参数括在引号中,以满足其中包含空格的路径的需要

此配置用于将中间窗格用作合并的输出文件

我遇到的问题是,当尝试合并时,WinMerge无法打开。Sourcetree启动Git以打开您选择的工具。使用Sourcetree的自定义
C:\Program Files\WinMerge\WinMergeU.exe
-u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
[mergetool "sourcetree"]
    cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' -u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
    trustExitCode = true
    cmd = 'C:/Program '
D:\Program Files\WinMerge\WinMergeU.exe /e /ub /fm /wl /wr /dl %tname /dm %bname /dr %yname  %theirs %base %mine /o %merged /am
[mergetool "winmerge"]
    cmd = WinMergeU -e -ub -fm -wl -wr $LOCAL $BASE $REMOTE -o $MERGED -am