2

我正在尝试区分 svn 中的两个文件,并查看 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 界面: 在此处输入图像描述

4

2 回答 2

0

See "Using WinMerge with other tools". The command-line you should run looks like

svn diff --diff-cmd "C:\Program Files\WinMerge\WinMergeU.exe" -x "-dl -dr" myfile

(See --diff-cmd option description in SVNBook).

or configure [helpers] section in client's runtime configuration area to launch WinMerge by default:

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\helpers]
"#diff-cmd"=""
"#diff-extensions"="-u"
"#diff3-cmd"=""
"#diff3-has-program-arg"=""
"#editor-cmd"="notepad"
"#merge-tool-cmd"=""

Read SVNBook!

于 2014-08-21T10:01:36.797 回答
0

问题是START在后台进程中运行 WinMerge 并在 WinMerge 完全加载之前将控制权返回给 SVN。SVN 认为显示差异的工作已经完成,并删除了它为差异创建的所有临时文件。当 WinMerge 准备好时,它应该显示的文件已经消失了。

有两种可能的解决方法。

不要在后台启动 WinMerge:

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

但是现在你不能再使用你的 shell 直到你关闭 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 回答