无法区分SVN临时文件

时间:2014-08-21 09:39:32

标签: svn diff winmerge

我试图在svn中区分两个文件,并按照this post中的描述查看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: enter image description here

2 个答案:

答案 0 :(得分:0)

"Using WinMerge with other tools"。您应该运行的命令行看起来像

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

(见--diff-cmd option description in SVNBook)。

configure [helpers] section in client's runtime configuration区域默认启动WinMerge:

[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"=""

阅读SVNBook

答案 1 :(得分: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\中的所有文件并改为加载备份。