1、安装svn
yum install subversion
系统会自动从镜像下载安装svn服务器端,中间会提示是否ok,输入y,确认安装成功提示:.....complete!
2、创建项目版本仓库
mkdir svn //在根目录下创建一个svn代码库目录
cd svn
mkdir www 进入到svn目录后创建项目目录,即 www 目录为项目目录,svn下可以创建多个目录,即管理多个项目代码
svnadmin create /svn/www 创建www项目版本仓库
www文件夹下面有如下文件:
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)
3、项目版本库配置
进入到 /svn/www/conf 目录,可以看见 authz passwd svnserver.conf 这三个配置文件
svnserver.conf 配置版本库信息和用户文件和用户密码文件的路径、版本库路径
# vi /svn/www/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /svn/www/conf/passwd
authz-db = /svn/www/conf/authz
realm = My Test Repository #这是个提示信息
passwd 添加访问用户及口令
# vi /svn/www/conf/passwd
[users]
test1 = 123456
test2 = 123456
authz 配置新用户的授权文件
# vi /svn/www/conf/authz
[groups]
admin = test1
user = test2
[/]
@admin = rw
@user = r
* =
[www:/www]
@admin = rw
@user = r
* =
格式说明:
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
/ 表示对根目录(即/svn目录)下的所有子目录范围设置权限;这个根目录跟启动svn的时候设置的目录相同
[www:/www] 表示对资料库中www项目设置权限
创建一个admin组,组成员包括test1
创建一个user组,成员只有test2
admin组对目录有读写权限
单个用户test2有读写权限
*= 表示除了上面设置的权限用户组以外,其他所有用户都设置空权限,空权限表示禁止访问本目录,这很重要一定要加上
注意:对权限配置文件的修改立即生效,不必重启svn。
4、启动svn服务
1:单版本库起动 svnserve -d -r /svn/www/
2:多版本库起动 svnserve -d -r /svn/
-d 后台运行
–r 参数指定一个资源
默认svn服务器端口是3690
杀死svn服务
# ps -ef|grep svn
root 4642 1 0 16:08 ? 00:00:00 svnserve -d -r /svn/www/
root 4692 3676 0 16:13 pts/2 00:00:00 grep svn
# kill -9 4642
到目前为止服务器端svn服务已经搭建完成,可以在客户端用svncheckout代码,进行相关操作了。
5、配置svn版本库代码自动部署到项目目录
在 /svn/www 目录的 hooks里面有一堆tmpl,这些tmpl可以做很多事情,不过今天我们就说一下自动部署post-commit.tmpl,tmpl文件是模版文件,我们要用post-commit需要手动复制对应tmpl里面的内容到新的post-commit里面。
cp post-commit.tmpl post-commit
然后打开post-commit文件清空里面内容,修改为以下代码:
#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username test1 --password 123456 /home/www/
其中第一行意思是:用sh来解析这个脚本,因为各种shell的语法有细微的差别
第二行是编码格式:这里我使用的是UTF-8
最后一行/usr/bin/svn 是svn的路径,后半句分别是上面配置的svn用户名和密码以及项目路径
最后进入到项目目录里面 /home/www checkout 整个项目:
svn checkout svn://{您的服务器地址}:{端口号}/www . //注意目录后面还有一个点
至此,如果按照此步骤搞下来,应该已经没有问题了,你可以本地commit代码,自动同步到项目了