最近因公司测试环境需要做迁移,除了应用需要迁移外,项目中平时用到的软件都得迁,涉及到nginx,redis , active MQ 
,jenkins 
以及SVN。SVN的迁移涉及到了代码的同步,在网上搜了很多SVN迁移相关的文章,发现杂而乱,最终还是完成了测试环境的SVN迁移。迁移完成后,发现整个过程是非常清晰以及有序的,遂记之。
            
        步骤:将SVN从一台服务器(源服务器)迁移到另一台服务器(新服务器)上,操作分为两步:
            1 )   按照源服务器的版本,在新服务器安装同样的版本的SVN;
            2 )   同步源服务器的SVN库到新服务器上;
        SVN安装:(以1.6.11版本为例)
            1 )  下载   subversion-1.6.11.tar.bz2 
  subversion-deps-1.6.11.tar.bz2  这两个文件
                  wget 
 http://subversion.tigris.org/downloads/subversion-1.6.11.tar.bz2
                  wget 
 http://subversion.tigris.org/downloads/subversion-deps-1.6.11.tar.bz2
           2) 解压
                tar  jxvf  subversion-1.6.11.tar.bz2
                tar  jxvf  subversion-deps-1.6.11.tar.bz2
               解压完成后,会出现一个名为 subversion-1.6.11的文件夹  如下图:
                
          3 ) 安装:( 分为三个操作   配置安装路径    编译    安装  )
                进入到  subversion-1.6.11 这个目录下,( PS  :   三个操作都在此目录下操作  )
                配置安装路径:        ./configure --prefix=/home/yst/svn    ( 
/home/yst/svn  这个是指定安装到哪个目录 )
                编译: make
                安装: make install
                ( PS :   编译 和 安装 也可以 合并成一句命令    make && make install )
          
           至此 新服务SVN服务的 安装已经完成了。这里再推荐下另外的方式( 需要 root权限 ):
                    1) 万能的  yum
                        yum install subversion   
                    2 ) apt-get 
                        apt-get install subversion
            
           接下来,检查SVN 是否安装成功。
            svn --version   (  出现version,表示安装成功  )
            如果 svn 命令找不到的话:( 就用 svn命令的全路径去执行    svn命令在  安装目录(home/yst/svn)的 
bin目录下      )
                        
   
     SVN的迁移: (  建议迁移的时候,将所有源库SVN所有账号的权限改成只读,或者停掉SVN服务器  )
            SVN的迁移有两种方式: 
                   1) dump出源机器SVN的代码库,然后load到新服务器上去。
                   2)  使用 svnsync 直接同步源机器代码库。
           比较这两种迁移的方式,我比较推荐第二种——使用svnsync进行迁移。第一种使用dump出源机器代码库,
dump完,看了一下dump文件,几十个G,太大了。两种操作的方式具体操作如下:
            
             一、采用dump迁移SVN代码库:
                    1) dump 出源机器的SVN代码库:  (  依照SVN数据量的大小,时间可能会很长 )
                          svnadmin dump repos/ > 2414.dump  (dum出文件)
                                                    repos/ 源机器上SVN代码库目录     
                        
                    2)使用 scp(secure copy)命令,将dump出来的文件传到 新机器上。
                        scp -r  /home/svn-admin/repos 
 [email protected]:/home/yst/svn/svn-admin
                        scp -r   源机器SVN仓库目录         新机器用户名@新机器IP地址:传到新机器的指定目录
                        然后输入新机器 linux用户名的密码,就在传dump文件了。
                        
                
                    3 )  在 新机器上建立 仓库
                        svnadmin  create  /home/yst/svn/svn-admin/repos4
                        
                    4)  将 dump 文件 load 进 新服务的仓库中:
                   /home/yst/svn/bin/svnadmin load 
/home/yst/svn/svn-admin/repos4 < 2414.dump  
                   将 2414.dump   < ( 写入 ) 到 新服务器上刚刚新建的仓库中去。
               
                5) 启动新机器的SVN服务:
                      svnserve -d -r repos4
                
                6)查看  SVN服务是否 启动:
                      ps -ef |  grep svn  (  如下图 )
                    
                        
                    PS :  SVN服务的默认启动端口是 3690, 可以通过  svnserve --listen-port 
8899 -d -r  repos4(SVN仓库路径)指定端口启动。
            二、使用 svnsync 迁移SVN代码库 ( 推荐使用这种方式 )
                1)在新服务器上创建 代码仓库
                      svnadmin create /home/yst/svn/svn-admin/repos5
                 
                2)修改新建仓库中hooks 下的 名为 pre-revprop-change 的文件:
                    cp pre-revprop-change.tmpl pre-revprop-change
                    
                    chmod 777  pre-revprop-change  (  给pre-revprop-change文件 
赋执行权限 )
                    
                     修改  pre-revprop-change 脚本最后一行 为  exit 0
                    3)svnsync  init  file:///home/yst/svn/svn-admin/repos5 
svn://xx.xx.xx.xx ( 初始化 )
                        svnsync  init   file:// 新机器仓库目录路径   源服务器的IP(可以通过 http 
协议,还可以通过svn协议)               
                         (PS : 这块需要输入密码验证,新服务器的密码   
 源服务器SVN的账号密码,此账号应该有仓库所有代码的读取权限)
                 4) svnsync sync file:///home/yst/svn/svn-admin/repos5  ( 同步 )
                
                5)  等待同步完成,启动SVN服务器即可。至此,SVN服务就已经迁移完了。    
            
             迁移完成之后,发现提交代码有问题,报错如下:
            
            解决方式是: 将原仓库的 uuid 复制过来,覆盖新服务器上的UUID
            
            
            
                参考链接:
                        SVN权限控制
                                https://blog.csdn.net/cuiyaoqiang/article/details/51784391 
   
                        SVN sync同步:
                            
    http://blog.chinaunix.net/uid-25266990-id-2953695.html
                        SVN 实时同步:
                                http://blog.51cto.com/php2012web/1852311
                                 https://blog.csdn.net/xyw591238/article/details/51914908
            
                
                    
热门工具 换一换
