【1.业务需求】
经过前面的SVN搭建,权限配置和强制写日志的工作之后,今天的任务是把原来其它分散的各个版本库统一迁移到新的版本库,集中统一管理。要求不改变原有的版本库的内容和版本号。
【2.基本思路】
要实现版本库的无缝迁移,必须通过以下3个步骤:
①导出旧的版本库
②导入新的版本库
③通知客户端切换版本库分支
首 先来看第一步:导出旧的版本库。我们知道SVN提供了check out命令和export命令签出,导出版本库中的内容。对于版本库内容比较少的情况这种方法可以采用。但是如果版本库中内容比较多,那么这种方法就显得 很笨重了,而且还涉及到版本号改变的问题。所以首先摈弃这种做法。
我们知道Oracle提供了export/import命令来将数据 库导出成一个二进制文件,然后导入。同样的SVN也提供了一对命令:dump和 load。不同的是这两个命令导出的是文本内容(肉眼可以读懂)。而且还有一次性导出和增量导出,单版本导出与多版本导出等多种选择操作,就是这个了。
其次我们来看“通知客户端切换版本库分支”。在我们完成服务器端的版本迁移之后,必须通知客户端运行切换分支的命令,否则客户端的提交还是提交到旧的版本库去。SVN也为我们准备了这样的命令:svn switch。
【3.相关命令】
首先我们来看一下SVN的dump和load命令
①svnadmin dump命令语法
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
svnadmin dump命令用于导出整个Repository或Repository下的某个范围的修订版本。REPOS_PATH是版本库的路径,[-r LOWER[:UPPER]]用于指定导出的修订版本范围,由参数-r和两个用:号隔开阿拉伯数字组成。例如:-r 0:50表示导出才版本0到版本50之间的所有修订版,-r是revision的缩写。
而另一个关键参数是--incremental。 它使用增量方式来导出版本,即每次都只导出自上一个版本以来的修改。这样的好处是第一:可以把一个大的文 件切分成若干个小的文件。第二:在版本库已经存在的情况下,我们只需要每次导出修改的部分,不需要每次都导出整个版本库的内容。甚至可以通过hook脚本 每天晚上自动将当天的修改dump出来做备份用。
②svnadmin load命令语法svnadmin load REPOS_PATH
svnadmin load命令用于从标准输入流/其它流中导入版本库,REPOS_PATH是要导入的目标版本库。
③dump和load的输出/入重定向svnadmin dump myrepos > dumpfile
svnadmin load newrepos < dumpfile
默认情况下dump和load命令分别输出到默认输出设备(屏幕)和从默认输入设备(键盘)导入。但我们也可以把输出流/输入流重定向。例如上面 的第一个 命令,使用重定向符>把屏幕的输出定向当前目录下的dumpfile,而第二个命令从当前目录下的dumpfile文件导入。
上面的命令使用起来已经很方便了,那么还有没有更加方便的用法呢?当然有!就是使用管道命令把两个命令合二为一。svnadmin dump myrepos | svnadmin load newrepos
④svn switch命令语法svn switch URL [PATH]
switch --relocate FROM TO [PATH]svn switch命令用于更新工作副本的URL。意即指向新的版本库位置。首先要注意的一点是我们即可以将整个工作副本指向新的URL,也可将工作副本下的某个目录指向新的URL。
另外一个重要的参数就是--relocate。这个参数是否使用对于结果如何有很大影响,使用不当甚至可能会造成版本库不可用。其中有两条重要的规则:
A.假如工作副本只是映射到同一个版本库内的不同位置,那么使用svn switch即可
B.假如工作副本已是映射到不同的版本库,那么必须使用svn switch --relocate
上面第二条规则通常发生在我们需要将整个版本库迁移到另外一台机,或者同一台机的不同版本库时。这个时候使用--relocate会刷新原有工作副本中每个文件的URL头部。
【4.示例操作】
好了,下面我们来看如何执行版本库的迁移工作。
①查看当前旧版本库最新的版本号是多少C:\peng\Other>svnlook youngest newRepo
161
②分批增量导出版本库内容C:\peng\Other>svnadmin dump newRepo -r 0:50 > dumpfile1
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
导出第一个文件,版本号从0到50的修订版本
C:\peng\Other>svnadmin dump newRepo -r 51:100 --incremental > dumpfile2
* Dumped revision 51.
* Dumped revision 52.
* Dumped revision 53.
* Dumped revision 54.
* Dumped revision 55.
导出第二个文件,版本号从51到100的修订版本
C:\peng\Other>svnadmin dump newRepo -r 101:161 --incremental > dumpfile3
* Dumped revision 101.
* Dumped revision 102.
* Dumped revision 103.
* Dumped revision 104.
* Dumped revision 105.
请注意我们上面三个命令中第2,3个命令多了一个--incremental的参数,这就是采用了增量的方式导出,下面我们一次按照顺序导入
③分批导入版本库文件
C:\peng\Other>svnadmin load newRepo2 < dumpfile1
<<< 开始新的事务,基于最初的修订版 1
* 正在添加路径:a done.
------- 提交后的修订版 1 >>>
<<< 开始新的事务,基于最初的修订版 2
* 正在删除路径:a done.
首先导入dumpfile1,然后是dumpfile2,dumpfile3
C:\peng\Other>svnadmin load newRepo2 < dumpfile2
<<< 开始新的事务,基于最初的修订版 50
* 正在添加路径:branches done.
------- 提交新修订版 12 (从原始修订版 50 装载) >>>
<<< 开始新的事务,基于最初的修订版 51
* 正在删除路径:branches done.
------- 提交新修订版 13 (从原始修订版 51 装载) >>>
导入文件dumpfile2。依次类推dumpfile3。
如果我们前面不使用--incremental方式导出,此处分批导入三个dump文件,则会提示错误:版本库文件已经存在。
④客户端切换工作副本URL
C:\peng\Other>svnserve -d -r c:\peng\other
首先我们把SVN服务的根目录指向c:\peng\other目录,在这个目录下有两个repository,其中一个名为newRepo,另外一个名为呢wRepo2。C:\peng\Other>dir
Volume in drive C is ESOE_W2K
Volume Serial Number is BC1B-22E6
Directory of C:\peng\Other
2008-12-26 15:10 <DIR> .
2008-12-26 15:10 <DIR> ..
2008-12-23 10:04 <DIR> Backup
2008-12-26 14:21 45,578 dumpfile1
2008-12-26 14:22 39,567 dumpfile2
2008-12-26 14:23 55,740 dumpfile3
2008-12-15 09:08 <DIR> newRepo
2008-12-26 14:20 <DIR> newRepo2
2008-12-26 15:25 <DIR> ps
2008-12-24 15:11 <DIR> Toolbar
3 File(s) 140,885 bytes
7 Dir(s) 2,668,414,976 bytes free
C:\peng\Other>
首先我们从newRepo这个版本库中check out出一个子目录psC:\Documents and Settings\qlinpen.E0015609D6309>svn checkout svn://localhost/newRepo/ps c:/peng/other/ps
A C:\peng\Other\ps\ps.txt
取出修订版 170。
现在该工作副本已经和:svn://localhost/newRepo/ps发生了映射关系。我们可以使用svnlook info来显示这个工作副本的一般信息C:\peng\Other>cd ps
C:\peng\Other\ps>svn info
路径:.
地址(URL):svn://localhost/newRepo/ps
Repository Root: svn://localhost/newRepo
档案库 UUID:6fbeb35b-c7e4-984d-b2ac-32812dcf3078
修订版:170
节点种类:目录
调度:正常
最后修改的作者:admin
最后修改的修订版:170
最后修改的时间: 2008-12-26 14:52:32 +0800 (星期五, 26 十二月 2008)
输出信息中明确地指出ps目录指向了svn://localhost/newRepo/ps。下面我们来把它指向另一个repository下的同名位置:svn://localhost/newRepo2/ps。C:\peng\Other\ps>svn switch --relocate svn://localhost/newRepo/ps svn://localhost/newRepo2/ps
C:\peng\Other\ps>
经过上面的切换后,再次使用svnlook info输出一般信息,发现URL已经被成功切换过来了C:\peng\Other\ps>svn info
路径:.
地址(URL):svn://localhost/newRepo2/ps
Repository Root: svn://localhost/newRepo2
档案库 UUID:6fbeb35b-c7e4-984d-b2ac-32812dcf3078
修订版:170
节点种类:目录
调度:正常
最后修改的作者:admin
最后修改的修订版:170
最后修改的时间: 2008-12-26 14:52:32 +0800 (星期五, 26 十二月 2008)
我们尝试着在ps目录下修改文件ps.txt为ps.doc,然后提交看看会提交到那个repos去?C:\peng\Other\ps>svn list svn://localhost/newRepo/ps
ps.txt
C:\peng\Other\ps>svn list svn://localhost/newRepo2/ps
ps.doc
C:\peng\Other\ps>
很明显现在的提交全部都去到新的位置了!切换成功。
分享到:
相关推荐
### SVN版本库迁移方法 #### 一、概述 在软件开发过程中,经常会出现需要将Subversion(SVN)版本库从一个服务器迁移到另一个服务器的情况。这种迁移可能是因为硬件升级、服务器搬迁或是为了提高性能等原因。为了...
以下是两种常见的SVN版本库迁移方法: ### 第一种方法:相同操作环境下的迁移 **前提条件**: 1. 旧版本库和新版本库的操作系统相同。 2. SVN的版本一致,以确保兼容性。 3. 旧版本库的版本号不低于本地SVN库,...
SVN 版本库无损迁移与自动备份 本文总结了 SVN 版本库无损迁移与自动备份的方法,旨在帮助读者快速实现版本库的...该文档提供了详细的 SVN 版本库迁移和自动备份的方法,旨在帮助读者快速实现版本库的迁移和自动备份。
要将旧版本库迁移到新安装的SVN,通常需要以下步骤: - 备份旧版本库。 - 在新SVN服务器上创建一个空版本库。 - 使用`svnadmin load`命令将旧版本库的数据加载到新版本库中。这通常涉及将旧版本库的备份文件...
【VSS库迁移到SVN库的操作方法】 Visual SourceSafe(VSS)是一款由Microsoft开发的版本控制系统,而Subversion(SVN)则是一个开源的版本控制系统,被广泛用于项目协作和源代码管理。在某些情况下,用户可能需要将...
本文档详细介绍了如何进行SVN仓储数据的整体迁移,确保在新服务器上保留所有版本号和版本信息。 一、SVN仓库概述 SVN仓库是SVN系统的核心,它存储了项目的所有历史版本,包括文件和目录的更改。每个版本都有唯一的...
在源服务器的Subversion安装目录下,使用`svnadmin dump`命令创建一个SVN仓库的完整备份。例如:`svnadmin dump D:\svn\test > D:\svn\test\test.dump`。这将生成一个包含所有版本历史的dump文件。 3. **准备目标...
使用svnadmin dump和svnadmin load命令可以轻松地将SVN仓库数据迁移到新的服务器上,而不会丢失任何版本号和版本信息。这种方法可以将仓库数据快速迁移到新的服务器上,从而减少停机时间和数据丢失的风险。
本教程将详细解释如何使用两种工具,即SVN-Importer和CVS2SVN,来进行这一迁移过程。 ### 1. SVN-Importer SVN-Importer是一款用于将CVS仓库转换为SVN仓库的工具。它的主要优点在于简单易用,适合小型项目或者对...
使用 SVN dump 工具可以进行全库备份和增量备份。全库备份可以使用以下命令: ``` svnadmin dump D:\Repositories\TestProject > D:\svndumpfile\TestProject_20090722.dump ``` 这将将整个 SVN 仓库导出到一个文件...
5. **脚本的使用与调试**:使用脚本时,需要了解其运行环境,如操作系统、svn版本以及所需的权限。在执行前,先进行小规模的测试,以调试和优化脚本。一旦确认无误,即可应用于大规模的迁移任务。 6. **注意事项**...
总之,vss2svn是一个强大的工具,可以帮助你将旧的VSS项目迁移到更现代、更开放的SVN版本控制系统。尽管过程中可能遇到一些挑战,但通过细心操作和解决问题,你可以顺利完成迁移并享受到SVN带来的诸多优势。
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。源代码泄露事件对于任何软件开发组织来说都是严重的安全问题,因为它可能导致敏感信息暴露,包括设计决策、算法实现、未公开的...
1. **使用`svnadmin dump`和`svnadmin load`命令**:这两个命令可以用来导出和导入版本库数据,从而实现版本库间的同步。 2. **自动化同步**:可以编写脚本来定期执行这些命令,或者利用专门的同步工具(例如rsync)...
在这个 SVN 脚本手册中,我们将讨论如何使用 SVN 脚本来实现自动备份和迁移版本库的功能。该手册分为两个部分:全备份和增量备份。 全备份 全备份是指将整个版本库备份到另一个位置,用于在出现问题时恢复版本库。...
在描述中提到的"Subversion版本库导出工具",即DumpSVN,它的主要功能是创建版本库的dump文件,这是一种文本格式,包含了版本库的所有信息,包括文件、目录、提交历史、属性等。这个工具对于在不同服务器之间移动...
本文将详细介绍两种常用的SVN库迁移方案(采用dump-load方案与svnsync方案),以及一种备份方案,旨在为企业提供更加规范的操作指南。 #### 二、Subversion库迁移方案 ##### 2.1 dump-load方案 **背景介绍:** ...
平台的VisualSVN-Server文档,包括了安装配置,用户文件管理,用户自主修改密码配置(PHP实现),linkd方式实现多个版本库分布多个硬盘,以及实现定时自动备份,VSS到svn迁移等等,非常详细。 文档结构: 一.安装SVN...