最近因公司测试环境需要做迁移,除了应用需要迁移外,项目中平时用到的软件都得迁,涉及到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