一、安装SVN服务器

1 安装svn

sudo apt-get install subversion(root用户可以去掉sudo)

2 创建目录

cd /srv sudo mkdir svn cd svn sudo mkdir tone_src #svn的版本仓库存放目录

3 创建版本仓库

当前位置在/srv/svn/tone_src sudo svnadmin create /srv/svn/tone_src 执行之后tone_srv下文件结构如下:

Ubuntu 搭建SVN服务器 - 图1

4 配置

我们需要修改conf目录下的三个文件,authz,passwd,svnserve.conf

(1)编辑svnserve.conf

[general]
#匿名用户不可读
anon-access = none
#权限用户可写
auth-access = write
#密码文件为passwd
password-db = passwd
#权限文件为authz
authz-db = authz

(2)编辑authz

[groups]
admin= mysmaile #admin组的用户为tone [/] #必须写/,因为这表示从仓库的目录开始设置权限
@admin =rw #admin组有rw(读写权限),所有人有r(读权限)
*=r 注释:这里组的名字不一定叫admin,组的名字可以任务,admin组有多个用户的话,可以这样制定admin=tone,tone1,tone2等。

(3)编辑passwd文件,设定用户密码

[users]
# harry = harryssecret
# sally = sallyssecret
mysmaile=Mys862394 #设定用户tone的密码是www,是的没错,密码是明文的。

5 启动SVN服务器

sudo svnserve -d -r /srv/svn #启动服务器 -d 已守护模式启动 -r 指定svn版本库根目录,这样是便于客户端不用输入全路径,就可以访问版本库了。 例如:svn://ip:port/tone_src

6 验证svn功能及使用方法

由于我们只搭建了SVN服务器,所以在外网访问时只能通过SVN协议访问仓库内容。 也就是svn://ip:port/repository (1)如果你想通过浏览器访问,也就是http/https协议进行访问,那么你需要再安装apache服务器,然后把svn当做apache服务器的模块去运行,那时候就可以利用http://ip:port/repository的方法去访问了。

SVN的“Invalid authz configuration”错误的解决方法

在修改配置文件(authz)后,客户端可能会报“Invalid authz configuration”的错误提示!

客户端没有提示错误原因,但在服务器端有一个方法,可以检查配置文件(authz)错在了哪里;

具体方法如下:

svnauthz-validate /data/svn/LQPLAY/conf/authz

它查出了是配置文件(authz)的第167行,出现了错误。

svnauthz-validate: /data/svn/LQPLAY/conf/authz: 167: Option must end with ‘:’ or ‘=’

然后,可以用如下命令,编辑它并保存:

root@server:~# vi /data/svn/LQPLAY/conf/authz

Shift+: set number (显示行号)

Shift+: 167 (直接跳转到167行)

我发现是本该写为(gaojs = rw),不小心写成了(gaojs - rw)。

字母键(I-Insert),从浏览模式,切换到插入模式;

(Shift+:, 从浏览模式,切换到底行命令模式)

(Esc,从其他模式,退出到浏览模式)

修改后保存退出!

Shift+: wq (Write & Quit)

查看SVN的目录在哪里?

whereis svn

svn: /usr/bin/svn /usr/bin/X11/svn /usr/share/man/man1/svn.1.gz

查看SVN的进程是哪些?

ps aux | grep svn

root 1527 0.0 0.0 69640 1092 ? Ss 10:53 0:00 svnserve -d -r /data/svn/LQPLAY

root 5144 0.0 0.0 13592 936 pts/2 S+ 11:58 0:00 grep —color=auto svn

启动SVN的服务(-d:Deamon; -r:Root)

svnserve -d -r /home/svn

查看SVN的服务是否正常(端口号3690是否存在)

netstat -ntlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1527/svnserve

7、同步更新 [勾子]

同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。

知识点:

1、SVN的hooks

start-commit 提交前触发事务

pre-commit 提交完成前触发事务

post-commit 提交完成时触发事务

pre-revprop-change 版本属性修改前触发事务

post-revprop-change 版本属性修改后触发事务

通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。

2、同步命令rsync的具体参数使用

3、具有基个语言的编程能力bash python perl都可以实现

post-commit脚本

编辑文件:sudo vim /home/xiaozhe/svn/mypro/hooks/post-commit

注意:编辑完成post-commit后,执行:

sudo chmod 755 post-commit

内容:

!/bin/sh

REPOS=”$1”

REV=”$2”

export LANG=en_US.UTF-8

export LANG=”zh_CN”

SVN_PATH=/usr/bin

WEB_PATH=/var

SVN_USER=mysmaile

SVN_PASS=Mys862394

LOG_PATH=/tmp/svn.log

echo date "+%Y-%m-%d %H:%M:%S" >> $LOG_PATH

echo whoami,$REPOS,$REV >> $LOG_PATH

sudo svn update $WEB_PATH —username $SVN_USER —password $SVN_PASS —no-auth-cache >> $LOG_PATH

sudo svn update /var/www —username mysmaile —password Mys862394 —no-auth-cache >> $LOG_PATH

sudo svn co svn://localhost/ /var/www —username $SVN_USER —password $SVN_PASS

sudo svn co svn://localhost/ /var/www —username mysmaile —password Mys862394

exit 0

备注:创建钩子文件后,需要重启svn服务。

停止服务器 killall svnserve

sudo svnserve -d -r /var/svn

利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。

svn不支持中文路径问题的解决

LANG=”en_US”时,如果服务器上的文件名中包含中文,则check out失败 解决方法 export LANG=”zh_CN” svn的授权文件authz默认是不支持中文路径的,因此在精确控制中文文件夹的授权时往往会出错。要解决这个问题,需要用UltraEdit(注意不要用记事本或写字板)把authz打开,然后另存在为UTF-8 -无BOM,如下图:

Ubuntu 搭建SVN服务器 - 图2

然后把另存在的authz文件覆盖原有的authz文件。 用记事本或写字板打开authz文件后另存为utf8编码的文件的话,文件开头会有windows特有的unicode标记——ef bb bf,而这三个字节是svn所不能识别的。所以不能用记事本或写字板打开authz文件另存。

以后要编辑authz文件也需要用UltraEdit进行编辑和保存,用记事本或写字板编辑后保存也会自动带上windows特有的unicode标记。[

](https://blog.csdn.net/andybegin/article/details/8724524)