subversion默认的diff工具比较简单,文本界面,在使用时不是很理想。
winmerge则是一款非常优秀的diff/merger工具,由于winmerge自带和clearcase的集成功能,因此我在公司工作环境下一直都是使用winmerge替代clearcase自带的diff工具。
近日使用svn,每次执行svn diff后都对出来的文本比较结果的效果不满意,即使换成TortoiseSVN的diff工具也还是不够好。因此产生想法,能否将winmerger集成到subversion.
google了一下"winmerge subversion",顺利在国外的一个blog上找到答案,实验了一下,很成功,效果非常好,现在将具体方法共享出来。
设置之前首先请先安装好subversion和winmerge,之后步骤如下:
1.建立bat文件
文件名winmergediff.bat,内容如下:
start "WinMerge" /B /WAIT "C:\Program Files\WinMerge\WinMergeU.exe" /e /ub /dl %3 /dr %5 %6 %7
请保证WinMergeU.exe的路径和实际安装路径一致。这个文件放哪里无所谓,方便起见我放到subversion的客户端配置目录中。
2.修改subversion的客户端配置文件
在windows下,subversion的客户端配置文件存放在当前用户的application data目录下,具体路径取决于操作系统。
在vista下路径是 C:\Users\**user**\AppData\Roaming\Subversion.
在windows 2003下路径是c:\Documents and Settings\**user**\Application Data\Subversion.
打开config文件,找到这行
# diff-cmd = ********
打开注释,将内容修改为
diff-cmd = C:\Users\**user**\AppData\Roaming\Subversion\winmergediff.bat
测试一下,在命令行下执行 svn diff,可以看到winmerge会启动并显示两个不同版本的文件,diff的效果可不是svn那个文本界面能比的。
顺便去官网看了一下,发现现在使用的winmerge的版本比较旧了,下了一个新版本测试了一下,在安装时发现有两个选项,分别是和clearcase/TortoiseSVN集成,对于TortoiseSVN用户就非常的方便了。如果使用绿色版本的winmerge,可以自行手工设置,在settings->external programs->diff viewer中设置:"D:\Program Files\WinMerge\WinMergeU.exe -e -x -ub -dl %bname -dr %yname %base %mine"。
对于其他的版本控制工具,winmerge提供了相应的集成方法,详细请看官网文档
Version control integration
http://winmerge.org/docs/manual/VersionControl.html
饮水思源,贴出来找到的blog地址,作者还试过集成windiff,使用类似工具的朋友可以参考他的方法。
http://flimflan.com/blog/UsingWinMergeWithSubversion.aspx
值得注意的是有个回帖,提到一个改进,"single-instance behavior",不清楚这个特性的作用,有兴趣的朋友可以研究一下:
I have what I think is an improvement -- the latest version of WinMerge allows you to have "single-instance behavior"-- ie. One instance of WinMerge can have several diff sessions (comparisons of pairs of files) open in it.
To use this, just take out the "/WAIT" and add the "/s":
start "WinMerge" /B "C:\Program Files\WinMerge\WinMergeU.exe" /e /s /ub /dl %3 /dr %5 %6 %7