2

この投稿で説明されているように、svn で 2 つのファイルを比較し、winmerge の違いを並べて確認しようとしています。

ただし、それを実行しようとすると、Winmerge が開きますが、ファイル パスが無効であると不平を言います。svn diff は一時フォルダーにファイルを出力し、WinMerge が開く前にそれらを削除するようです。これに対する回避策はありますか?

コンソール出力:

C:\blah>svn diff -r 14055:14056 web.xml
Index: web.xml
===================================================================

C:\blah>start "WinMerge" /B "C:\Program Files (x86)\WinMerge\WinMergeU.exe" /e /s /ub /dl "web.xml      (revision 14055)" /dr "web.xml(revision 14056)" C:\Users\standeph\AppData\Local\Temp\svn-E6927443 C:\Users\standeph\AppData\Local\Temp\svn-E69F9C4A

Winmerge GUI: ここに画像の説明を入力

4

2 に答える 2

0

問題はSTART、バックグラウンド プロセスで WinMerge を実行し、WinMerge が完全に読み込まれる前に制御を SVN に戻すことです。SVN は、差分を表示する作業が完了したと見なし、差分用に作成したすべての一時ファイルを削除します。WinMerge の準備が整うまでに、表示されるはずのファイルはすでになくなっています。

考えられる回避策は 2 つあります。

バックグラウンドで WinMerge を起動しないでください:

"C:\Program Files (x86)\WinMerge\WinMergeU.exe" /e /s /u /wr /dl %3 /dr %5 %6 %7

ただし、WinMerge を閉じるまでシェルを使用することはできません。

一時ファイルのコピーをロードします。

そのためには、diff-cmdスクリプトにさらにロジックを追加する必要があります。次に例を示します。

@echo off
set lpath=%6
set rpath=%7

if /i not %lpath:C:\Temp\svn-=%==%lpath% (
    copy /y %lpath% %lpath%.bak 1> NUL
    set lpath=%lpath%.bak
)

if /i not %rpath:C:\Temp\svn-=%==%rpath% (
    copy /y %rpath% %rpath%.bak 1> NUL
    set rpath=%rpath%.bak
)

start "WinMerge" /B "C:\Program Files (x86)\WinMerge\WinMergeU.exe" /e /s /u /wr /dl %3 /dr %5 %lpath% %rpath%

これにより、存在するすべてのファイルがバックアップされC:\Temp\、代わりにバックアップが読み込まれます。

于 2016-11-16T15:17:21.320 に答える