如何配置WinMerge作为Git的合并工具

657 查看

前几天和同学协同开发的时候遇到了合并冲突问题,git的默认gui又只能Use remote edtionorUse local edtion 无法进行更加细致的合并。所以我就想配置一个合并工具。

搜索了一番决定使用WinMerge,然后就展开了为期两天的探索。

搜索Git和WinMerge就会出来很多配置教程,我尝试了很多都不行,后来我发现了问题的所在。先说一下我是怎么做的。


我的环境是32位win7+Git-for-windows2.4.5+WinMerge


  1. 首先安装好WinMerge,这一步没什么好说的,就是点击下一步就好。记得要点那个把WinMerge添加到环境变量里的选项,如果没选的话下一步需要修改profile文件。

  2. 然后配置Git Bash的PATH变量,之前很多教程都在说这个PATH但是都不甚详细。我摸索了一下(怪我自己Linux知识不熟),直接上代码大家应该能看明白。
    export PATH="$PATH:/c/Program Files/WinMerge/"
    不过还有一个问题就是上面那句命令只能在不关闭bash前生效,可以去../Git/etc/里面修改profile文件,在最后一行加上上面那行命令就行。

  3. 第三步需要下载其他文件,由于我的Git版本是2.4.5,mergetool里面并没有添加对winmerge的支持,但是自从2.5.0之后Git添加了对winmerge的支持,所以我就从Git在github的主页上下载了最新的源码,从源码的/mergetool/目录下面copy了一份winmerge文件到../Git/mingw32/libexec/git-core/mergetool/下面。如果是Git2.x一下的版本目录应该是../Git/libexec/git-core/mergetool/

  4. 完成这三步之后就可以尝试一下了,在bash里面输入
    git mergetool --tool-help
    这时候bash就会列出能够使用的工具,如果winmerge在可用的那一栏里,就标志着可以用了。这时候还得让git知道你要用winmerge了。还需要在bash里面输入以下命令:
    git config --global merge.tool winmerge


但是!但是! 这时候git difftool还是不能打开winmerge,但是git mergetool已经可以用winmerge了。更详细的原因还没有研究。
不要吐槽是因为没有设置diff.tool,设置了也不行,所以上面就没说。