SVN库迁移整理方法总结

有时候需要从一台机器迁移svn存储库到另外一台机器,如果数据量非常大的话,没有好的方法是很不方便的,其实迁移svn跟迁移mysql差不多,也有导出导入的方案

以下是subversion官方推荐的备份方式。
关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd、svnserve 或本地用户在直接访问)。
备份svn存储库
#压缩备份
svnadmin dump /data/svn/repository | gzip > /tmp/repository-backup.gz
#不压缩备份
svnadmin dump /data/svn/repository > /tmp/repository-backup.svn

恢复svn存储库
#建立新的svn存储库
svnadmin create /home/workhome/svn/newrepository
#确认成功与否
ls -l /home/workhome/svn/newrepository
#导入存储库数据
svnadmin load /home/workhome/svn/newrepository < /tmp/repository-backup.svn

SVN数据库迁移方法一

称之为SVN全库操作,或称SVN全局备份并恢复,版本库数据的移植:svnadmin dump、svnadmin load
导出:
$svnadmin dump repos > dumpfile //将指定的版本库导出成文件dumpfile
新建:
$svnadmin create newrepos
导入:
$svnadmin load newrepos < dumpfile

SVN数据库迁移方法二
增量备份或批次备份,批次恢复,特定reversion导出:
$svnadmin dump repos –r 23 >rev-23.dumpfile //将version23导出
$svnadmin dump repos –r 100:200 >rev-100-200.dumpfile //将version100~200导出
批次导出:对比较大的库可以批次导出,便于备份
$svnadmin dump repos –r 0:1000 >0-1000.dumpfile
$svnadmin dump repos –r 1001:2000 --incremental >1001-2000.dumpfile
$svnadmin dump repos –r 2001:3000 --incremental >2001:3000.dumpfile
批次导入,将这几个备份文件装载到一个新的版本库中
$svnadmin load newrepos < 0-1000.dumpfile
$svnadmin load newrepos < 1001-2000.dumpfile
$svnadmin load newrepos < 2001:3000.dumpfile

SVN数据库迁移方法三
导出后,在导入时对库做分库整理或其它整理操作过滤版本库历史:
假设有一个包含三个项目的版本库: calc,calendar,和 spreadsheet。它们在版本库中的布局如下:
/
 calc/
 trunk/
 branches/
 tags/
 calendar/
 trunk/
 branches/
 tags/
 spreadsheet/
 trunk/
 branches/
 tags/
现在要把这三个项目转移到三个独立的版本库中。首先,转储整个版本库:
$ svnadmin dump /path/to/repos > repos-dumpfile 
* Dumped revision 0.
 * Dumped revision 1. 
 * Dumped revision 2. 
* Dumped revision 3. 
  然后,将转储文件三次送入过滤器,每次仅保留一个顶级目录,就可以得到三个转储文件:
$ cat repos-dumpfile | svndumpfilter include calc > calc-dumpfile 
$ cat repos-dumpfile | svndumpfilter include calendar > cal-dumpfile 
$ cat repos-dumpfile | svndumpfilter include spreadsheet > ss-dumpfile 
现在你必须要作出一个决定了。这三个转储文件中,每个都可以用来创建一个可用的版本库,不过它们保留了原版本库的精确路径结构。也就是说,虽然项目calc现在独占了一个版本库,但版本库中还保留着名为calc的顶级目录。如果希望trunk、tags和branches这三个目录直接位于版本库的根路径下,你可能需要编辑转储文件,调整Node-path和Copyfrom-path头参数,将路径calc/删除。同时,你还要删除转储数据中创建calc目录的部分。一般来说,就是如下的一些内容:
 Node-path: calc 
 Node-action: add 
 Node-kind: dir 
 Content-length: 0
 警告: 
