Linux下SVN服务器迁移(详细版)

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

               Linux下SVN服务器迁移(详细版) 

          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目录下      )

            Linux下SVN服务器迁移(详细版)            Linux下SVN服务器迁移(详细版)


   

     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代码库目录     

                        Linux下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文件了。

                        Linux下SVN服务器迁移(详细版)

                

                    3 )  在 新机器上建立 仓库

                        svnadmin  create  /home/yst/svn/svn-admin/repos4

                        Linux下SVN服务器迁移(详细版)

                    4)  将 dump 文件 load 进 新服务的仓库中:

                   /home/yst/svn/bin/svnadmin load /home/yst/svn/svn-admin/repos4 < 2414.dump  

                   将 2414.dump   < ( 写入 ) 到 新服务器上刚刚新建的仓库中去。

               Linux下SVN服务器迁移(详细版)

                5) 启动新机器的SVN服务:

                      svnserve -d -r repos4

                Linux下SVN服务器迁移(详细版)

                6)查看  SVN服务是否 启动:

                      ps -ef |  grep svn  (  如下图 )

                    Linux下SVN服务器迁移(详细版)

                        

                    PS :  SVN服务的默认启动端口是 3690, 可以通过  svnserve --listen-port 8899 -d -r  repos4(SVN仓库路径)指定端口启动。


            二、使用 svnsync 迁移SVN代码库 ( 推荐使用这种方式 )

                1)在新服务器上创建 代码仓库

                      svnadmin create /home/yst/svn/svn-admin/repos5

                 Linux下SVN服务器迁移(详细版)

                2)修改新建仓库中hooks 下的 名为 pre-revprop-change 的文件:

                    cp pre-revprop-change.tmpl pre-revprop-change

                    Linux下SVN服务器迁移(详细版)

                    chmod 777  pre-revprop-change  (  给pre-revprop-change文件 赋执行权限 )

                    Linux下SVN服务器迁移(详细版)

                     修改  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协议)               Linux下SVN服务器迁移(详细版)

                         (PS : 这块需要输入密码验证,新服务器的密码    源服务器SVN的账号密码,此账号应该有仓库所有代码的读取权限)

                 4) svnsync sync file:///home/yst/svn/svn-admin/repos5  ( 同步 )

                

                5)  等待同步完成,启动SVN服务器即可。至此,SVN服务就已经迁移完了。    

            

             迁移完成之后,发现提交代码有问题,报错如下:

            Linux下SVN服务器迁移(详细版)

            解决方式是: 将原仓库的 uuid 复制过来,覆盖新服务器上的UUID

            Linux下SVN服务器迁移(详细版)

            


            

                参考链接:

                        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