• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:WinMergeをSubversionのdiffとして使用する
#keywords(Subversion Diff WinMerge)
#description(Windows環境のSubversionで、差分の比較(diff)に、WinMergeを使用する方法をメモしています。)
*WinMergeをSubversionのdiffとして使用する [#x546a1a0]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:~
更新日:&lastmod;

#contents

**概要 [#p838af6f]
このページでは、Windows環境のSubversionで、差分の比較(diff)に、WinMergeを使用する方法をメモしています。

http://terai.xrea.jp/data/subversion/winmerge.png

**インストール [#j91a5a73]
どちらも特に設定は必要ありません。[[WinMerge 日本語版>http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html]]などからダウンロードしてインストールするだけです。ここではそれぞれ以下のバージョンを利用しています。
- svn 1.4.2 (r22196)
- WinMerge-2.7.4.0-jp-2

**コマンドライン [#c18b151c]
コマンドラインから使用する場合は、以下の例のようにオプションを指定します。
 svn diff Example.java -r PREV:HEAD --diff-cmd="C:\Program Files\WinMerge\WinMerge.exe" -x "/dl /dr"

バッチファイルを使って、入力を短くしてみます。以下は、パスの通った場所に''winmerge.bat''を作成して使用する例になっています。

- ''winmerge.bat'' ファイル([[外部差分ツールの利用>http://subversion.bluegate.org/doc/ch07s08.html#svn.advanced.externaldifftools.diff.ex-2]])

#code{{
@echo off
REM ここに自分の好きな diff プログラムを設定してください。
REM SET DIFF="C:\Program Files\WinMerge\WinMerge.exe"
SET DIFF="C:\Program Files\WinMerge\WinMergeU.exe"

REM Subversion は 6 番目と 7 番目の引数としてパス名が必要です
SET LEFT=%6
SET RIGHT=%7

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

SET DIFF=
SET LEFT=
SET RIGHT=

REM 差分がなけばエラーコード 0 を、差分があれば 1 を返します。
REM それ以外のエラーコードは致命的とみなします。
}}

バッチファイルを作成したら、コマンドラインでテストします。
 svn diff Example.java -r PREV:HEAD --diff-cmd=winmerge.bat

** config ファイル [#z099b880]
''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
#code{{
[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が立ち上がります((%%ただし、うっかり大量のファイルを比較してしまうと、一つずつ順番にWinMergeが立ち上がるので注意が必要%%))。
 svn diff Example.java -r PREV:HEAD

*参考リンク [#z313e92f]
- [[WinMerge 日本語版>http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html]]
- [[第9章 Subversion リファレンス>http://subversion.bluegate.org/doc/ch09.html#svn.ref.svn]]
- [[16. Command Line>http://winmerge.org/2.6/manual/CommandLine.html]]
- [[外部差分ツールの利用>http://subversion.bluegate.org/doc/ch07s08.html#svn.advanced.externaldifftools.diff.ex-2]]
- [[Joshua Flanagan - Using WinMerge with Subversion>http://flimflan.com/blog/UsingWinMergeWithSubversion.aspx]]
-- [[Windowsコマンド集:(start)>http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/start.shtml]]
-- [[16. Command Line>http://winmerge.org/2.6/manual/CommandLine.html]]

*コメント [#s74a5720]
- [[Joshua Flanagan - Using WinMerge with Subversion>http://flimflan.com/blog/UsingWinMergeWithSubversion.aspx]]を参考にしてバッチファイルを変更(比較を一つのWinMergeで開くように)しました。 -- [[terai]] &new{2008-07-01 (火) 17:46:39};

#comment