SVN(subversion)

       svn(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。
 运行方式

  svn服务器有2种运行方式:独立服务器和借助。2种方式各有利弊,用户自行选择。本文由于使用的是nginx服务器, 由于nginx现在暂时不支持subversion ,所以本文选择的是SVN的独立安装模式

 存数据储

    svn存储版本数据也有2种方式:BDB和FSFS。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。 CentOS + SubVersion 开始安装

 1. 操作系统: CentOS 6.0

 1.获取svn 安装包
    wget http://subversion.tigris.org/downloads/subversion-1.6.5.tar.gz
    wget http://subversion.tigris.org/downloads/subversion-deps-1.6.5.tar.gz
 2.编译svn
    以root 用户登录

    tar xfvz subversion-1.6.5.tar.gz
    tar xfvz subversion-deps-1.6.5.tar.gz
    cd subversion-1.6.5
        ./configure --prefix=/opt/svn --without-berkeley-db --with-zlib=zlib
            (注:以svnserve 方式运行,不加apache 编译参数。以fsfs 格式存储版本库,不编译berkeley-db)
    make clean
    make
    make install

 3.修改配置文件

   vi /etc/profile , 在/etc/profile 最后加入:

   PATH=$PATH:/opt/svn/bin
   export PATH

 4.重载配置文件

   source /etc/profile

 5.svn 测试
   svnserve --version
   如果显示如下,svn 安装成功:

 

 svn服务器配置

 1.建立svn 版本库目录
   可建多个:(这里我建立2 个)
   mkdir -p /opt/svndata/repos1
   mkdir -p /opt/svndata/repos2
 2.建立svn 版本库
   svnadmin create /opt/svndata/repos1
   svnadmin create /opt/svndata/repos2
 3.修改svn 版本库配置文件
   版本库1:
    vi /opt/svndata/repos1/conf/svnserve.conf
   内容修改为:
   [general]
   anon-access = none
   auth-access = write
   password-db = /opt/svn/conf/pwd.conf
   authz-db = /opt/svn/conf/authz.conf
   realm = repos1
 (注意:把文件中上面各项前面的# 号去掉,然后去掉他前面的空格。保存)
  版本库2:
   vi /opt/svndata/repos2/conf/svnserve.conf
  内容修改为:
  [general]
  anon-access = none
  auth-access = write
  password-db = /opt/svn/conf/pwd.conf
  authz-db = /opt/svn/conf/authz.conf
  realm = repos2
  即除realm = repos2 外,其他与版本库1 配置文件完全相同。如果有更多的版本库,依
此类推。
  这里的各配置项意思是:
  anon-access 指匿名访问的权限,可以是read,write,none,默认为read,这个建议配为none
  auth-access 指认证用户的权限,可以是read,write,none,默认为write
  password-db 指密码数据库的路径,去掉前面的,存的是认证用户的用户名和密码,
  uername=passwd

  authz-db 实现了以路径为基础的授权,也就是判断用户是否有操作对应路径的权限
   (注意:把文件中上面各项前面的# 号去掉,然后去掉他前面的空格。保存)
 4.配置允许访问的svn 用户
   vi /opt/svn/conf/pwd.conf
   为了简化配置,2 个版本库共用1 个用户配置文件。如有必要,也可以分开。
   注意:对用户配置文件的修改立即生效,不必重启svn。
   文件格式如下:
   [users]
   <用户1> = <密码1>
   <用户2> = <密码2>
   其中,[users]是必须的。下面列出要访问svn 的用户,每个用户一行。示例:
   [users]
   alan = password
   king = hello
  5.配置svn 用户访问权限
   Vi /opt/svn/conf/authz.conf
   为了简化配置,3 个版本库共用1 个权限配置文件/opt/svn/conf/pwd.conf。如有必要,
   也可以分开。文件中定义用户组和版本库目录权限。
  

 注意:
   * 权限配置文件中出现的用户名必须已在用户配置文件中定义。
   * 对权限配置文件的修改立即生效,不必重启svn。
  用户组格式:
   [groups]
   <用户组名> = <用户1>,<用户2>
   其中,1 个用户组可以包含1 个或多个用户,用户间以逗号分隔。

 版本库目录格式:
   [<版本库>:/项目/目录]
   @<用户组名> = <权限>
   <用户名> = <权限>
   其中,方框号内部分可以有多种写法:
   /表示根目录及以下。根目录是svnserve 启动时指定的,我们指定为/opt/svndata。这样,
   /就是表示对全部版本库设置权限。
   repos1:/表示对版本库1 设置权限
   repos2:/abc 表示对版本库2 中的abc 项目设置权限
   repos2:/abc/aaa 表示对版本库2 中的abc 项目的aaa 目录设置权限
   权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、
   r、wr 和空,空表示没有任何权限。
  

   示例:
   [groups]
   admin = alan
   [/]
   @admin = rw
   [repos1:/abc/aaa]
   king = rw
   [repos2:/pass]
   king =
  6.svn 配置完毕,删除无用文件
    rm /opt/svndata/repos1/conf/authz
    rm /opt/svndata/repos1/conf/passwd
    rm /opt/svndata/repos2/conf/authz
    rm /opt/svndata/repos2/conf/passwd

 

 启动SVN

  1.建立启动svn 的用户
    useradd svn
    passwd svn
    根据提示为用户svn 设置密码
    允许用户svn 访问版本库
    chown -R svn:svn /opt/svndata
    (这里我是直接用root 启动的)
  2.启动svn
   (1)用设定帐户启动
   su liushuangzeng -c "svnserve -d --listen-port 9999 -r /opt/svndata"

   其中:
    su svn表示以用户svn 的身份启动svn
    -d表示以daemon 方式(后台运行)运行
    --listen-port 9999表示使用9999 端口,可以换成你需要的端口。但注意,使用1024
以下的端口需要root 权限
    -r /opt/svndata指定根目录是/opt/svndata
  (2)对于单个代码仓库:
   启动命令: svnserve -d -r 文件夹路径--listen-host 192.168.100.131
    其中-d 表示在后台运行, -r 指定服务器的根目录,这样访问服务器时就可以直接用svn:// 服务器ip 来访问了。
    如果服务器有多ip 的话--listen-host 来指定监听的ip 地址.

    我们可以在svn 客户端中通过svn://192.168.100.131 来访问svn 服务器
  (3)对于多个代码仓库:
      我们在启动时也可以用-r 选项来指定服务器根目录, 但访问时需要写上每个仓库相对于svn 根目录的相对路径.
      比如, 我们有两个代码仓库/opt/svndata/repos1 和/opt/svndata/repos2, 我们用:
      svnserve -d -r /opt/svndata --listen-host 192.168.1.100来启动, 那么在客户端访问时可以用svn://192.168.100.100/repos1 和svn://192.168.1.100/repos2 来分别访问两个项目启动完成以后
      我启动的方法:
       [root@austit fabian]# svnserve -d -r /opt/svndata --listen-host 192.168.100.131
     注意:
      svn 默认端口是3690 ,你需要在防火墙上开放这个端口。也可以通过svnserve 的--listen-port 选项来指定一个已经开放的其他端口, 不过这样的话客户端使用也必须家上端口, 如  svn://192.168.100.200:9999/.......
    3.检查是否启动成功:(查看是否存在svnserve 进程)
       ps -ef|grep svnserve
      如果显示如下,即为启动成功:
      svn 6941 1 0 15:07 ? 00:00:00 svnserve -d –listen-port 9999 -r /opt/svndata
      我是用root 帐户启动的:
      [root@austit fabian]# svnserve -d -r /opt/svndata --listen-host 192.168.100.131
      [root@austit fabian]# ps -ef|grep svnserve
      root 4513 1 0 21:07 ? 00:00:00 svnserve -d -r /opt/svndata --listen-host 192.168.100.131
      root 4515 4409 0 21:07 pts/1 00:00:00 grep svnserve

 

  导入SVN

  1.设我的站点为/www/htdocs/mysite    cd /www/htdocs

    svn import commengine -m "initial import"

    或者

    svn import commengine svn:///192.168.1.100/repos1/mysite -m "initial import"

  2.查看版本库

    svn list

    或者

    svn list svn://192.168.1.100/repos1/mysite 

  3.从版本库检出

    svn co svn://192.168.1.100/repos1/mysite mysite

 

   SVN服务器搭建完毕