在Linux系统中创建Subversion(SVN)服务器是一个常见的需求,主要用于版本控制和团队协作,以下是详细的步骤和说明,帮助您完成SVN服务器的搭建。

安装SVN服务
需要在Linux服务器上安装SVN服务,以CentOS系统为例,可以使用yum命令进行安装,执行以下命令:
sudo yum install subversion -y
安装完成后,可以通过以下命令检查SVN版本,确认安装是否成功:
svnserve --version
如果显示版本信息,则表示安装成功,对于Ubuntu或Debian系统,可以使用apt-get命令安装:
sudo apt-get update sudo apt-get install subversion -y
创建SVN仓库
SVN仓库是存储版本控制数据的地方,建议在/opt或/home目录下创建一个名为svn的目录,用于存放所有仓库,执行以下命令:

sudo mkdir -p /opt/svn
然后使用svnadmin命令创建一个新的仓库,例如创建一个名为project1的仓库:
sudo svnadmin create /opt/svn/project1
创建完成后,进入仓库目录,可以看到以下文件和文件夹:
- conf:存放配置文件的目录。
- db:存放仓库数据的目录。
- hooks:存放钩子脚本的目录。
- locks:存放锁定信息的目录。
- format:仓库格式文件。
配置仓库访问权限
进入仓库的conf目录,可以看到三个配置文件:svnserve.conf、passwd和authz,这些文件分别用于配置SVN服务、用户密码和权限控制。
配置svnserve.conf
编辑svnserve.conf文件,取消以下行的注释并修改:
sudo vim /opt/svn/project1/conf/svnserve.conf ```如下:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限控制文件路径 realm = My SVN Repository # 认证域名称,可自定义
注意:配置文件中的每个节和键值对前不能有空格,否则可能导致配置无效。
#### 2. 配置passwd
编辑passwd文件,添加或修改用户及其密码:
```bash
sudo vim /opt/svn/project1/conf/passwd
```如下:
[users] user1 = password1 user2 = password2
这里添加了两个用户:user1和user2,密码分别为password1和password2。
#### 3. 配置authz
编辑authz文件,设置用户和组的访问权限:
```bash
sudo vim /opt/svn/project1/conf/authz
```如下:
[groups] admin = user1 developer = user1,user2
[/] @admin = rw
- = r
[/project1/trunk] @developer = rw
说明:
- [groups]:定义用户组,admin组包含user1,developer组包含user1和user2。
- [/]:仓库根目录的权限,admin组有读写权限,其他用户只有读权限。
- [/project1/trunk]:trunk目录的权限,developer组有读写权限。
### 启动SVN服务
配置完成后,需要启动SVN服务,可以使用svnserve命令,指定仓库根目录、监听端口和认证域:
```bash
sudo svnserve -d -r /opt/svn --listen-port 3690
参数说明:
- -d:以守护进程模式运行。
- -r:指定仓库根目录,客户端访问时不需要输入完整路径。
- --listen-port:指定监听端口,默认为3690。
启动后,可以通过以下命令检查SVN服务是否运行:
ps aux | grep svnserve
如果显示svnserve进程,则表示服务启动成功。
防火墙配置
如果服务器开启了防火墙,需要开放SVN服务的端口(默认为3690),以CentOS为例,执行以下命令:
sudo firewall-cmd --permanent --add-port=3690/tcp sudo firewall-cmd --reload
对于Ubuntu系统,可以使用ufw命令:
sudo ufw allow 3690/tcp
客户端连接测试
在客户端机器上,可以使用TortoiseSVN(Windows)或svn命令(Linux)连接SVN服务器,以svn命令为例,执行以下命令:
svn co svn://服务器IP:3690/project1
输入用户名和密码后,如果成功下载仓库内容,则表示SVN服务器搭建成功。
多仓库配置
如果需要创建多个仓库,可以重复上述“创建SVN仓库”和“配置仓库访问权限”的步骤,启动SVN服务时,仍然使用相同的命令,因为-r参数已经指定了仓库根目录,所有仓库都会被自动加载。
服务开机自启动
为了确保SVN服务在服务器重启后自动启动,可以创建一个systemd服务文件,执行以下命令:
sudo vim /etc/systemd/system/svnserve.service ```如下:
[Unit] Description=Subversion protocol daemon After=network.target
[Service] Type=forking User=root Group=root ExecStart=/usr/bin/svnserve -d -r /opt/svn --listen-port 3690
[Install] WantedBy=multi-user.target
然后执行以下命令启用并启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable svnserve
sudo systemctl start svnserve
常见问题及解决方法
-
问题:客户端连接时提示“Could not connect to the server”。 解决:检查SVN服务是否启动,防火墙是否开放3690端口,以及服务器IP是否正确。
-
问题:客户端连接时提示“Authorization failed”。 解决:检查svnserve.conf、passwd和authz文件的配置是否正确,特别是用户名和密码是否匹配,权限设置是否正确。
相关问答FAQs
问题1:如何修改SVN仓库的密码?
解答:进入仓库的conf目录,编辑passwd文件,找到对应用户,修改其密码即可,修改user1的密码为newpassword,将passwd文件中的行改为user1 = newpassword,保存文件后,新密码即可生效。
问题2:如何备份SVN仓库?
解答:可以使用svnadmin hotcopy命令创建仓库的热备份,确保数据一致性,备份project1仓库到/opt/svn_backup/project1,执行以下命令:
sudo svnadmin hotcopy /opt/svn/project1 /opt/svn_backup/project1
还可以定期使用svnadmin dump命令创建仓库的转储文件,用于长期备份:
sudo svnadmin dump /opt/svn/project1 > /opt/svn_backup/project1.dump
