ブログに続いて、バッチファイルwm.batを作成しました。
"d:\svnroot\external\winmerge\WinMerge.exe" /B /WAIT "d:\svnroot\external\winmerge\WinMergeU.exe" /e /ub /dl %3 /dr %5 %6 %7
そして私は電話してみました
svn diff | wm
しかし、それはうまくいきませんでした。では、 WinMerge または同様のユーティリティをsvn diff
と統合するにはどうすればよいですか?
以下のDavidの回答を拡張して、Windowsのデフォルトを変更するには、(Windows XPの場合)にある構成ファイルを編集する必要があります。
C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config
または(Windows Vista)
C:\Users\%USERNAME%\AppData\Roaming\Subversion\config
わかりました、 元のブログ投稿 を見て、これはあなたが望むものです:
svn diff --diff-cmd wm [optional-filename]
ここで実際に何が起こっているか(つまり、svn diff
が指定されたdiff-cmd
に渡すパラメータの種類)を確認したい場合は、svn diff --diff-cmd echo
を使用して、その内容を確認できます。
[~/src/gosmore-dev]$ svn diff --diff-cmd echo
Index: gosmore.cpp
===================================================================
-u -L gosmore.cpp (revision 13753) -L gosmore.cpp (working copy) .svn/text-base/gosmore.cpp.svn-base gosmore.cpp
上記で一部引用符が削除されましたが、基本的にはsvn diff
が合格することがわかります
-u -L "<left-label>" -L "<right-label>" <left-file> <right-file>
バッチファイルに。お持ちのバッチファイルは、これらのコマンドをWinMergeが理解できる形式に変換するために使用されます。
これがどのように機能するかについての詳細と例は、 svn book に記載されています。
バッチファイルをsvn diff
のデフォルトにするには、ローカルのSubversion構成ファイルの[helpers]
セクションに次の行を追加する必要があります(Linuxでは~/.Subversion/config
、どこにあるかわかりません設定ファイルはWindowsにあります)(これを参照 以前のSO質問 )
diff-cmd=wm.bat
このリンクをチェックしてください:
http://blog.tplus1.com/index.php/2007/08/29/how-to-use-vimdiff-as-the-Subversion-diff-tool/
これがSOerの便宜のためのコピーです:
このdiffwrap.shスクリプトを入手して、どこにでも保存してください。 $ HOME/binディレクトリに保存しました。必ず実行可能にしてください!以下に示します。
#!/bin/sh # Configure your favorite diff program here. DIFF="/usr/bin/vimdiff" # Subversion provides the paths we need as the sixth and seventh # parameters. LEFT="$6" RIGHT="$7" # Call the diff command (change the following line to make sense for # your merge program). "$DIFF" "$LEFT" "$RIGHT" # Return an errorcode of 0 if no differences were detected, 1 if some were. # Any other errorcode will be treated as fatal.
次に、
$HOME/.Subversion/config
ファイルをそのスクリプトを指すように変更します。[helpers] diff-cmd = /home/matt/bin/diffwrap.sh
次に、ファイルを差分します。
お気に入りのマージプログラムへの呼び出しを含むバッチファイルを作成した後、行を変更することで、Windowsで常にバッチファイルを使用するようにSubversionを構成できます(使用するたびに--diff-cmd引数は必要ありません)。
# diff-cmd = diff_program (diff, gdiff, etc.)
ファイルC:\ Documents and Settings\username\Application Data\Subversion\configにあります。この行は、バッチファイルを指すように変更する必要があります。例えば:
diff-cmd = c:\bin\wm.bat
Mac用::
このファイルを開く:〜/ .Subversion/config
:diff-cmdを含む行を検索してコメントを解除します(開始から#を削除することにより)
diff-cmdの前に、diffツールの名前を付けます。私の場合はaraxis merge diffツールを使用していたので、次のようになります。
diff-cmd =/Applications/Araxis Merge.app/Contents/Utilities/araxissvndiff
この後、ターミナルでsvn diffを実行するときはいつでも、そのツールのファイルの違いが表示されます
diff-cmdWordの前後にスペースがないことを確認してください。
Meld 私にとって本当に素晴らしい作品です。インストール後、Subversion
構成ファイルに移動し、diff-cmd
行のコメントを解除して、meld.exeがある場合のパスに設定しました。私の場合:
[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 = D:\SOFT\Meld\meld\meld.exe
WinMergeで Cygwin およびSVN 1.7を使用する場合は、このバッチファイルを外部差分ツールとして使用します。 Cygwinパスを操作するには、 http://manual.winmerge.org/CommandLine.html を適応させる必要がありました。
.Subversion\config
:
[helpers]
diff-cmd = C:\path\to\winmergesvndiff.bat
の内容 winmergesvndiff.bat
@echo off
set left=%6
set right=%7
REM Repeat these two lines for all drives
set left=%left:/cygdrive/c/=c:/%
set right=%right:/cygdrive/c/=c:/%
REM Path to WinMerge may vary
start "WinMerge" /B "C:\program files (x86)\winmerge\WinMergeU.exe" /e /s /ub /dl %3 /dr %5 %left% %right%
パスをWindowsスタイルに変換する必要があります。
#!/bin/sh
LEFT="$6"
RIGHT="$7"
RRIGHT=`cygpath.exe -pw $RIGHT`
LLEFT=`cygpath.exe -pw $LEFT`
/cygdrive/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe /e /s /ub /dl %3 /dr %5 $LLEFT $RRIGHT
上記の答えに似たものが私にはうまくいきましたが、私の特定のセットアップには少しカスタマイズが必要でした。 (1)Cygwinの "/ tmp"ディレクトリを説明し、(2) "/ tmp"ファイルが存在することを確認するために、変更が必要でした(したがって、 "start"はMeldの起動から削除されます)。
以下の.batファイルは私のために働いた:
-
@echo off
set left=%6
set right=%7
REM Repeat these two lines for all drives
set left=%left:/cygdrive/d/=d:/%
set right=%right:/cygdrive/d/=d:/%
set left=%left:/tmp=c:/cygwin64/tmp%
set right=%right:/tmp=c:/cygwin64/tmp%
"C:\program files (x86)\meld\Meld.exe" %left% %right%
特にリビジョンが作業ディレクトリのリビジョンと一致しなかった場合、単純な.batファイルで3つの問題が発生しました。
そのため、これらの問題を回避するために、小さなPowerShellを.batファイルにラップすることになりました。
;@echo off
;set leftdesc=%~3
;set rightdesc=%~5
;set leftfile=%~6
;set rightfile=%~7
;Findstr -rbv ; %0 | powershell -c -
;goto:sCode
&{
$leftExt, $rightExt = ($env:leftdesc, $env:rightdesc) -replace '.*([.]\w+).*','$1'
if ($env:leftfile.EndsWith($leftExt)){
$leftFile = $env:leftfile
}else{
$leftFile = Join-Path $env:temp ((Split-Path $env:leftfile -Leaf) + $leftExt)
Copy-Item $env:leftfile $leftFile -Force
}
if ($env:rightfile.EndsWith($rightExt)){
$rightFile = $env:rightfile
}else{
$rightFile = Join-Path $env:temp ((Split-Path $env:rightfile -Leaf) + $rightExt)
Copy-Item $env:rightfile $rightFile -Force
}
$descriptions = '/dl "' + $env:leftdesc + '" /dr "' + $env:rightdesc + '"'
$fileNames = '"' + $leftFile + '" "' + $rightFile + '"'
start 'C:\Program Files (x86)\WinMerge\WinMergeU.exe' ('/e /u ' +$descriptions + ' ' + $fileNames)
}
;:sCode
;goto :eof
ラッパーの Walid Toumi に感謝します。
Cygwin 、Subversion(Cygwinのバージョン)、および WinDiff を使用するには、後者のスラッシュの不寛容に対処するための注意が必要です。次の Bash スクリプトを使用して、svnのdiff-cmd設定を介してインストールし、「svndiff」で目的の結果を取得します。
arg1=$(echo $6 | sed 's/\//\\/g' | sed 's/\\cygdrive\\c/c:/')
arg2=$(echo $7 | sed 's/\//\\/g' | sed 's/\\cygdrive\\c/c:/')
cmd /c windiff.exe $arg1 $arg2