WinMergeをSubversionのdiffとして使用する
Total: 45984
, Today: 1
, Yesterday: 4
Posted by aterai at
Last-modified:
概要
このページでは、Windows環境のSubversionで、差分の比較(diff)に、WinMergeを使用する方法をメモしています。
インストール
どちらも特に設定は必要ありません。WinMerge 日本語版などからダウンロードしてインストールするだけです。ここではそれぞれ以下のバージョンを利用しています。
- svn 1.4.2 (r22196)
- WinMerge-2.7.4.0-jp-2
コマンドライン
コマンドラインから使用する場合は、以下の例のようにオプションを指定します。
svn diff Example.java -r PREV:HEAD --diff-cmd="C:\Program Files\WinMerge\WinMerge.exe" -x "/dl /dr"
バッチファイルを使って、入力を短くしてみます。以下は、パスの通った場所にwinmerge.batを作成して使用する例になっています。
- winmerge.bat ファイル
- Using External Differencing Tools
- 使用例:
svn diff Example.java -r PREV:HEAD --diff-cmd=winmerge.bat
@ECHO OFF
SETLOCAL
REM Configure your favorite diff program here.
REM SET DIFF="C:\Program Files\Funky Stuff\My Diff Tool.exe"
REM SET DIFF="C:\Program Files\WinMerge\WinMergeU.exe"
REM SET DIFF="C:\Program Files (x86)\WinMerge\WinMergeU.exe"
SET DIFF=%PROGRAMFILES%\WinMerge\WinMergeU.exe
REM Subversion provides the paths we need as the sixth and seventh
REM parameters.
REM SET LEFT=%6
REM SET RIGHT=%7
for /f "USEBACKQ TOKENS=*" %%i in (`cygpath -m "%6"`) do @set LEFT=%%i
for /f "USEBACKQ TOKENS=*" %%i in (`cygpath -m "%7"`) do @set RIGHT=%%i
echo %LEFT%
echo %RIGHT%
REM Call the diff command (change the following line to make sense for
REM your merge program).
REM %DIFF% --left %LEFT% --right %RIGHT%
REM STARTはcmd.exeの組み込みコマンドなので注意
START "WinMerge" /B "%DIFF%" /e /s /ub /dl %3 /dr %5 "%LEFT%" "%RIGHT%"
REM Return an errorcode of 0 if no differences were detected, 1 if some were.
REM Any other errorcode will be treated as fatal.
- winmerge.sh ファイル
cygwin
版のsvn.exe
を使用するなら、cygpath
でパスを変換しておく- 使用例:
svn diff --diff-cmd=winmerge.sh
#!/bin/sh
LEFT=`cygpath -m "$6"`
RIGHT=`cygpath -m "$7"`
"$PROGRAMFILES/WinMerge/WinMergeU.exe" -e -s -ub -dl "$3" -dr "$5" "$LEFT" "$RIGHT"
config ファイル
C:\Documents and Settings\ユーザ名\Application Data\Subversion\config ファイルに、diff-cmdオプションを追加して先に作成したバッチファイルを指定しています。
[helpers]
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
# diff-cmd = diff_program (diff, gdiff, etc.)
diff-cmd = winmerge.bat
コマンドラインなどで、diff-cmdオプションを指定しなくても、WinMergeが立ち上がります*1。
svn diff Example.java -r PREV:HEAD
参考リンク
- WinMerge 日本語版
- 16. Command Line
- Using External Differencing Tools
- Joshua Flanagan - Using WinMerge with Subversion