Linux 下搭建 svn 服务器

很多公司使用 svn 进行团队合作开发,这里记录在阿里云上搭建一个 svn 的过程。

首先运行环境如下:
服务端:CentOS 7 阿里云服务器
客户端:Windows 7

一、配置服务端

1. 安装 svn 服务
1
yum install subversion
2. 创建版本仓库目录

这里我在 /home 创建一个 svn 目录:

1
mkdir /home/svn
3. 使用 svn 命令创建版本仓库
1
svnadmin create /home/svn/project
4. 添加用户

svn 的用户在 passwd 文件里配置,以明文的形式存储。

1
sudo vi /home/svn/project/conf/passwd

在底部 [users] 下添加:

1
test = test

这样就创建了一个账号密码均为 test 的用户。
接下在 authz 文件里给这个用户配置权限

1
sudo vi /home/svn/project/conf/authz

在底部添加 [/] 如下:

1
2
3
[/]
test = rw # 赋予 test 读写权限
* = r # 赋予其它所有用户读权限

添加了用户和权限后,还要使其生效,修改 svnserve.conf 文件:

1
2
3
4
5
sudo vi /home/svn/project/conf/svnserve.conf
# 开启 anon-access 并建议把值改为 none ,禁止匿名访问
# 开启 auth-access
# 开启 password-db 它的默认值就是上面的 passwd 文件
# 开启 authz-db 它的默认值就是上面的 authz 文件
5. 启动服务
1
svnserve -d -r /home/svn

至此服务端配置完成,接下来是客户端的操作。

二、配置客户端

1. 安装 TortoiseSVN

考虑到实际开发中大多数人的习惯,推荐使用图形化界面工具 TortoiseSVN。
官网提供的中文语言包有严重的机翻痕迹,建议直接用英文版。
下载地址:https://tortoisesvn.net/downloads.html

2. 校验项目代码

在项目根目录空白处右击并选择 SVN Checkout...

1
2
3
4
5
6
7
8
9
# 在弹出的窗口 在 Url of repository 输入:
svn://[your_ip]/project
# 点击 ok
# 在弹出的窗口 在 Username 输入:
test
# 和 Password :
test
# 点击 ok
# 弹出 Checkout Finish! 连接成功
3. 提交项目代码

在项目根目录添加一个 index.html 供测试用。
在项目根目录空白处右击并选择 SVN Commit...

在弹出的窗口中:
Message 中填写你都干了些什么事;
Changes made 中勾选要提交的文件;
填完了点击 ok
弹出 Commit Finish! 提交成功

至此客户端连接成功,已经可以正常使用 svn 了。
接下来切回服务端,使用钩子让更改同步更新到 web 目录,这样就可以实现提交马上可见的效果。

三、配置 SVN hooks

1. 进入 hooks 目录
1
cd /home/svn/project/hooks

hooks 目录下有一个名为 post-commit.tmpl 的文件,显然是提供一个模板给用户看的。
可以看到实际上就是在这里写一些命令,以便 Commit 的时候调用执行。
忽略它,我们自己创建一个 post-commit 文件。

2. 创建 post-commit
1
2
vi post-commit
# 直接用 vi 就行了,如果不存在该文件,保存的时候 vi 会创建它

post-commit 里面加入配置:

1
2
3
4
5
#!/bin/sh
export LANG=en_US.UTF-8 # 这里根据系统语言配置即可
SVN=/usr/bin/svn # 这里配置 svn 可执行文件的绝对路径
WEB_PATH=/www/web/project/ # 这里配置 web 应用目录
$SVN update $WEB_PATH --username admin --password admin --no-auth-cache

保存文件,并更改 post-commit 的用户/用户组和权限,让它可以被执行:

1
2
chown www:www post-commit
chmod 755 post-commit
3. 校验项目代码

项目目录下先 Checkout 一次,后面才可以使用 update 命令:

1
svn checkout svn://127.0.0.1/project

至此钩子配置好了
现在只要在客户端提交一个版本,就会自动同步到 WEB_PATH 里