svn 迁移、升级

来源:互联网 发布:淘宝猪哼少 编辑:程序博客网 时间:2024/05/17 06:07
公司的svn服务器是我在2006年搭建的,版本太旧,是1.3的,不支持分支的合并,所以决定升级到最新的1.7.并将apche2.0升级到2.2


过程比较折腾.因为svn服务器一直在用,只能在周日暂停一天,所以事先在另一台机器上验证了整个过程。最麻烦的是有些版本损坏,解决办法下面会提到。


升级方法共有3种:
1、svnadmin dump/load序列
2、svnsync
3、svnadmin upgrade


网上有人说 第3种有问题。所以还是用第1种,虽然麻烦一点


0. 备份原来的版本仓库(注意:用旧版本的svn程序备份)
  svnadmin dump E:\VersionCtl\Odin > e:\odin.lu.dump
  
  备份过程中,报各种错误:can't read length line in file  ; 畸形的描述文件头  ;...
  这是某个版本损坏了,要解决这个问题,参考 http://readlist.com/lists/subversion.tigris.org/users/0/3546.html
  错误产生的原因,估计多半是二进制文件的问题
  
  6个步骤:
  前两个步骤,在旧版本服务器上操作:
  (版本7386已经损坏)
  
  1. Dump everything up to the damaged revision-1 (dump 1)
  svnadmin dump E:\VersionCtl\OwSpoken -r 0:7385 > e:\OwSpoken.0-7385.dump
  
  2. Dump everything from damaged revision+1 to HEAD (with --incremental)   (dump 2)
  svnadmin dump E:\VersionCtl\OwSpoken -r 7387:17205 --incremental > e:\OwSpoken.7387-17205.dump
  如果是错误“没有这个修订版”,则需跳过两个版本号 revision+2 ;
  
  同时,将损坏的版本export出来,以备在第5步时提交
  
  以下步骤,是在新版本服务器上操作
  3. Load "dump 1" into a new repository
  
     还原过程中,出现一个错误:
   <<< 开始新的事务,基于原始版本 8324
   svnadmin: E125005: 在转储流中发现非法的属性值;考虑修复,或者在加载时使用选项 '--bypass-prop-validation' 。
   svnadmin: E125005: 不能接受属性 “svn:log” 的非 LF 行结束符   
   
   按照提示,加上这个参数:
   svnadmin load --bypass-prop-validation E:\VersionCtl\OwSpoken < E:\svn_dump\OwSpoken.7387-11665.dump
   
  
  4. Do a check-out
  
  5. Re-Commit the changes for the damaged revision
  提交损坏版本的修改时,可能某些文件(我碰到的都是二进制文件)损坏了,export不了,这个时候可以不管它,只需把其他文件导出.
  如果这个版本不能export,则可以这样做,骗过svn,只为提交一个版本号,使后面的版本号与旧版本服务器上的一致:
  建一个txt文件,文件名只要不与其他文件冲突就可以。
  注意,如果该版本里有新增的文件,则还需要建一个跟新增的文件同名的文件一起提交(内容为空即可)。
  
  6. Load "dump 2" into the new repository 
  
  
  
1. 安装 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi


2. 安装Setup-Subversion-1.7.6.msi(http://subversion.apache.org/packages.html里的Win32Svn ) 


3. 配置apache
  httpd.conf
  添加:
  LoadModule dav_svn_module modules/mod_dav_svn.so
  LoadModule authz_svn_module modules/mod_authz_svn.so
  并将svn\bin里的这两个so文件复制到apache的modules目录
  
  去掉 LoadModule dav_module modules/mod_dav.so 前的#注释
  
  
  ssl:
  去掉 LoadModule ssl_module modules/mod_ssl.so 前的#注释  
  去掉 Include conf/extra/httpd-ssl.conf 前的#注释
  复制之前apache里的ssl目录到新的apache的conf目录
  编辑httpd-ssl.conf
  Listen 4443
  <VirtualHost _default_:4443>
  SSLCertificateFile conf/ssl/my-server.cert
  SSLCertificateKeyFile conf/ssl/my-server.key
  
  
  复制原httpd.conf里的所有Location 定义
  
  复制cgi-bin里的文件(用来修改svn用户密码的网页)
  
4. 创建仓库 svnadmin create E:\VersionCtl\Odin
   复制原来的AuthzSVNAccessFile  、AuthUserFile 文件,到新的仓库\conf目录
   
   还原仓库:
   svnadmin load E:\VersionCtl\Odin < F:\share\odin.lu.dump
   
   如果有版本损坏,就要按照前面提到的那几个步骤操作。

5. 自主修改svn密码(参考 http://bbs.iusesvn.com/viewthread.php?action=printable&tid=20 有bug,只支持ie,因为作者写html注释,少敲了一个“-”!)
   有时间可以自己写一个,jsp,perl都可以,我倒是想用python,练练手 ,等有空吧