检查是否已安装
rpm -qa subversion
如果要卸载旧版本:
yum remove subversion
1、yum install subversion
查看Svn版本
svnserve --version
2、建立版本库
subversion默认以/var/svn作为数据根目录,可以通过/etc/sysconfig/svnserve修改这个默认位置。
vim /etc/sysconfig/svnserve
文件内容
OPTIONS="-r /var/svn"
使用svnadmin建立版本库svntest。
mkdir -p /var/svn/svntest //递归创建多个目录
svnadmin create /var/svn/svntest
----------目录介绍
conf目录:主要是配置文件、登录用户、密码认证;
hooks目录:主要是svn的钩子脚本模板,使用时去掉.tmpl后缀即可,钩子脚本实际上就是代码提交前后,可以分别执行的脚本,脚本可用perl、shell、python等语言编写,该目录里面脚本文件名代表提交代码执行的不同时机,如提交代码前执行的脚本pre-commit,提交代码后执行的脚本post-commit,更多详情自行学习;
3、配置(所有配置需要顶格)
a、编辑用户文件passwd,新增两个用户:admin和guest。
vim conf/passwd
[users]
admin = admin
guest = guest
b、编辑权限文件authz,用户admin设置可读写权限,guest设置只读权限。
vim conf/authz
[/]
admin = rw
guest = r
c、编辑svnserve.conf:
vim conf/svnserve.conf
[general]
anon-access = none #控制非鉴权用户访问版本库的权限
auth-access = write #控制鉴权用户访问版本库的权限
password-db = passwd #指定用户名口令文件名
authz-db = authz #指定权限配置文件名
//realm = svntest #指定版本库的认证域,即在登录时提示的认证域名称 //测试不需要
---authz配置说明
其中,方括号内部分可有多种写法:
[/]:表示根目录及以下,根目录是svnserve启动时指定的,[/]表示对全部版本库设置权限;
[repos:/]:表示对版本库repos设置权限;
[repos:/sadoc]:表示对版本库repos中的sadoc项目设置权限;
[repos:/sadoc/oldboy]:表示对版本库repos中的sadoc项目的oldboy目录设置权限;
权限主体可以是用户、用户组或*,用户组在前面加@,*表示全部用户;
权限可以是w、r、wr和空,空表示没有任何权限;
authz中每个参数都要顶格写,开头不能有空格;
对于组,要以@开头,而用户不需要;
4. SVN服务
启动SVN服务。
systemctl start svnserve.service
检查服务是否启动成功。
ps aux | grep svn
通过netstat可以看到SVN打开了3690端口。
netstat -tnlp
设置成开机启动。
systemctl enable svnserve.service
客户端测试 svn://ip:3690/svntest(因为/etc/sysconfig/svnserve中已经指定/var/svn,所以不需要带这个目录前缀)
subversion可通过多种方式访问--本地磁盘服务,或各种各样不同的网络协议,但一个版本库地址永远都是一个url,url方案反映了访问方法;
1.file:// 直接版本库服务(本地磁盘或访问方法;
2. http:// 通过webdav协议服务支持subversion的apache服务器;
3.https:// 与http://相似,但是用ssl加密;
4.svn:// 通过未认证的tcp/ip自定义协议访问svnserve服务器;
5. svn+ssh:// 通过认证并加密的tcp/ip自定义协议访问svnserve服务器
注意:阿里云3690设置入口出口
二、
项目目录
mkdir -p /var/www
svn checkout svn://localhost/svntest
cd /var/svn/svntest/hooks
vim post-commit
只留下第一行 #!/bin/sh
在文件中写入
export LANG=en_US.UTF-8
SVN_PATH=/usr/bin
WEB_PATH=/var/www/svntest #这里是设置的网站目录,我们以之前安装的nginx下的默认根目录
SVN_USER=admin #设置的svn用户名
SVN_PASS=admin #密码
LOG_PATH=/tmp/svn.log
echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH/svn update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH
更改post-commit: 权限 chmod 777 post-commit
把版本库里的项目 在域名所在的目录中检出
svn checkout svn://locahost/svntest
三、svn客户端 执行命令 svn log 显示no author,no date的解决
/var/svn/svntest/conf/svnserve
把anon-access=read改为anon-access=none不需要重启Svnserve
svn switch --relocate 旧地址 新地址
svn switch --relocate svn://1x.1x.1x.1x/repo svn://2x.2x.2x.2x/repo