同事乱提交了一个版本之后,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、重新启动服务进程

【SVN】 一次SVN 修复笔记的更多相关文章

  1. 【山外笔记-SVN命令】svn命令详解

    本文打印版文件下载地址 [山外笔记-SVN命令]svn命令详解-打印版.pdf 一.命令简介 svn命令用于Subversion命令行客户端,执行svn相关的操作. 二.命令语法 1.svn语法: ( ...

  2. SVN是什么,svn的目录结构

    Svn是一个离线的代码管理,可以多个人一起修改,然后再将修改的内容提交到Svn中.每一个svn服务器中的数据存储单位叫做存储,但是你不仅仅可以把整个存储当作你维护的内容,也可以将其中的某个分支目录像根 ...

  3. svn+ssh方式svn服务器和客户端的配置[转载]

    本文摘自:http://hi.baidu.com/farmerluo/item/e7d9d72d098afc0a42634abb 我们最近一个项目用的那几台服务器都是客户给的,但是管理非常严格,只给我 ...

  4. 使用git svn clone迁移svn仓库

    使用git svn clone迁移svn仓库 clone命令可以指定很多参数,主要用到这些,你也可以使用git svn help查看完整的参数列表. git svn clone https://172 ...

  5. [SVN Mac的SVN使用]

    在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...

  6. SVN Access to ‘/svn/Test/!svn/me’ forbidden,不能更新解决办法

    今天上班,使用公司配置的电脑进行项目的更新.SVN报如下错误, SVN Access to '/svn/Test/!svn/me' forbidden,不能更新解决办法 很有意思: 开始以为自己的SV ...

  7. SVN学习之svn命令行下的基本操作

    http://huihai.iteye.com/blog/1985751 上一节已经把svn安装完成,下来就用命令行做一些简单的操作. 1.当svn安装完成后,svn管理人员会在svn的root根目录 ...

  8. SVN四部曲之SVN命令精通

    SVN 常用命令一览表 命令 功能 使用格式 checkout 检出 svn  co  URL up 更新到当前URL的末端 svn  up switch 更新到某一tag/branch svn  s ...

  9. SVN四部曲之SVN使用详解进阶

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  10. windows下svn+apache搭建svn服务器

    使用软件: apache_2.0.55-win32-x86-no_ssl.msi Setup-Subversion-1.5.3.msi TortoiseSVN-1.5.10.16879-win32-s ...

随机推荐

  1. css3实现颤动的动画

    需求 页面要做一个活动入口,不能太显眼,但是又要用户能一眼就看出来. 演示 https://jsfiddle.net/vtsxc18q/ 实现 (部分动画代码) @keyframes chanDong ...

  2. oracle数据库中的存储过程

    存储过程是一组为了完成特定功能的sql语句集,是一段sql代码片段,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果存储过程存在参就给出,不存在就不用给出参数)来执行它.因为它是一段 ...

  3. ES6初步学习

    from:http://www.jianshu.com/p/287e0bb867ae 刚开始用vue或者react,很多时候我们都会把ES6这个大兄弟加入我们的技术栈中.但是ES6那么多那么多特性,我 ...

  4. Apache 安装后启动出现的错误

    错误信息 1: configure: error: APR not found 解决方法:yum install apr* -y 错误信息 2:httpd: apr_sockaddr_info_get ...

  5. [每日一学]apache camel|XSLT|SAXON

    最近工作中,用到xslt文件来描述和配置xml文件的转换规则和业务逻辑,开始用jdk自带的TransformerFactory, 有严重的性能问题 后来用Saxon 的com.saxonica.con ...

  6. php内置函数分析之array_chunk()

    PHP_FUNCTION(array_chunk) { int argc = ZEND_NUM_ARGS(), num_in; zend_long size, current = ; zend_str ...

  7. docker安装MySQL5.7示例!!坑

    docker  pull  mysql 一.错误的启动 [root@localhost  ~]#  docker  run  ‐‐name  mysql01  ‐d  mysql 42f0981990 ...

  8. django之表单类

    一:表单类 一般我们在html中自己写的表单类似于下面的样子 <!DOCTYPE html> <html lang="en"> <head> & ...

  9. 使用git管理文件版本

    创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以 ...

  10. 【leetcode】1124. Longest Well-Performing Interval

    题目如下: We are given hours, a list of the number of hours worked per day for a given employee. A day i ...