平台环境
- CentOS 6.X (同样适用其他 Linux 发行版本)
- 服务器节点 192.168.1.101
SVN 简介&工作原理
subversion(简称svn)是近几年崛起的版本管理软件,是 cvs 的接班人,目前绝大多数开源软件都使用 svn 作为代码版本管理软件。Subversion 支持 linux 和 windows,但较多安装在 linux 下。
svn 服务器有两种运行方式: 独立服务器和借助于 apache。 svn:// 或 http://
svn 客户端 tortoisesvn
svn 的基本工作原理: 在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。有源代码库管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后开发人员可以在本地修改,之后用 svn 命令进行提交,由源代码库统一管理修改。
版本控制解决了:
- 代码管理混乱
- 解决代码冲突困难
- 在代码整合期间引发 bug
- 无法对代码的拥有者进行权限控制
- 项目不同版本的发布困难
SVN 工作原理示意图:
subversion目录说明:
- dav 目录: 是提供 apache 与 mod_dav_svn 使用的目录,让他们存储内部数据
- db 目录: 是所有版本控制的数据存放文件
- hooks 目录: 放置 hook 脚本文件的目录
- locks 目录: 用来放置 subversion 建库锁定数据的目录,用来追踪存取文件库的客户端
- format 文件: 是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
- conf 目录: 是这个仓库的配置文件(仓库的用户访问账号、权限等)
SVN Server 详细配置
系统环境: CentOS 6.3 最小化安装(关闭 iptables 和 selinux) + ssh + yum
Step1 安装必须软件包
$ yum install subversion mysql-server httpd mod_dav_svn mod_perl sendmail wget gcc-c++ make unzip perl* ntsysv vim-enhanced
- subversion (SVN 服务器)
- mysql-server (用于 codestriker)
- httpd mod_dav_svn mod_perl (用于支持 WEB 方式管理 SVN 服务器)
- sendmail (用于配置用户提交代码后发邮件提醒)
- wget gcc-c++ make unzip perl* (必备软件包)
- ntsysv vim-enhanced (可选)
Step2 SVN Server 配置
Step2-1 新建用于存储 SVN 文件的目录
$ mkdir /home/hadoop/svn
Step2-2 新建一个版本仓库
$ svnadmin create /home/hadoop/svn/project
Step2-3 初始化版本仓库中的目录
# 建立临时目录
$ mkdir project project/server project/client project/test
$ svn import project/ file:///home/hadoop/svn/project -m “初始化SVN目录”
# 删除临时建立的目录
$ rm -rf project
Step2-4 添加用户
添加 SVN 用户非常简单,只需在 /home/hadoop/svn/project/conf/passwd 文件添加一个形如 “username = password” 的条目就可以了。
[users]
# harry = harryssecret
# sally = sallyssecret
pm = pm_pw
server_group = server_pw
client_group = client_pw
test_group = test_pw
Step2-5 修改用户访问策略
/home/hadoop/svn/project/conf/authz 记录用户的访问策略
[groups]
project_p = pm
project_s = server1,server2,server3
project_c = client1,client2,client3
project_t = test1,test1,test1
[project:/]
@project_p = rw
* =
[project:/server]
@project_p = rw
@project_s = rw
* =
[project:/client]
@project_p = rw
@project_c = rw
* =
[project:/doc]
@project_p = rw
@project_s = r
@project_c = r
@project_t = r
* =
以上信息表示,只有 project_p 用户组有根目录的读写权。r 表示对该目录有读权限,w 表示对该目录有写权限,rw 表示对该目录有读写权限。最后一行的 * = 表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录。这个很重要,一定要加上!
Step2-6 修改 svnserve.conf 文件,使用户和策略配置生效
[general]
# 定义非授权用户的访问权限,有三种方式: none(限制访问), read(只读), write(读写),默认为 read
anon-access = none
# 定义授权用户的访问权限,有三种方式: none(限制访问), read(只读), write(读写),默认为 write
auth-access = write
# 定义保存用户名和密码的文件名称,这里为 passwd,和该文件位于同一目录
password-db = /home/hadoop/svn/project/conf/passwd
# 定义保存授权信息的文件名称,这里为 authz,和该文件位于同一目录
authz-db = /home/hadoop/svn/project/conf/authz
# 定义客户端连接是的“认证命名空间”, SVN 会在认证提示里显示,并且作为凭证缓存的关键字
realm = My First Repository
Step2-7 启动服务器
$ svnserve -d -r /home/hadoop/svn
# -d表示以 daemon 方式(后台运行)运行
# -r 指定根目录
如果修改了 svn 配置,需要重启 svn 服务,步骤如下:
# svn 服务端口号: 3690
$ ps -aux|grep svnserve
$ kill -9 ID号
$ svnserve -d -r /home/hadoop/svn
Step2-8 测试服务器
$ mkdir test
$ cd test
$ svn co svn://192.168.1.101/project
Authentication realm: <svn://192.168.1.101:3690>
Password for 'root':
Authentication realm: <svn://192.168.1.101:3690>
Username: server_group
Password for 'server_group':
svn: Authorization failed ( server_group没用根目录的访问权 )
$ svn co svn://192.168.1.101/project
Authentication realm: <svn://192.168.1.101:3690>
Password for ‘root’:
Authentication realm: <svn://192.168.1.101:3690>
Username: pm
Password for ‘pm’:
A project/test
A project/server
A project/client
Checked out revision 1. ( 测试提取成功 )
$ cd project/server
$ vim main.c
$ svn add main.c
$ svn commit main.c -m “test”
Adding main.c
Transmitting file data .
Committed revision 2. ( 测试提交成功 )
Step2-9 删除一个版本仓库
svn delete 只会删除版本库中的文件,svnadmin 也没有提供删除版本库的子命令。只能在 SVN 服务器端强制删除文件:
# $REPOS_PATH 是创建版本仓库时使用的地址 svnadmin create $REPOS_PATH
$ rm -rf $REPOS_PATH