一、Subversion简介

SVNSubversion的简称,是一个开放源代码的版本控制系统,相较于RCSCVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion

 

二、安装Subversion

   本例中用yum的方式安装Subversion,也可以采用源码的方式进行安装,源码包下载地址为:

http://subversion.apache.org/download/#pre-releases

Yum 安装命令为:

[root@localhost ~]# yum -y install subversion

 

三、svnserve服务器搭建

1、创建版本库

软件安装完成后,首先要做的是创建一个版本库,svnadmin工具是subversion软件所提供的版本管理工具,该工具可以用来创建库、备份库、修订版本等操作。其次我们还需要为版本库建立一套有效的认证机制以增强版本数据库的安全性。最后服务器端所有设置均完成后,启动服务器端相应的服务进程即可。

Svnadmin 命令/版本库路径 【选项】

命令:create 创建一个新东风版本库

      Hotcopy 版本库热备

      Lslocks 打印素有的锁描述

 

[root@localhost ~]  svnadmin create /var/svn/project1

[root@localhost ~]  svnadmin hotcopy /var/svn/project1 /var/svn/project1_copy

[root@localhost ~]  svnadmin lslocks /var/svn/project1

 

例子:有一个项目多人开发,用版本控制系统管理代码,项目代码保存在/var/svn目录下,将项目创建名为web_project

[root@localhost ~]  mkdir /var/svn

[root@localhost ~]  svnadmin create /var/svn/web_project

通过svnadmin命令已经创建了一个名为web_project的空版本库,下面我们将使用svn命令将项目代码导入到版本库中。Import代表执行导入操作,将本地目录下的资料导入至刚刚创建的空版本库web-project中,-m后面跟的是说明性的字符串,可以为任意字符。

[root@localhost ~]  svn import /tmp  file:///var/svn/web_project  -m "new code"

[root@localhost ~]  svn list file:///var/svn/web_project/

 

2、认证与授权

服务器会根据版本库目录下的conf/svnserve.conf文件中定义的认证与授权策略实现权限控制。

[root@localhost ~]   cat /var/svn/web_project/conf/svnserve.conf

[general]

# anon-access = read 设置拒绝匿名账户访问,此处可以设置为nonereadwrite

# auth-access = write 经过认证的账户权限可写

# password-db = passwd 指定账户名称与密码的存放文件名,该文件在conf目录下

# authz-db = authz 指定基于路径的访问控制文件名(可以对文件或目录设置权限)

# realm = My First Repository 设置版本库域,如果两个版本库的认证域相同,他们将使用相同的密码数据

 

 

[root@localhost ~]  cat /var/svn/web_project/conf/passwd

[users]

# harry = harryssecret 用户名为harry,,密码为harryssecret

# sally = sallyssecret  用户名为sally ,,密码为sallyssecret

[root@localhost ~]  cat /var/svn/web_project/conf/authz

[groups]

# harry_and_sally = harry,sally  定义组,组成员有harry,sally

# harry_sally_and_joe = harry,sally,&joe

 

# [/foo/bar]

# harry = rw

# &joe = r

# * =

 

# [repository:/baz/fuz]  对版本库路径设置权限,可以设置为需要控制的路径

# @harry_and_sally = rw  harry_and_sally组中的用户可读可写权限

# * = r       其他人只读,权限可以设置为只读(‘r’)、读写(‘rw’),无权限(‘’)

 

3、启动svnserve服务

Svnserve -d 以守护进程的方式运行svnserve

         --listen-port=port 指定监听的端口,默认监听端口号为3690

         -r root  为版本库指定一个虚拟路径,默认客户端要指定绝对路径访问库

[root@localhost ~] svnserve -d

如果需要仅发布个别版本给网络用户,可以使用svnserve命令的-r选项,该选项后面接版本库的路径。

[root@localhost ~] svnserve -d -r /var/svn/

 

4、客户端访问

在客户端访问服务器版本库的众多方法中,命令行的方式是高效、功能完善、无需安装第三方软件的一种简单的方式,svn软件为我们提供了一个名为svn的命令行程序

Svn 命令 【选项】

选项:--password  密码

      --username  用户名

      --revision(-r) 指定要检查的特定版本

命令:add 添加文件、目录或符号链接

      Cat 输出特定文件的内容

      Checkout  URL[@rev][path]

从服务器版本库中复制一份副本至本地,URL定位版本库,通过REV可下载特定版本的数据,PATH为本地工作副本路径

