Subversion/WinMerge のバックアップの現在との差分(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Subversion/WinMerge へ行く。
- 1 (2008-07-01 (火) 17:45:52)
- 2 (2008-07-01 (火) 21:05:15)
- 3 (2008-12-02 (火) 13:10:04)
- 4 (2008-12-15 (月) 20:29:40)
- 5 (2009-01-05 (月) 13:41:50)
- 6 (2010-05-04 (火) 06:00:00)
- 7 (2010-05-04 (火) 15:56:11)
- 8 (2010-05-23 (日) 03:06:12)
- 9 (2010-05-24 (月) 15:08:22)
- 10 (2010-05-26 (水) 08:37:49)
- 11 (2010-12-17 (金) 14:36:58)
- 12 (2010-12-19 (日) 16:38:51)
- 13 (2011-01-14 (金) 16:35:24)
- 14 (2011-06-04 (土) 04:55:17)
- 15 (2012-08-13 (月) 16:05:12)
- 16 (2013-08-19 (月) 13:48:15)
- 17 (2013-08-19 (月) 15:28:47)
- 18 (2013-08-30 (金) 17:54:38)
- 19 (2013-08-31 (土) 21:06:40)
- 20 (2014-09-04 (木) 00:52:51)
- 21 (2014-09-26 (金) 19:06:12)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:WinMergeをSubversionのdiffとして使用する #keywords(Subversion Diff WinMerge) #description(Windows環境のSubversionで、差分の比較(diff)に、WinMergeを使用する方法をメモしています。) *WinMergeをSubversionのdiffとして使用する [#x546a1a0] >編集者:[[Terai Atsuhiro>terai]]~ 作成日:~ 更新日:&lastmod; --- title: WinMergeをSubversionのdiffとして使用する keywords: [Subversion, Diff, WinMerge] author: aterai pubdate: 2008-07-01T17:45:52+09:00 description: Windows環境のSubversionで、差分の比較(diff)にWinMergeを使用する方法について記述しています。 --- #contents **概要 [#p838af6f] * 概要 [#p838af6f] このページでは、Windows環境のSubversionで、差分の比較(diff)に、WinMergeを使用する方法をメモしています。 http://terai.xrea.jp/data/subversion/winmerge.png #ref(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQr22Z_HNOI/AAAAAAAAArY/KMybO9YLyow/s800/winmerge.png) **インストール [#j91a5a73] どちらも特に設定は必要ありません。[[WinMerge 日本語版>http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html]]などからダウンロードしてインストールするだけです。ここではそれぞれ以下のバージョンを利用しています。 * インストール [#j91a5a73] どちらも特に設定は必要ありません。[http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html WinMerge 日本語版]などからダウンロードしてインストールするだけです。ここではそれぞれ以下のバージョンを利用しています。 - svn 1.4.2 (r22196) - WinMerge-2.7.4.0-jp-2 **コマンドライン [#c18b151c] * コマンドライン [#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]]) - ''winmerge.bat'' ファイル -- [http://svnbook.red-bean.com/en/1.2/svn.advanced.externaldifftools.html#svn.advanced.externaldifftools.diff.ex-2 Using External Differencing Tools] -- 使用例: `svn diff Example.java -r PREV:HEAD --diff-cmd=winmerge.bat` #code{{ @echo off REM ここに自分の好きな diff プログラムを設定してください。 REM SET DIFF="C:\Program Files\WinMerge\WinMerge.exe" SET DIFF="C:\Program Files\WinMerge\WinMergeU.exe" @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 は 6 番目と 7 番目の引数としてパス名が必要です SET LEFT=%6 SET RIGHT=%7 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 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 echo %LEFT% echo %RIGHT% SET DIFF= SET LEFT= SET 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 差分がなけばエラーコード 0 を、差分があれば 1 を返します。 REM それ以外のエラーコードは致命的とみなします。 REM Return an errorcode of 0 if no differences were detected, 1 if some were. REM Any other errorcode will be treated as fatal. }} バッチファイルを作成したら、コマンドラインでテストします。 svn diff Example.java -r PREV:HEAD --diff-cmd=winmerge.bat - ''winmerge.sh'' ファイル -- `cygwin`版の`svn.exe`を使用するなら、`cygpath`でパスを変換しておく -- 使用例: `svn diff --diff-cmd=winmerge.sh` #code{{ #!/bin/sh LEFT=`cygpath -m "$6"` RIGHT=`cygpath -m "$7"` "$PROGRAMFILES/WinMerge/WinMergeU.exe" -e -s -ub -dl "$3" -dr "$5" "$LEFT" "$RIGHT" }} ** 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]] * 参考リンク [#z313e92f] - [http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html WinMerge 日本語版] - [http://winmerge.org/2.6/manual/CommandLine.html 16. Command Line] - [http://svnbook.red-bean.com/en/1.2/svn.advanced.externaldifftools.html#svn.advanced.externaldifftools.diff.ex-2 Using External Differencing Tools] - [http://flimflan.com/blog/UsingWinMergeWithSubversion.aspx Joshua Flanagan - Using WinMerge with Subversion] -- [http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/start.shtml Windowsコマンド集:(start)] -- [http://winmerge.org/2.6/manual/CommandLine.html 16. Command Line] *コメント [#s74a5720] - [[Joshua Flanagan - Using WinMerge with Subversion>http://flimflan.com/blog/UsingWinMergeWithSubversion.aspx]]を参考にしてバッチファイルを変更(比較を一つのWinMergeで開くように)しました。 -- [[terai]] &new{2008-07-01 (火) 17:46:39}; * コメント [#s74a5720] #comment - [http://flimflan.com/blog/UsingWinMergeWithSubversion.aspx Joshua Flanagan - Using WinMerge with Subversion]を参考にしてバッチファイルを変更(比較を一つのWinMergeで開くように)しました。 -- &user(aterai); &new{2008-07-01 (火) 17:46:39}; - winmerge.bat のコメントに日本語があると、このページでうまく表示できていなかったのを修正。 -- &user(aterai); &new{2008-12-15 (月) 20:36:03}; - Subversion 1.6.11にて、WinMergeをSTARTコマンドで実行すると比較用の一時ファイルが消えてしまい、WinMergeでの比較が出来ませんでした。バッチファイルの『START "WinMerge" /B 』の部分を削除することで正常に起動されるようになりました。 -- &user(anis774); &new{2010-05-04 (火) 06:00:00}; -- 報告ありがとうございます。この場合、WinMergeのオプション(編集、設定、バックアップファイル、作成するバックアップ:で、フォルダ比較のチェック)を外すと、STARTコマンドを使ってもうまくいくかもしれません。 -- &user(aterai); &new{2010-05-04 (火) 15:56:11}; - 上記の設定項目を変更してもSTARTコマンドを使った比較は出来ませんでした。比較用に生成された一時ファイルを観察してみたのですが、SVN側で起動したプロセスの終了を検知して比較用の一時ファイルを消しているようです。STARTコマンドを使用すると、STARTコマンドのプロセスがすぐに終了してしまう為、WinMerge起動時には既にファイルが削除された状態になります。 -- &user(anis774); &new{2010-05-23 (日) 03:06:12}; -- どうも何かanis774さんと自分の設定か環境が違うのかもしれないですね。なんとなくですが、「STARTコマンドのプロセスがすぐに終了してしまう」ということなら、参照元の[http://flimflan.com/blog/UsingWinMergeWithSubversion.aspx Joshua Flanagan - Using WinMerge with Subversion]みたいに、STARTコマンドに/WAITを付けるとよさげ?な感じがします。 -- &user(aterai); &new{2010-05-24 (月) 15:08:22}; - /WAITオプションを付加して試してみたのですが、これだとSTARTコマンド無しのときと同じ動作になります。一時ファイルが消える前にどこかにコピーして、コピーしたファイルでWinMergeを開き、終了後に削除する処理を書く必要がありそうです。 -- &user(anis774); &new{2010-05-26 (水) 08:37:49}; #comment