同事乱提交了一个版本之后,SVN上最新版本出现了问题。

原本按照网上其他人的说法,可以手动到服务器端干掉最新版的存档,并修改版本记录到前一个版本号即可,但是这应该是个坑。

掉进这个坑后,需要解决,又不能直接让大家提交新版本到新库,因为很多代码还没来得及同步。

好在SVN能通过不复杂的命令操作解决问题。

过程很简单, 导出正确的版本,重建新库。

【下列操作均在对应项目的Repo文件夹内进行】

进入db文件夹:

导出前需要手动检查 Current文件中的版本号,是否与 revs/0/下最大号码的文件一致。

此外,还需要检查 txn-current 文件内版本号与 revprops/0/文件夹下最大号一致

检查之后在CMD下进入svn安装路径,键入命令:

svnadmin dump [Old Repo PATH] > [New Repo PATH]

如果要导出特定版本:

svnadmin dump -r [Version.]  [Old Repo PATH] > [New Repo PATH]

【注意,版本号-1才是此处的版本参数。】

之后重建即可:

svnadmin create PATH  [New PATH]

svnadmin load PATH < [New Repo PATH]

【当然,组内习惯性的进行正确合理的版本管理工作流程才是王道】

【附上更多资料】

另附一篇更好的博客:http://blog.csdn.net/windone0109/article/details/2908133

初级篇:

导出:

$svnlook youngest myrepos //查看到目前为止最新的版本号

$svnadmin dump myrepos > dumpfile //将指定的版本库导出成文件dumpfile

导入:

$svnadmin load newrepos < dumpfile

中级篇:

$svnadmin dump myrepos –r 23 >rev-23.dumpfile           //将version23导出

$svnadmin dump myrepos –r 100:200 >rev-100-200.dumpfile  //将version100~200导出

对比较大的库可以分解成几个文件导出,便于备份

$svnadmin dump myrepos –r 0:1000 >0-1000.dumpfile

$svnadmin dump myrepos –r 1001:2000 --incremental >1001-2000.dumpfile

$svnadmin dump myrepos –r 2001:3000 --incremental >2001:3000.dumpfile

在导入时,可以将这几个备份文件装载到一个新的版本库中

$svnadmin load myrepos < 0-1000.dumpfile

$svnadmin load myrepos < 1001-2000.dumpfile

$svnadmin load myrepos < 2001:3000.dumpfile

高级篇:

过滤版本库历史:

假设有三个项目的版本库

/RigTMS

/DocProtect

/Odin

现需要将这三个项目转移到独立的三个版本库中,需要做如下操作

1、转储整个版本库

$svnadmin dump /path/to/repos > repos-dumpfile

2、将转储文件三次过滤,每次仅保留一个定级目录,即可以得到三个转储文件

$svndumpfilter include RigTMS < repos-dumpfile > RigTMS-dumpfile

$svndumpfilter include DocProtect < repos-dumpfile > DocProtect-dumpfile

$svndumpfilter include Odin < repos-dumpfile >Odin-dumpfile

3、虽然现在的RigTMS、DocProtect、Odin都可以用来创建一个可用的版本库,但他们保留了原版本库的精确路径结构(例如: RigTMS的顶级目录为/RigTMS/trunk、/RigTMS/branches、/RigTMS/tags,而非我们所需要的/trunk、/branches、/tags),如果要实现目标,需要编辑转储文件,调整Node-path和Copyfrom-path头参数,将路径/RigTMS删除,同时还要转储数据中创建RigTMS目录的部分。

Node-path:RigTMS

Node-action:add

Node-kind:dir

Content-length:0

*****特别注意点:如果使用手工编辑dumpfile文件来移除一个顶级目录,需要注意不要让使用的编辑器将换行符转换为本地格式(比如将/r/n转换为/n),否则文件的内容就与原来的格式不符,这个转储文件就失效了。具体做法就是当你在使用编辑器打开文件的时候,编辑器会提示用户是否需要转换格式,一定要选择“否”,切记!!切记!!

4、接下来就是创建三个新的版本库,然后将新过滤出来并修改好的三个转储文件导入

$svnadmin create RigTMS;svnadmin load RigTMS < RigTMS-dumpfile

$svnadmin create DocProtect;svnadmin load DocProtect < DocProtect-dumpfile

$svnadmin create Odin;svnadmin load Odin < Odin -dumpfile

****备份环境注意点:

1、确保没有其他进程访问版本库,关闭apache、svnserve服务

2、成为版本库的管理员,如果以其他身份还原版本库,可能会改变版本库文件的访问权限,导致在恢复后依旧无法访问

3、svnadmin recover /path/to/repos

4、重新启动服务进程

最新文章

  1. 纯C#实现屏幕指定区域截屏
  2. 设计模式学习之桥接模式(Bridge,结构型模式)(15)
  3. iOS:Tools:快速注释Doxygen
  4. android dialog 模拟新浪、腾讯title弹框效果
  5. Android度量单位说明(DIP,DP,PX,SP)
  6. CSS字体选择问题
  7. Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建
  8. SQL server 分离数据库与删除数据库的区别
  9. js操作符
  10. ASP.NET Web API的HttpController是如何被激活的?
  11. ios开发使用lipo命令合并真机库和模拟器库
  12. 创建iwatch 程序选项
  13. jQuery后续...
  14. JS中如何巧妙的用事件委托
  15. Fitnesse - Slim Tables
  16. R语言-广义线性模型
  17. python 网路爬虫(二) 爬取淘宝里的手机报价并以价格排序
  18. PuppeteerSharp+AngleSharp的爬虫实战之汽车之家数据抓取
  19. Java框架spring Boot学习笔记(三):Controller的使用
  20. atcoderI - Coins ( 概率DP)

热门文章

  1. nodejs版实现properties后缀文件解析
  2. 说说 HeapSort 堆排序思想,以及个人优化方案。(老物)
  3. empty()、isset()、is_null()的区别
  4. XMPP实现原理
  5. H5微信授权登录
  6. 2019 蓝桥杯国赛 B 组模拟赛 D. 程序设计:公约数
  7. 工作中常用到的linux命令总结
  8. vue中的:is
  9. Oracle12c RAC RMAN异机恢复
  10. PHP入门培训教程 PHP 数据类型