【1.业务需求】
好了,下面我们来看如何执行版本库的迁移工作。
①查看当前旧版本库最新的版本号是多少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>
很明显现在的提交全部都去到新的位置了!切换成功。