• svn迁移(由windows visualsvn迁移至linux subversion)


    svn迁移(由windows visualsvn迁移至linux subversion)

    dayi_123 2018-09-04 17:16:33 3860 收藏 4
    分类专栏: 版本管理与持续集成 文章标签: svn迁移 subversion svn安装与管理 svn主从同步
    版权

    版本管理与持续集成
    专栏收录该内容
    3 篇文章0 订阅
    订阅专栏
    最近由于公司使用的visual svn服务所在的windows主机经常出现自动重启故障,导致开发人员在提交代码时经常提交失败。鉴于此,决定将svn由windows的visualsvn迁移至Linux主机下的subversion软件搭建的svn主机上。

    一、linux系统svn服务器的搭建
    1、安装环境准备工作

    系统 centos7.5 内存:4g cpu: 2核 硬盘大小:250g

    Subversion版本:1.7.14(yum方式安装)

    httpd版本:2.4.6(yum安装)

    ip地址:192.168.1.117

    安装完成后svn server既可以通过svn协议管理,也可通过http协议管理

    2、svn服务的安装

    yum install httpd subversion mod_dav_svn
    3、创建项目

    创建项目时使用”svnadmin create”命令创建

    #创建svn服务数据存放目录及配置文件存放目录
    mkidr /data/{svndata,etc}
    # 创建一个项目
    Svnadmin create /data/svndata/data1
    4、配置svn

    当创建一个svn仓库时,默认的当前仓库的配置在当前仓库的conf目录下,主要的配置文件有权限管理配置文件”authz”,密码配置文件”passwd”,svn服务配置文件”svnserve.conf”。

    当存在多个项目时,为了方便管理及授权,可以通过配置”svnserve.conf”将密码及授权配置文件制定到统一的目录下。

    svnserve.conf配置如下:

    [general]
    anon-access = none
    auth-access = write
    password-db = /data/etc/svn-user.conf
    authz-db = /data/etc/svn-authz.conf
    realm = system
    anon-access表示匿名用户的权限,值有:read write none

    auth-access表示认证用户的权限,值有:read write none

    password-db表示用户名及密码文件存放位置

    authz-db权限分配文件的存放位置

    realm为登录提示信息

    /data/etc/svn-user.conf配置如下

    [users]
    liuyi = liuyi
    dayi123 = dayi123
    前面一个字段为用户名,后面一个字段为密码,密码为明文的形式。

    /data/etc/svn-user.conf文件配置如下:

    [groups]
    dev = dayi123,dayi
    [system:/]
    liuyi = rw
    @dev = rw
    [reps2:/]
    liaoxb = rw
    如果有多个用户访问同一个项目时,可以定义一个组,将用户添加到组下,再将此项目权限授予组。

    5、配置通过http管理svn

    (1)创建支持svn的httpd配置文件

    # httpd服务的配置文件如下:
    ]# cat /etc/httpd/conf.d/subversion.conf
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    <Location /svn>
    DAV svn
    SVNParentPath /data/svndata
    AuthType Basic
    AuthName "dev.chinatvpay.com"
    AuthUserFile /data/etc/passwd
    AuthzSVNAccessFile /data/etc/authz
    Require valid-user
    </Location>
    (2)创建使用http协议的用户密码文件并创建用户

    通过基于http协议和基于svn协议的用户是互不相关的,如果想让一个用户能同时通过两种方式管理svn,需要通过两种方式添加用户。Httpd服务的认证文件存放路径存放在httpd的配置文件中,其中”AuthUserFile”为认证文件的存放路径。” AuthzSVNAccessFile”为权限管理文件存放路径。

    # 创建用户密码文件并设置密码,第一次创建时加”-c”选项,以后创建不能加”-c”选项,不然文件可能会被覆盖
    ]# htpasswd –c /web/svn/passwd dayi123
    # 查看创建的用户及密码
    ]# cat etc/passwd
    liuyi:$apr1$G8CzDQYV$.0FQccOaPQ9PHDFZWQNKH0
    (3)创建基于http协议访问的用户的授权文件

    # 文件路劲为http配置中指定的路径
    ]# cat /data/etc/authz
    [/]
    liuyi = rw
    dayi123 = rw
    (4)对svn目录授权,使能通过http操作

    # 修改svn数据目录的权限及所有者
    ]# chmod 755 /data/svndata -R
    ]# chown apache:apache /data/svndata -R
    6、启动svn

    #启动svnserver
    ]# svnserve -d -r /data/svndata
    # 启动httpd服务
    ]# systemctl start httpd
    二、svn服务器的迁移
    1、在Linux服务上创建svn仓库

    在Linux服务上依据window visualsvn上存在的仓库名称创建仓库。

    # 创建所有的仓库
    ]# svnadmin create /data/svndata/system
    ]# svnadmin create /data/svndata/code
    ]# svnadmin create /data/svndata/codebase
    ]# svnadmin create /data/svndata/dev
    ]# svnadmin create /data/svndata/devlop
    ]# svnadmin create /data/svndata/public
    ]# svnadmin create /data/svndata/outdev
    2、将windows上的visualsvn上的所有仓库导出

    Linuxsvn安装完成后,需要将windows svn上的仓库导出,拷贝到linux svn机器上上,再从linux svn上导入。Windows仓库的导出是通过再cmd窗口中执行命令导出的。

    导出命令:svnadmin dump “原仓库路径” > “备份的文件路径”

    在windows上导出svn仓库时,如果svn仓库较大且存在多个svn仓库时时,由于导出时间较长,可将所有的导出命令写入到bat脚本中,通过运行bat脚本导出。导出脚本内容如下:

    svnadmin dump “D:\data\svndata\system” > D:\backup\system.dump
    svnadmin dump “D:\data\svndata\code” > D:\backup\code.dump
    svnadmin dump “D:\data\svndata\codebase” > D:\backup\codebase.dump
    svnadmin dump “D:\data\svndata\dev” > D:\backup\svndata.dump
    svnadmin dump “D:\data\svndata\devlop” > D:\backup\svndata.dump
    svnadmin dump “D:\data\svndata\public” > D:\backup\svndata.dump
    svnadmin dump “D:\data\svndata\outdev” > D:\backup\outdev.dump
    3、将svn仓库备份在linux svn上导入

    将svn仓库导出后,拷贝到linux svn机器上,可通过sftp或ftp上传值linux svn主机。上传后导入到创建好的相应仓库里

    导入命令:svnadmin load “仓库路径” < “备份文件路径”

    导入时也可通过shell脚本导入,脚本内容如下

    #!/bin/bash
    svnadmin load /data/svndata/system < /data/backup/system.dump
    svnadmin load /data/svndata/code < /data/backup/code.dump
    svnadmin load /data/svndata/codebase < /data/backup/codebase.dump
    svnadmin load /data/svndata/dev < /data/backup/dev.dump
    svnadmin load /data/svndata/devlop < /data/backup/devlop.dump
    svnadmin load /data/svndata/public < /data/backup/public.dump
    svnadmin load /data/svndata/outdev < /data/backup/outdev.dump
    4、用户迁移

    Svn仓库数据迁移完成后需要对用户进行迁移,由于windows服务器上的visualsvn使用的用户为域用户,无法完成对用户的迁移,所以只能使用手动添加创建。Windows svn权限的配置文件也是通过用户的id配置的,无法配置,只能重新分配。

    三、建立svn主从同步
    为了提高svn的高可用性,防止svn服务器出现故障,需要为svn服务器搭建一个备用的svn server,让主svn实时将代码的提交更新同步到备用svn上,已完成svn服务的高可用。

    1、环境准备

    Svn备机环境准备如下:

    系统 centos7.5 内存:4g cpu: 2核 硬盘大小:250g

    Subversion版本:1.7.14(yum方式安装)

    httpd版本:2.4.6(yum安装)

    ip地址:192.168.1.118

    在svn server备机上,创建同主svn上相同的库安装相同的服务;建立用于同步数据的用户(基于svn协议的账号),用户需对所有的仓库有读写权限。svn账号权限统一在/data/etc/下统一分配管理。

    2、配置同步

    在备库的每个仓库的hooks目录下建立名称为”pre-revprop-change”的文件,并赋予执行权限。

    # pre-revprop-change内容如下
    ]# cat pre-revprop-change
    exit 0
    # 给此文件赋予执行权限
    ]# chmod 755 pre-revprop-change
    3、同步文件

    同步操作均在主svn上操作

    在同步数据前先要对svn做初始化,初始化完成后再进行第一次同步,通过初始化缓存下主备svn的用户及密码等相关信息,同步时不再需要输入用户名密码。初始化的命令为:”svnsync init 目标svn链接 源svn链接”。

    # 对两台svn的所有仓库先做初始化,第一个初始化的仓库需要输入主机密码及svn用户密码
    svnsync init svn://192.168.1.118/system svn://192.168.1.117/system
    svnsync init svn://192.168.1.118/code svn://192.168.1.117/code
    svnsync init svn://192.168.1.118/codebase svn://192.168.1.117/codebase
    svnsync init svn://192.168.1.118/dev svn://192.168.1.117/dev
    svnsync init svn://192.168.1.118/devlop svn://192.168.1.117/devlop
    svnsync init svn://192.168.1.118/public svn://192.168.1.117/public
    svnsync init svn://192.168.1.118/outdev svn://192.168.1.117/outdev
    在初始化完成后,就可以同步数据了,如果数据量大,第一次同步数据比较耗时,可以将同步命令写入脚本内去执行:

    ]# cat svnrsync.sh
    #!/bin/bash
    svnsync sync svn://192.168.1.118/system
    svnsync sync svn://192.168.1.118/code
    svnsync sync svn://192.168.1.118/codebase
    svnsync sync svn://192.168.1.118/dev
    svnsync sync svn://192.168.1.118/devlop
    svnsync sync svn://192.168.1.118/public
    svnsync sync svn://192.168.1.118/outdev
    第一次同步完成后,可将同步脚本加入定时任务,定时去执行;如果想让提交的代码实时的跟新到备库中可以在仓库的hooks目录下的” post-commit.tmpl”中加入同步命令即可。
    ————————————————
    版权声明:本文为CSDN博主「dayi_123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/dayi_123/article/details/82386982

  • 相关阅读:
    Windows 下搭建Android开发环境
    浅谈C/C++中运算符的优先级、运算符的结合性以及操作数的求值顺序
    更新Android SDK到3.0版本时,遇到Failed to rename directory E:\android\tools to E:\android\temp\ToolPackage.old01问题
    单词计数 soj1076
    拓扑排序
    浅谈C和C++中的const关键字
    快速排序
    拓扑排序 soj1075
    集合划分问题
    浅谈C/C++中的顺序点和副作用
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/15633161.html
Copyright © 2020-2023  润新知