svnadmin dump警告含义解析及移除旧版本失败问题求助
理解SVN Dump警告并解决旧版本移除问题
警告含义解析
那个警告的核心意思是:你要dump的r7001到HEAD版本中,存在依赖于更早版本(r6882)的数据。
SVN的版本间不是完全独立的——比如某个文件可能是在r6882被创建,之后一直被修改到r7001;或者r7001里的某个目录是从r6882的目录复制/分支而来;甚至某个版本的属性(比如svn:mergeinfo)引用了r6882的历史。当你只dump从r7001开始的内容时,这些依赖的基础数据(r6882的相关记录)没有被包含在dump文件里,所以加载到空仓库时,系统找不到这些必要的历史上下文,必然会失败。
解决方法(分两种场景)
场景1:需要保留r7001及之后的完整历史(包括版本间的依赖关系)
如果你不想丢失r7001及后续版本的完整变更历史(比如某个版本的修改是基于更早版本的追溯),那必须包含被引用的r6882版本:
- 调整dump命令,从r6882开始dump到HEAD:
svnadmin dump -r6882:HEAD C:\svnrepo > C:\temp\repo.dmp - 直接将这个dump文件加载到新的空仓库:
svnadmin load C:\newsvnrepo < C:\temp\repo.dmp - (可选)如果想移除r6882到r7000之间的某些路径(而非整个版本),可以用
svndumpfilter工具过滤dump文件,比如只保留特定目录:svndumpfilter include /project/trunk < C:\temp\repo.dmp > C:\temp\filtered_dump.dmp
场景2:彻底移除r7000及之前的所有历史(只保留r7001及之后的快照+后续变更)
如果你不需要r7001之前的任何历史,哪怕是r7001本身的变更起源,那可以用“导出-导入+同步”的方式:
- 导出原仓库r7001的快照到本地目录:
svn export -r7001 file:///C:/svnrepo C:\temp\exported_code - 创建新的空仓库:
svnadmin create C:\newsvnrepo - 将导出的快照导入新仓库作为初始版本:
svn import C:\temp\exported_code file:///C:/newsvnrepo -m "Truncated repo: starting from original r7001" - 同步原仓库r7002到HEAD的所有变更到新仓库:
- 先初始化同步(让新仓库知道原仓库的地址):
svnsync init file:///C:/newsvnrepo file:///C:/svnrepo - 执行同步(只同步r7002及之后的版本):
svnsync sync file:///C:/newsvnrepo -r7002:HEAD
- 先初始化同步(让新仓库知道原仓库的地址):
内容的提问来源于stack exchange,提问作者Reto Höhener
相关产品推荐
相关产品推荐

