如何使用SVN对比指定版本的版本化文件与外部非版本化文件?
解决SVN指定版本文件与外部非版本化文件的对比问题
你遇到的svn: E155007报错,原因是当用--old指定带版本号的SVN文件(比如path/to/versioned/file1"@1234)时,SVN会将其视为仓库中的历史版本对象,这时候--new参数如果指向外部非版本化文件,SVN会要求它必须是SVN工作副本内的文件,因此触发了错误。
下面提供两种可行的解决方法:
方法1:用TortoiseSVN图形界面操作(简单直观)
- 右键点击工作副本里的目标文件,选TortoiseSVN → Show Log
- 在日志窗口找到版本1234,右键点击该版本的文件记录,选Save revision to...,把这个版本的文件导出到本地临时文件夹(比如
temp/file1_v1234) - 打开TortoiseSVN的Diff工具(右键菜单里的TortoiseSVN就能找到,或者直接启动TortoiseMerge)
- 在Diff工具里分别选中导出的临时文件和外部的非版本化文件
externalpath/to/external/folder/file1,就能看到对比结果了
方法2:命令行方式(适合批量操作)
第一步:先把指定版本的文件导出到本地临时文件
svn export -r 1234 "path/to/versioned/file1" "temp/file1_v1234"
第二步:对比两个本地文件
可以用SVN的diff命令:
svn diff --old "temp/file1_v1234" --new "externalpath/to/external/folder/file1"
也可以直接用系统自带的对比工具,比如Windows的fc命令:
fc "temp/file1_v1234" "externalpath/to/external/folder/file1"
简单来说,就是先把SVN历史版本导出成本地普通文件,再和外部文件对比,就能避开SVN对--new参数的限制。
内容的提问来源于stack exchange,提问作者Amazonian_panda
相关产品推荐
相关产品推荐