如果你打算通过手工编辑转储文件来移除一个顶级目录,注意不要让你的编辑器将换行符转换为本地格式(比如将\r\n转换为\n)。否则文件的内容就与所需的格式不相符,这个转储文件也就失效了。 
剩下的工作就是创建三个新的版本库,然后将三个转储文件分别导入:
$ svnadmin create calc; svnadmin load calc < calc-dumpfile 
$ svnadmin create calendar; svnadmin load calendar < cal-dumpfile 
$ svnadmin create spreadsheet; svnadmin load spreadsheet < ss-dumpfile
svndumpfilter的两个子命令都可以通过选项设定如何处理“空”修订版本。如果某个指定的修订版本仅包含路径的更改,过滤器就会将它删除,因为当前为空的修订版本通常是无用的甚至是让人讨厌的。为了让用户有选择的处理这些修订版本,svndumpfilter提供了以下命令行选项:
--drop-empty-revs
不生成任何空修订版本,忽略它们。
--renumber-revs
如果空修订版本被剔除(通过使用--drop-empty-revs选项),依次修改其它修订版本的编号,确保编号序列是连续的。
--preserve-revprops
如果空修订版本被保留,保持这些空修订版本的属性(日志信息,作者,日期,自定义属性,等等)。如果不设定这个选项,空修订版本将仅保留初始时间戳,以及一个自动生成的日志信息,表明此修订版本由svndumpfilter处理过。
尽管svndumpfilter十分有用,能节省大量的时间,但它却是把不折不扣的双刃剑。首先,这个工具对路径语义极为敏感。仔细检查转储文件中的路径是不是以斜线开头。也许Node-path和Copyfrom-path这两个头参数对你有些帮助。
Node-path: spreadsheet/Makefile 
如果这些路径以斜线开头,那么你传递给svndumpfilter include和svndumpfilter exclude的路径也必须以斜线开头(反之亦然)。如果因为某些原因转储文件中的路径没有统一使用或不使用斜线开头,也许需要修正这些路径,统一使用斜线开头或不使用斜线开头。
此外,复制操作生成的路径也会带来麻烦。Subversion支持在版本库中进行复制操作,也就是复制一个存在的路径,生成一个新的路径。问题是,svndumpfilter保留的某个文件或目录可能是由某个svndumpfilter排除的文件或目录复制而来的。也就是说,为了确保转储数据的完整性,svndumpfilter需要切断这些复制自被排除路径的文件与源文件的关系,还要将这些文件的内容以新建的方式添加到转储数据中。但是由于Subversion版本库转储文件格式中仅包含了修订版本的更改信息,因此源文件的内容基本上无法获得。如果你不能确定版本库中是否存在类似的情况,最好重新考虑一下到底保留/排除哪些路径。
备份环境注意点:
 1、确保没有其他进程访问版本库,关闭apache、svnserve服务
 2、成为版本库的管理员,如果以其他身份还原版本库,可能会改变版本库文件的访问权限,导致在恢复后依旧无法访问
 3、svnadmin recover /path/to/repos
 4、重新启动服务进程
SVN数据库整理方法
不经过dump,load操作,实现SVN数据库整理操作,先设计好调整后的目录, 然后打开版本库, 选中要调整或转移的文件(文件夹)-->右键拖住,不要松手-->然后将要转移的文件(文件夹)拖至目标文件夹-->松手-->选择move items to here-->完成

每经过这样的调整,大家都会担心历史记录是否还会存在, TortoiseSVN在默认情况下, 是不会显示出来的,需要将一个选项去除.

如此可实现基于库的调整操作,但事事不是尽如人意的,这样的一次操作下来,revision会增长好多。
我的想法是:
停止当前SVN服务,将当前的SVN库直接进行整理,就像整理存储在电脑中的文件夹一样,然后开启SVN服务,即时显示调整后的效果,哈哈..是不是有点异想天开,其实我也觉得这是不太可能的,除非使用工具访问,否则SVN库不是显示可见的,希望以后啥配置管理工具可以让管理员有这样的权限.

实验:
一、在迁出服务器执行:
[email protected]:~/csvn/bin> csvn stop
Stopping CSVN Console...
Waiting for CSVN Console to exit...
Waiting for CSVN Console to exit...
Stopped CSVN Console.
[email protected]:~/csvn/bin> csvn-httpd stop
Stopping Subversion Edge Apache Server:                                                                                   done
[email protected]:~/csvn/data/repositories> svnadmin dump /home/svn/csvn/data/repositories/camp | gzip >camp_dumpfile_20130610.gz
......
* Dumped revision 4495.
* Dumped revision 4496.
[email protected]:~/csvn/data/repositories> ls
camp  camp_dumpfile_20130610.gz  cpst  csvn  csvn-httpd  docm

二、在迁入服务器执行:
取迁出服务器上导出的文件camp_dumpfile_20130610.gz;
[email protected]:~/data/repositories> svnadmin create /home/csvn/data/repositories/newcamp
[email protected]:~/data/repositories> gzip -d camp_dumpfile_20130610.gz
[email protected]:~/data/repositories> svnadmin load /home/csvn/data/repositories/newcamp < camp_dumpfile_20130610 
......
<<< Started new transaction, based on original revision 4495
     * editing path : trunk/site/campost/src/dsp/frmDomItemMod.mcpp ... done.
     * editing path : trunk/site/campost/src/dsp/frmIntItemMod.mcpp ... done.
------- Committed revision 4495 >>>
<<< Started new transaction, based on original revision 4496
     * editing path : trunk/site/campost/src/dsp/frmDspInterCloseDisp.mcpp ... done.
------- Committed revision 4496 >>>
[email protected]:~/bin> csvn start
Starting CSVN Console......
CSVN Console started
Waiting for application to initialize (this may take a minute)...............................................
CSVN Console is ready at http://localhost:3343/csvn
[email protected]:~/bin> csvn-httpd start
Starting Subversion Edge Apache Server:

