作者简介:一名Linux运维工程师,主要分享自己遇到的学习过程与遇到的问题。
认识SVN
SVN的全称是Subversion,即版本控制系统。它是最流行的一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(Repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。
SVN采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。
SVN的客户端有两类,一类是基于Web的WebSVN等,另一类是以Tortoise SVN为代表的客户端软件。前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。SVN存储版本数据也两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。优势
1.存储
SVN服务器既具有CVS所具有数据储存的优点,像是信息资源存储后会形成资源树结构,便于存储的同时,数据一般不会丢失,同时又拥有自己的特色。SVN是通过关系数据库及二进制的存储方式,同时解决了既往不能同时读写同一文件等问题,同时增添了自己特有的“零或一”原则。
2.速度
与人们初始的CVS相比,SVN在速度运行方面有很大提升。因为SVN服务器只支持少量的信息、资源传输,与其他系统相比,更支持的是离线模式,因此避免了网络拥挤现象的出现。
3.安全性
SVN是一种技术性更加安全的产品,实现了系统和控制两方面的结合。一方面可以将系统整体的安全功能有效地分布在分支系统中,进而保证分支系统能正常运行,从而使各分支系统能够互补,最终在系统整体性的安全性得以保障,通过均衡原则实现最终追求安全的目的。
环境要求
SVN与CVS一样,也是一个跨平台的软件,支持大多数常见的操作系统。例如Windows,Linux等。
本文主要是用Linux做搭建环境。搭建过程
OS:CentOS Linux release 7.9.2009 (Core)
docker:Docker version 19.03.14, build 5eb3275
如果不清楚如何安装docker,可查看 直达链接查找svn镜像
[root@localhost ~]# docker search svn NAME DESCRIPTION STARS OFFICIAL AUTOMATED garethflowers/svn-server A simple Subversion server, using `svnserve`. 81 [OK] elleflorio/svn-server Lightweight Docker container running an SVN … 76 krisdavison/svn-server A pre-configured SVN source control server. 28 svnedge/app SVN Edge Official Release Image 20 paulovsm/svn-server Subversion + Apache + SVNAdmin 10 nbrun/svn-client Old SVN clients to work with old svn reposit… 5 ryandocker/svn2git Docker wrapper around the svn2git tool. 4 atlassian/fisheye Fisheye: search, monitor, and track across S… 4 jgsqware/svn-client A Simple SVN client based on Alpine 3 [OK] polinux/svn2git svn2git in a docekr (Alpine) 2 [OK] aneesv/svn-client Svn Client 2 [OK] yodamad/svn2git Tool to help migration from SVN to Gitlab 2 ksaito1125/svn-resource-type concourseのresource-typeです。 Subversionリ… 1 [OK] vertigo/svn2git A minimalist container to use the (awesome) … 1 [OK] svnovikov/test 0 svnedge/devbuild SVN Edge Development Build 0 takanomasaki/svn-resource 0 timimages/svn 0 svnbadrinath/hello_world 0 marouen13/svn-mar an svn image 0 0urob0r0s/svndaemon Container agent for a simple, repo-based con… 0 yukinagae/svn-to-git 0 [OK] crazymax/svn2git-mirror Mirror SVN repositories to Git periodically 0 kurento/svn-client 0 cycletime/svn-test SVN Server with Test Data
下载 garethflowers/svn-server
[root@localhost ~]# docker pull docker.io/garethflowers/svn-server Using default tag: latest latest: Pulling from garethflowers/svn-server 2408cc74d12b: Pull complete f454a8fbcebf: Pull complete 3c76ba5eee8a: Pull complete Digest: sha256:e97746b18bf7eddbfc5024221212ceb18436addc59adc711a3b13f29fe0dce2a Status: Downloaded newer image for garethflowers/svn-server:latest docker.io/garethflowers/svn-server:latest
查看images
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE garethflowers/svn-server latest 2a8481254cd2 6 months ago 14.7MB
启动容器
#先创建宿主机的数据存储目录 [root@localhost ~]# mkdir /usr/local/data docker run --restart always --name svn -d -v /usr/local/dev/svn/repo:/var/opt/svn -p 3690:3690 garethflowers/svn-server #启动容器 [root@localhost ~]# docker run --restart always --name svn -d -v /usr/local/data/:/var/opt/svn -p 3690:3690 garethflowers/svn-server 8a9304411bf397bcadcbf965eace9ab3db7636480d7f83a87e3ae838e5b4e68f
--restart always
:代表自启动--name svn
:代表容器名是svn-d
:后台启动-v /usr/local/data/:/var/opt/svn
:挂载数据目录-p 3690:3690
:将容器内部3690映射到宿主机3690查看容器
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a9304411bf3 garethflowers/svn-server "/usr/bin/svnserve -…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:3690->3690/tcp svn
进入容器内部,进行相关配置
登录容器
[root@localhost ~]# docker exec -it svn sh
创建名为test的svn资源仓库
/var/opt/svn # svnadmin create test
查看目录结构
/var/opt/svn/test # ls /var/opt/svn/test/ README.txt conf db format hooks locks
配置修改
进入刚刚创建的test资源仓库
/var/opt/svn # cd /var/opt/svn/test/conf /var/opt/svn/test/conf #
基础配置修改
/var/opt/svn/test/conf # vi svnserve.conf /var/opt/svn/test/conf # cat svnserve.conf |grep -rn -v ^# 19:anon-access = none 20:auth-access = write 27:password-db = passwd 36:authz-db = authz 52:realm = test #配置详解 anon-access = none # 匿名用户不可读写,也可设置为只读 read auth-access = write # 授权用户可写 password-db = passwd # 密码文件路径,相对于当前目录 authz-db = authz # 访问控制文件 realm = /var/opt/svn/test # 认证命名空间,会在认证提示界面显示,并作为凭证缓存的关键字,可以写仓库名称比如test
权限文件修改
密码文件修改
/var/opt/svn/test/conf # vi passwd [users] # harry = harryssecret # sally = sallyssecret admin = test123456
鉴权文件修改
/var/opt/svn/test/conf # vi authz [groups] admin = admin #前面是用户组admin,=后面的为用户admin [test:/] @admin = rw #表示对test根目录有读写权限 [test:/test1] @admin = rw #表示对test目录下的test1有读写权限
重启容器
/var/opt/svn/test # exit [root@localhost ~]# docker restart svn svn
安装客户端测试
Windows验证
tortoisesvn官网:https://tortoisesvn.net/downloads.html
自定义文件路径
输入设置的账号密码
Liunx验证
安装svn工具
[root@localhost ~]# yum -y install svn
查看资源仓库
[root@localhost ~]# svn checkout svn://192.168.6.231:3690/test/test1 Authentication realm: <svn://192.168.6.231:3690> test Password for 'root': Authentication realm: <svn://192.168.6.231:3690> test Username: admin Password for 'admin': ----------------------------------------------------------------------- ATTENTION! Your password for authentication realm: <svn://192.168.6.231:3690> test can only be stored to disk unencrypted! You are advised to configure your system so that Subversion can store passwords encrypted, if possible. See the documentation for details. You can avoid future appearances of this warning by setting the value of the 'store-plaintext-passwords' option to either 'yes' or 'no' in '/root/.subversion/servers'. ----------------------------------------------------------------------- Store password unencrypted (yes/no)? yes Checked out revision 1.
码字不易。如果文章对您有希望的话,请三连支持一波。
如有问题,欢迎留言,一起探讨,感谢。
也可关注早九晚十二微信公众号,看到留言后会第一时间回复。