在软件开发与团队协作中,版本控制是保障项目稳定性与可追溯性的核心工具。SVN(Subversion)作为一款开源的集中式版本控制系统,凭借其高效的版本管理、分支策略及权限控制能力,成为众多团队的选择。通过创建 SVN 仓库,开发者能够集中存储代码、文档及资源,实现历史版本回溯、协同开发与风险管控。
本文将详细介绍 SVN 仓库的创建方法,从客户端安装、服务器配置到用户权限设置,逐步演示操作步骤。
1.安装svn
apt install subversion
yum install subversion
查看svn安装版本,验证是否安装成功,若显示类似“svn,版本 1.9.7 (r1800392)
”表示安装成功
svnserve --version
2.创建仓库
创建文件夹“svn
”(可以自己取名),用于保存各代码仓库,我建在“/root/svn
”
mkdir /root/svn
创建仓库,可以在root/svn下面创建多个仓库,方便启动服务时直接启一个root/svn总服务,而不是一个个启动,方便管理(后面演示)。这里我创建3个仓库 test1、test2、test3
svnadmin create /root/svn/test1
svnadmin create /root/svn/test2
svnadmin create /root/svn/test3
查看新建仓库。在仓库”./test1/conf
“下有“authz
”、”passwd
“和”svnserve.conf
” 3个配置文件分别表示:权限配置文件、用户名口令配置文件、svn服务配置文件
[root@localhost svn]$ cd /root/svn
[root@localhost svn]$ ls
test1 test2 test3
[root@localhost svn]$ cd test1
[root@localhost svn]$ ls
conf db format hooks locks README.txt
[root@localhost svn]$ cd conf
[root@localhost svn]$ ls
authz hooks-env.tmpl passwd svnserve.conf
3.配置SVN
这一步主要是配置上一步生成的“authz
”、”passwd
“和”svnserve.conf
” 3个配置文件;将所有的仓库都执行一遍以下3步:
一、配置“authz”
[groups]
下是用户分组,可以有多个组,我这里分组”admin
“下有一个”robin
“用户;”@admin = rw
“表示拥有读写权限,”* =
“表示其他用户没有权限访问。
![图片[1]-SVN创建仓库-阿尔法欧欧](/robingo/%E6%96%87%E7%AB%A0%E8%B5%84%E6%BA%90/2023_06/SVN%E5%88%9B%E5%BB%BA%E4%BB%93%E5%BA%93/29c42c2f1976ead5dc70768125eac81e.png)
二、配置”passwd”
“[users]
“下对应用户名和密码,我这里用户名”robin
“对应密码是”123456
“,你可以自己设置
![图片[2]-SVN创建仓库-阿尔法欧欧](/robingo/%E6%96%87%E7%AB%A0%E8%B5%84%E6%BA%90/2023_06/SVN%E5%88%9B%E5%BB%BA%E4%BB%93%E5%BA%93/4365610e1118ccbc9ded4dd123de2dc6.png)
三、配置”svnserve.conf”
“[general]
“下有”anon-access
“(非鉴权用户访问库的权限)、”auth-access
“(鉴权用户访问库的权限)、”password-db
“(指定用户名口令文件名)、”authz-db
“(指定权限配置文件名)、”realm
” (指定版本库的认证域),将这5处的注释”#
“去掉,注意前面不要留空格,前4处无需修改,最后一处”realm
“后面改成自己的仓库名
![图片[3]-SVN创建仓库-阿尔法欧欧](/robingo/%E6%96%87%E7%AB%A0%E8%B5%84%E6%BA%90/2023_06/SVN%E5%88%9B%E5%BB%BA%E4%BB%93%E5%BA%93/3a32789a5b4dd2ed986d684f09ee892a.png)
4.启动SVN
(推荐)前面提到过将多个仓库放在同一个文件夹的好处,可以只启动一个服务管理多个仓库
svnserve -d -r /root/svn
(不推荐)也可以启动多个服务分别对应一个仓库,依次启动test1、test2、test3三个库的服务,若端口冲突则指定不同端口号
svnserve -d -r /root/svn/test1
svnserve -d -r /root/svn/test2
svnserve -d -r /root/svn/test3
启动服务可以指定端口(默认:3690)
svnserve -d -r /root/svn/test2 --listen-port 52020
服务启动后可以通过命令”netstat -antple | grep svn
“查看服务状态
[root@localhost svn]$ netstat -antple | grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1000 2187961 23320/svnserve
若启动服务过程中报错”svnserve: E000098: 不能绑定服务器套接字: 地址已在使用”或”svnserve: Can’t bind server socket: Address already in use”,表示端口被占用,svn默认使用端口为3690,”netstat -antple | grep 3690″查看使用3690端口的服务ID,然后调用命令将其干掉
[root@localhost svn]$ netstat -antple | grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1000 2208076 52013/svnserve
[root@localhost svn]$ kill 52013
设置开机自启svnserve服务:
vim /lib/systemd/system/svnserve.service
# 编辑下面文件中的“ExecStart”字段
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve -d $OPTIONS
[Install]
WantedBy=multi-user.target
vim /etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve.
# Specify the repository location in -r parameter:
OPTIONS="-r /root/svn" # 设置成自己仓库的路径,建议使用绝对路径
5.导入版本库
前面4步在svn服务器上执行完成后,接下来在本机(客户端)执行导入和检出
新建的仓库中什么也没有,这时候拉取下来则是空文件夹,我们可以向仓库中导入我们的项目
将本地文件夹”/home/robin/project/test1″导入仓库所在服务器”129.201.314.200″
svn import /home/robin/project/test1 svn://129.201.314.200/test1 -m "new project" --username=robin
可以指定svn服务的端口号(默认是3690)
svn import /home/robin/project/test2 svn://129.201.314.200:52020/test2 -m "new project" --username=robin
报错”svn:E170001:Authorization failed
“,Subversion
里面并没有找到相关账号信息,输入以下命令清除已经保存的错误账号信息,连接时重新输入密码;若仍然报错,则检查“authz
”配置文件
rm -rf ~/.subversion/auth
如果遇到以下报错,检查ip地址和端口号是否正确,查看服务器上svn服务是否已经启动,检查仓库”conf”文件下3个配置文件是否正确,修改以上错误重启svn服务。若仍然报错,则可能是访问不到svn服务器所在网络和端口,你的svn服务器和主机可能不在一个局域网内,需要做ip和端口映射,将内网ip端口映射到外网ip端口,我遇到这个错误时,做了ip端口映射:128.116.72.218:36900->129.201.314.200:3690/tcp
,错误就解决了,访问这个地址即可:128.116.72.218:36900
。
svn: E170013: Unable to connect to a repository at URL 'svn://129.201.314.200/test1'
svn: E000111: 无法连接主机“129.201.314.200”: 拒绝连接
若发现项目上传到仓库时某些文件无法上传(被忽略),比如我上传时就有一个文件无法上传:
![图片[4]-SVN创建仓库-阿尔法欧欧](/robingo/%E6%96%87%E7%AB%A0%E8%B5%84%E6%BA%90/2023_06/SVN%E5%88%9B%E5%BB%BA%E4%BB%93%E5%BA%93/5975e2994966931d9db4e905691dbac2.png)
原因是linux 下svn 忽略某类文件和目录,我们修改其配置文件
vim ~/.subversion/config
找到包含 “global-ignores
” 的那一行,去掉被忽略的文件格式
![图片[5]-SVN创建仓库-阿尔法欧欧](/robingo/%E6%96%87%E7%AB%A0%E8%B5%84%E6%BA%90/2023_06/SVN%E5%88%9B%E5%BB%BA%E4%BB%93%E5%BA%93/5ab441051e8a9267e194ebfdda79d9cb.png)
6.检出
命令格式:svn checkout http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
其中”checkout
“可以简写为”co
“
svn checkout svn://128.116.72.218:36900/test1 /home/robin/project_test --username robin
2、文章版权归作者所有,未经允许请勿转载
3、本站资源定期维护,如发现链接失效,请与作者联系
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理
暂无评论内容