本文转载自http://blog.chinaunix.net/uid-354915-id-3766906.html

时间: 2024-10-11 06:40:50

SVN库迁移整理方法总结的相关文章

SVN库迁移整理方法----官方推荐方式

以下是subversion官方推荐的备份方式. 关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd.svnserve 或本地用户在直接访问). 备份svn存储库 #压缩备份 svnadmin dump /home/workhome/svn/repository | gzip > ~/repository-backup.gz #不压缩备份 svnadmin dump /home/workhome/svn/repository > ~/repository-backup.svn 恢复s

SVN库迁移

上次库迁移,投机取巧,在源库上下载资源,然后上传到目标库,最后客户端更新url地址.这样迁移的库被组长一眼识破,因为新库中没有大家的操作日志. 这次吸取上次的教训,用dump和load完成SVN库迁移.整个过程分为5个步骤: 步骤1:创建源库的备份,在DOS下输入svnadmin dump D:\Repositories\屈文哲  > E:\屈文哲.rep "D:\Repositories\屈文哲"为源库的路径,"E:\屈文哲.rep"为备份库的输出路径 出现

SVN库迁移到GitHub

创建新目录,cmd进入到新目录,执行如下命令: git svn init svn://10.10.10.10/net/QA_Dept git svn fetch git remote add origin https://git.net.com/AutomationTeam/QA_Dept.git git config branch.master.remote origin git config branch.master.merge refs/heads/master 然后使用GitExten

windows下SVN版本库迁移小结

SVN需求:搬迁至异地上云环境,迁移过程将影响用户的时间减少至最小. SVN常见的几种迁移方案: 第一种:整个SVN库目录打包迁移,原库大小17G,打包加迁移时间预估时间约5小时以上,中断不符合要求. 第二种:svnadmin 自带的dump导出load导入方式迁移 :所有版本导出大小超过了磁盘剩余空间(不小于40G),中断不符合要求. 第三种:通过svnsync钩子脚本同步方式进行第一次全量同步,迁移时增量同步(预计最快时间十分钟左右). 利用svnsync同步过程: 1. 原SVN服务器与目

svn迁移的方法

1.进入原始SVN库所在路径. 2.使用svnadmin命令将你需要迁移的项目库dump出来.这里需要等待一段时间. 例如:将原来的Repository导出为一个文件dumpfile> svnadmin dump path/to/old-repo > dumpfile 3.在新服务器上安装svn服务端和客户端程序. 4.确定SVN版本库存放路径,并使用svnadmin命令创建版本库. 5.将刚才备份出来的数据,导入到新的库中.此处仍需要等待一段时间. 例如:将dumpfile导入到新的Repo

【转】SVN库的迁移

转载地址:http://blog.csdn.net/windone0109/article/details/2841294 SVN服务器由于硬盘空间不足,需要将其迁移到另外一台机器上,并且更换Repository目录. SVN迁移需要做如下步骤: 1. 将原来的Repository导出为一个文件dumpfile .> svnadmin dump 原先的repos的目录路径(/repository/directory) > dumpfile 2. 在另外一台机器上配置同样的SVN服务器. 3.

visual svn server 迁移到新服务器

VisualSVN Server仓库迁移到winows(包含所有版本, 权限,用户信息) svn :visual SVN 3.5 操作系统:window 7 64 bit 安装下一步即可(很简单) 首先,VisualSVN Server Manager,包含两个路径,一个是安装路径,例如本机:C:\Program Files\VisualSVN Server,一个是库路径,例如本机:E:\Repositories,其中,Repositories中包括各项目文件及项目信息文件,重要的项目信息文件有

部门经理的风范---记一版本库迁移事件

工作中少不了团队间的合作,而有了合作,也必将有摩擦.如何应对摩擦和项目行进中的人为阻碍因素,能体现出一位团队领导者的能力. 我们部门经理(简称B)在11月21日的进取性做法让我一个小组员获益良多. 事件: 有个VSS迁移到SVN的项目----迁移某软件中心下属4个软件开发部门的4个VSS库到到SVN环境.  我们部门分出3个组员和小组长(简称Z)合共4人连续7个工作日,做好了环境搭建.数据迁移.数据校对的工作.于20日晚上,加班完成了4个库的整体迁移. 然而21日上午,整个部门的工作QQ和邮箱被

visualSVN server库迁移(转)

转自:http://blog.csdn.net/yuhuijun_1/article/details/9762683 首先,VisualSVN Server Manager,包含两个路径,一个是安装路径,例如本机:C:\Program Files\VisualSVN Server,一个是库路径,例如本机:C:\Repositories,其中,Repositories中包括各项目文件及项目信息文件,重要的项目信息文件有authz和htpasswd,authz是目录访问权限控制文件,htpasswd