TITLE:WinMergeをSubversionのdiffとして使用する

WinMergeをSubversionのdiffとして使用する

編集者:Terai Atsuhiro~

作成日:
更新日:2014-09-26 (金) 19:07:04

概要

概要

このページでは、Windows環境のSubversionで、差分の比較(diff)に、WinMergeを使用する方法をメモしています。
http://terai.xrea.jp/data/subversion/winmerge.png
winmerge.png

インストール

どちらも特に設定は必要ありません。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を作成して使用する例になっています。

#spandel
@echo off
#spanend
#spandel
REM ここに自分の好きな diff プログラムを設定してください。
#spanend
#spandel
REM SET DIFF="C:\Program Files\WinMerge\WinMerge.exe"
#spanend
#spandel
SET DIFF="C:\Program Files\WinMerge\WinMergeU.exe"
#spanend
#spanadd
@ECHO OFF
#spanend
#spanadd
SETLOCAL
#spanend
#spanadd
REM Configure your favorite diff program here.
#spanend
#spanadd
REM SET DIFF="C:\Program Files\Funky Stuff\My Diff Tool.exe"
#spanend
#spanadd
REM SET DIFF="C:\Program Files\WinMerge\WinMergeU.exe"
#spanend
#spanadd
REM SET DIFF="C:\Program Files (x86)\WinMerge\WinMergeU.exe"
#spanend
#spanadd
SET DIFF=%PROGRAMFILES%\WinMerge\WinMergeU.exe
#spanend

#spandel
REM Subversion は 6 番目と 7 番目の引数としてパス名が必要です
#spanend
#spandel
SET LEFT=%6
#spanend
#spandel
SET RIGHT=%7
#spanend
#spanadd
REM Subversion provides the paths we need as the sixth and seventh 
#spanend
#spanadd
REM parameters.
#spanend
#spanadd
REM SET LEFT=%6
#spanend
#spanadd
REM SET RIGHT=%7
#spanend
#spanadd
for /f "USEBACKQ TOKENS=*" %%i in (`cygpath -m "%6"`) do @set LEFT=%%i
#spanend
#spanadd
for /f "USEBACKQ TOKENS=*" %%i in (`cygpath -m "%7"`) do @set RIGHT=%%i
#spanend

#spandel
REM diff コマンドを呼び出します (merge プログラムで意味を持つように
#spanend
#spandel
REM 以下の行を変更してください。)
#spanend
#spandel
REM %DIFF% --left %LEFT% --right %RIGHT% /dl %3 /dr %5
#spanend
#spandel
start "WinMerge" /B %DIFF% /e /s /ub --left %LEFT% --right %RIGHT% /dl %3 /dr %5
#spanend
#spanadd
echo %LEFT%
#spanend
#spanadd
echo %RIGHT%
#spanend

#spandel
SET DIFF=
#spanend
#spandel
SET LEFT=
#spanend
#spandel
SET RIGHT=
#spanend
#spanadd
REM Call the diff command (change the following line to make sense for
#spanend
#spanadd
REM your merge program).
#spanend
#spanadd
REM %DIFF% --left %LEFT% --right %RIGHT%
#spanend
#spanadd
REM STARTはcmd.exeの組み込みコマンドなので注意
#spanend
#spanadd
START "WinMerge" /B "%DIFF%" /e /s /ub /dl %3 /dr %5 "%LEFT%" "%RIGHT%"
#spanend

#spandel
REM 差分がなけばエラーコード 0 を、差分があれば 1 を返します。
#spanend
#spandel
REM それ以外のエラーコードは致命的とみなします。
#spanend
#spanadd
REM Return an errorcode of 0 if no differences were detected, 1 if some were.
#spanend
#spanadd
REM Any other errorcode will be treated as fatal.
#spanend
バッチファイルを作成したら、コマンドラインでテストします。
svn diff Example.java -r PREV:HEAD --diff-cmd=winmerge.bat
  • winmerge.sh ファイル
    • cygwin版のsvn.exeを使用するなら、cygpathでパスを変換しておく
    • 使用例: svn diff --diff-cmd=winmerge.sh
#spanend
#spanadd
#!/bin/sh
#spanend
#spanadd
LEFT=`cygpath -m "$6"`
#spanend
#spanadd
RIGHT=`cygpath -m "$7"`
#spanend
#spanadd
"$PROGRAMFILES/WinMerge/WinMergeU.exe" -e -s -ub -dl "$3" -dr "$5" "$LEFT" "$RIGHT"
#spanend
#spanadd

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
#spanend
#spanadd
[helpers]
#spanend
#spanadd
### Set diff-cmd to the absolute path of your 'diff' program.
#spanend
#spanadd
###   This will override the compile-time default, which is to use
#spanend
#spanadd
###   Subversion's internal diff implementation.
#spanend
# diff-cmd = diff_program (diff, gdiff, etc.)
#spanadd
diff-cmd = winmerge.bat
#spanend
#spanadd

コマンドラインなどで、diff-cmdオプションを指定しなくても、WinMergeが立ち上がります*1

svn diff Example.java -r PREV:HEAD

参考リンク

参考リンク

コメント

コメント