一、如何彻底删除svn中的文件或目录
假设svn项目的目录为 G:\SVN\myproj, 里面有 test/readme.txt 文件和 work/sound/目录,其中test和work是在G:\SVN\myproj下的顶层目录,
即路径分别为G:\SVN\myproj\test和G:\SVN\myproj\work\sound
1)首先将svn库整个导出
svnadmin dump G:\SVN\myproj > myproj.dump
2)将myproj.dump文件里面不需要的文件进行排除并生成一个新的dump文件
type myproj.dump | svndumpfilter exclude test/readme.txt work/sound --drop-empty-revs --renumber-revs --quiet > drop.dump
这样readme.txt 文件和sound目录就被排除了。
--drop-empty-revs: 删除因过滤而产生的空版本
--renumber-revs :过滤后重编余下的版本
--quiet : 不显示过滤的统计数据
其中 --quiet参数或者其他两个参数有可能不支持,如果生成drop.dump的命令出错,建议按个去掉这几个参数再进行尝试
exclude命令是排除指定文件或目录,与之相反,include命令是只保存指定文件或目录,例如:
type myproj.dump | svndumpfilter include test/readme.txt work/sound --drop-empty-revs --renumber-revs > D:\drop.dump
这样就只保留了readme.txt文件和work/sound目录,其他都删除了
3) 创建新的svn项目并将上面的dump文件导入到新项目中
svnadmin create G:\SVN\newProj
svnadmin load G:\SVN\newProj < D:\drop.dump
这样一来,彻底删除svn版本库中部分文件或目录的工作就完成了。
二、合并版本库
假设有G:\SVN\repos1和G:\SVN\repos2两个版本库,且repos1版本库比较小,因此要把repos1导入到repos2中
1) 查看repos1的最新版本号
svnlook youngest G:\SVN\repos1
得到最大版本号为81
2) 增量导出
svnadmin dump G:\SVN\repos1 -r 0:81 --incremental > D:\repos1.dump
3) 导入
假设repos2下面有work/test目录(全路径是G:\SVN\repos2\work/test):
svnadmin load G:\SVN\repos2 --parent-dir work/test < D:\repos1.dump
--parent-dir:指定导入repos2版本库的哪个目录下
这样就完成了repos1版本库和repos2版本的的合并,最终所有的数据都存在repos2上。