我试图在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:
答案 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\
中的所有文件并改为加载备份。