【SVN】 一次SVN 修复笔记
同事乱提交了一个版本之后,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 修复笔记的更多相关文章
- 【山外笔记-SVN命令】svn命令详解
本文打印版文件下载地址 [山外笔记-SVN命令]svn命令详解-打印版.pdf 一.命令简介 svn命令用于Subversion命令行客户端,执行svn相关的操作. 二.命令语法 1.svn语法: ( ...
- SVN是什么,svn的目录结构
Svn是一个离线的代码管理,可以多个人一起修改,然后再将修改的内容提交到Svn中.每一个svn服务器中的数据存储单位叫做存储,但是你不仅仅可以把整个存储当作你维护的内容,也可以将其中的某个分支目录像根 ...
- svn+ssh方式svn服务器和客户端的配置[转载]
本文摘自:http://hi.baidu.com/farmerluo/item/e7d9d72d098afc0a42634abb 我们最近一个项目用的那几台服务器都是客户给的,但是管理非常严格,只给我 ...
- 使用git svn clone迁移svn仓库
使用git svn clone迁移svn仓库 clone命令可以指定很多参数,主要用到这些,你也可以使用git svn help查看完整的参数列表. git svn clone https://172 ...
- [SVN Mac的SVN使用]
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- SVN Access to ‘/svn/Test/!svn/me’ forbidden,不能更新解决办法
今天上班,使用公司配置的电脑进行项目的更新.SVN报如下错误, SVN Access to '/svn/Test/!svn/me' forbidden,不能更新解决办法 很有意思: 开始以为自己的SV ...
- SVN学习之svn命令行下的基本操作
http://huihai.iteye.com/blog/1985751 上一节已经把svn安装完成,下来就用命令行做一些简单的操作. 1.当svn安装完成后,svn管理人员会在svn的root根目录 ...
- SVN四部曲之SVN命令精通
SVN 常用命令一览表 命令 功能 使用格式 checkout 检出 svn co URL up 更新到当前URL的末端 svn up switch 更新到某一tag/branch svn s ...
- SVN四部曲之SVN使用详解进阶
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...
- 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 ...
随机推荐
- 搜索 问题 D: 神奇密码锁
这道题个人认为隐含着状态转换,所以想到的还是BFS,将其中一位数加一或减一或交换临近两位,进入下一状态,使用一个大小为10000的bool数组判重,由于BFS的特性,得到的一定是最小步数: 普通BFS ...
- python中session的使用
- SCUT - 216 - 宝华科技树
https://scut.online/p/216 演员 把这个当成dp算了半天,各种姿势,好吧,就当练习一下树dp. 假如是每个节点的层数之和,按照dp[i][j]为从i点出发获得j科技的最小费用d ...
- css发展过程
https://www.cnblogs.com/dashnowords/p/9460722.html
- Spring基础12——使用外部属性文件
1.使用外部属性文件 在配置文件里配置Bean时,有时需要在Bean的配置文件里引入系统部署的细节信息(例如:文件的路径.数据源配置信息等),而这些部署细节实际上需要和bean配置相分离,因为我们修改 ...
- Zabbix--03 邮件报警、微信报警
目录 一. 邮件报警 1.定义发件人 2.定义收件人 3.优化告警信息 二. 微信报警 1.查看配置文件里的脚本目录路径 2.将weixin.py放在zabbix特定目录 3.配置发信人 4.配置收信 ...
- 北京师范大学第十五届ACM决赛-重现赛E Euclidean Geometry (几何)
链接:https://ac.nowcoder.com/acm/contest/3/E 来源:牛客网 Euclidean Geometry 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...
- AtCoder Beginner Contest 089 D - Practical Skill Test
Problem Statement We have a grid with H rows and W columns. The square at the i-th row and the j-th ...
- qthread线程
一般调用quit()函数之后可以紧接着调用wait()函数确保线程退出.sleep()等让线程休眠的函数不需要调用,因为Qt中线程是事件驱动机制.但是如果是继承的QTHread类,在run()函数中使 ...
- 【学习】019 SpringBoot
一.SpringBoot介绍 1.1.SpringBoot简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配 ...