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