web-dev-qa-db-ja.com

デフォルトのSVN差分ツールを変更する

ブログに続いて、バッチファイル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
16
aleemb

わかりました、 元のブログ投稿 を見て、これはあなたが望むものです:

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
31
David Dean

このリンクをチェックしてください:

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

次に、ファイルを差分します。

9
pierrotlefou

お気に入りのマージプログラムへの呼び出しを含むバッチファイルを作成した後、行を変更することで、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
4
Michael Venable

Mac用::

このファイルを開く:〜/ .Subversion/config

:diff-cmdを含む行を検索してコメントを解除します(開始から#を削除することにより)

diff-cmdの前に、diffツールの名前を付けます。私の場合はaraxis merge diffツールを使用していたので、次のようになります。

diff-cmd =/Applications/Araxis Merge.app/Contents/Utilities/araxissvndiff

この後、ターミナルでsvn diffを実行するときはいつでも、そのツールのファイルの違いが表示されます

diff-cmdWordの前後にスペースがないことを確認してください。

4
muzz

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
3
amphibient

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%
3
JeremyWeir

パスを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
2
Alfonso

上記の答えに似たものが私にはうまくいきましたが、私の特定のセットアップには少しカスタマイズが必要でした。 (1)Cygwinの "/ tmp"ディレクトリを説明し、(2) "/ tmp"ファイルが存在することを確認するために、変更が必要でした(したがって、 "start"はMeldの起動から削除されます)。

以下の.batファイルは私のために働いた:

  • Cygwin(x64)
  • SVN(コマンドライン)
  • メルド
  • ウィンドウズ10

-

@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%
0
amasmiller

特にリビジョンが作業ディレクトリのリビジョンと一致しなかった場合、単純な.batファイルで3つの問題が発生しました。

  • svnは、一時ディレクトリと比較するファイルを書き込む場合があります。その後、WinMergeがファイルを確認する前にファイルを削除します。
  • svnは、ファイル名が16進数の長い文字列である.svn\pristineサブディレクトリからファイルを取得する場合があります。
  • WinMergeは、ファイル拡張子に基づいて構文を強調表示します。svnが一時ファイルを使用する場合、拡張子はありません。

そのため、これらの問題を回避するために、小さな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 に感謝します。

0
unbob

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
0
JP Lodine