Commit  将本地工作副本修改后的内容发布到版本中,简写为ci

Copy SRC DST 将工作副本中的一个文件或目录复制到版本库

Delete PATH 从本地工作副本中删除一个项目

Delete url 从版本库中删除一个项目

Diff 对比两个版本之间的差别

Import 提交一个路径的副本至版本库

Info 显示本地或远程版本信息

[root@localhost ~]  svn checkout file:///var/svn/web_project /home

[root@localhost ~]  svn co svn://10.10.10.131/web_project /home

[root@localhost ~] Svn commit -m new code  /home

[root@localhost ~] Svn delete testfile

[root@localhost ~] Svn diff

[root@localhost ~] Svn import -m new code /etc file:///var/svn/web_project

[root@localhost ~] Svn info svn://10.10.10.131/var/svn/web_project 

除了核心的svn命令,svn软件包还提供了一个用于对版本库数据信息进行简单查询的工具svnlook命令,可以帮助用户完成查询工作

Svnlook 命令/版本库路径 【选项】

选项:--revision(r)指定要检查的特定版本

命令:author 显示作者

      Cat    显示版本库中的文件内容

      Date   显示时间标记

      Log    显示日志消息

      Tree   显示版本库资料树

[root@localhost ~] svnlook author /var/svn/web_project

[root@localhost ~] svnlook author -r 2 /var/svn/web_project 查看版本2的作者信息

[root@localhost ~] svnlook author -r 2 /var/svn/web_project test 查看版本库中test文件的内容

svn图形工具连接版本库服务器

工具下载地址:http://tortoisesvn.net/downloads.html

下载完成安装后,在桌面右键就会显示svn检出

单击进行配置

wKiom1V2geGhTkYwAAFvB17-r5w311.jpg 

配置完成后就能正常将版本库同步到本地

 

四、svnserve+ssh服务器搭建

1、服务器端启动sshd服务器

[root@localhost ~] service sshd start

[root@localhost ~] chkconfig sshd on 

    2、服务器端创建版本库

[root@localhost ~] svnadmin create /var/svn/web_project

[root@localhost ~] svn import /var/code2 file:///var/svn/web_project2 -m web code

3、客户端访问

[root@localhost ~] svn co svn+ssh://10.10.10.131/var/svn/web_project /web_code2

图形工具访问

wKiom1V2glnRVukyAAGQF7vIK0o811.jpg 

输入用户名和密码后完成版本库下载

wKioL1V2hBLxpZeQAABaAogxqAE927.jpg 

wKioL1V2hByR-44OAABiSdL0pGA621.jpg 

 

五、apache+svn服务器搭建

 

 

1、创建服务器版本库

[root@localhost ~] svnadmin create /var/svn/web_project3

[root@localhost ~] svn import /var/code3 file:///var/svn/web_project3 -m web code3

    2、安装apache及相关模块软件

[root@localhost ~] yum -y install httpd

[root@localhost ~] yum -y install mod_dav_svn 

3.修改apache配置

[root@localhost ~] vim /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so

加载dav_svn模块

LoadModule authz_svn_module   modules/mod_authz_svn.so

加载权限设置模块

<Location /svn>当用户的URL是以/svn开始(http://hostname/svn/...apache会将控制权交于DAV处理

   DAV svn

   SVNParentPath /var/svn            指定所有版本库的主目录

      AuthType Basic                 apache认证方式

      AuthName "Authorization Realm" 提示字符

      AuthUserFile /var/svn/.pass 账户文件路径,为了安全,应该隐藏该文件

      Require valid-user 设置仅为有效用户可以访问

</Location>

[root@localhost ~] chown -R apache:apache /var/svn

[root@localhost ~] htpasswd -c /var/svn/.pass jerry

[root@localhost ~] Service httpd start

[root@localhost ~] Chkconfig httpd on

 

4、客户端访问

wKioL1V2hFSTKbvMAAB0gUzf9Ls446.jpg 

wKioL1V2hGSwgyzeAACgGiIKE4A750.jpg 

 

 

 

 

参考资料:http://wenku.baidu.com/link?url=QULo1I3lN61-J0t-n2o61hcIquD4xohXA6d48fVCHZhfAokZ55U8A7fkFNaFcfmfU9G1keh0FXA2NSZz8ot6fexUhXvLvVNgy7iedHbIQx3