文章目录
0.什么是svn
Subversion如何运作
SVN最初被设计为命令行界面。这意味着您将打开终端并键入文本命令。
要使Subversion工作,SVN设置需要两个主要元素:
1.该服务器,它具有一切源文件的所有版本
2.一个文件的本地副本,这是您的计算机上。
您计算机上的文件称为工作文件。这些是每个用户进行编辑的文件。然后,用户将其更改提交到SVN服务器,该服务器也称为存储库。
每次用户提交更改时,SVN都会通过创建新版本来管理和记录它。与大多数版本控制系统一样,用户通常使用最新版本。但是如果需要旧版本,则可以恢复到早期版本。
什么是SVN服务器
SVN服务器包含所有源文件以及文件的所有版本。在SVN领域,服务器称为存储库。因此,SVN服务器和SVN存储库是一回事。
文件的本地副本(存储在您的计算机上)称为工作副本。
SVN是分布式还是集中式
版本控制系统大致可分为两类:分布式版本控制系统(DVCS)和集中式版本控制系统(CVCS)。
SVN是一个集中式版本控制系统
集中式版本控制系统意味着版本历史存储在中央服务器中。当开发人员想要对某些文件进行更改时,他们会将文件从该中央存储库拉到自己的计算机上。在开发人员进行更改后,他们会将更改的文件发送回中央存储库。
使用Helix Core进行可扩展的集中式版本控制系统。或者使用Helix4Git进行基于Git的分布式工作流程。
SVN面临的挑战
SVN有一个繁琐的分支模型
关于SVN最常见的抱怨是它繁琐的分支模型。分支允许您同时处理代码的多个版本。在SVN中,分支被创建为存储库中的目录。许多开发人员不喜欢这种目录结构。但挑战并不止于此。
SVN 1.6版引入了一个名为树冲突的概念。树冲突是由目录结构的变化引起的冲突,并且它们经常发生。由于SVN不允许您在发生树冲突时提交更改,因此这增加了在SVN中实施分支策略的复杂性。
SVN要求您手动解决冲突
合并是开发人员经常抱怨SVN的另一个大问题。如果您正在使用历史记录来进行一组更改并进行提交,则会进行另一项更改(即线性)并提交,合并将很容易。
当您有两个或更多开发人员在相同的代码库上工作并且您需要合并时,事情会变得复杂。在这种情况下,SVN失败,开发人员需要手动解决冲突,这会浪费数小时的开发人员时间。
为何使用SVN
几年前,Git和其他商业版控制系统已经超越了SVN。但SVN仍有两个原因:成本和惯性。
成本: SVN是开源的,这意味着它是“免费的”。
惯性:一旦构建了大型代码库,就很难切换VCS。SVN自2004年以来一直存在,采用它的组织拥有数百万行代码。
1.服务器规格
ip/主机名 | 规格 | 说明 |
---|---|---|
11.0.1.48/node3 | 1c2G50G | svn服务端 |
2.基础环境配置
# 关闭防火墙 和 selinux
3.svn服务端部署
yum部署svn
# rpm 安装 subversion
[root@node3 ~]# yum install -y subversion
版本验证
[root@node3 ~]# svnserve --version
svnserve, version 1.7.14 (r1542130)
compiled Sep 30 2020, 17:44:04
版本库创建
[root@node3 ~]# mkdir /opt/svn
[root@node3 ~]# cd /opt/svn/
[root@node3 svn]# svnadmin create csp
[root@node3 svn]# ll csp
total 8
drwxr-xr-x 2 root root 54 Mar 11 06:17 conf
drwxr-sr-x 6 root root 233 Mar 11 05:57 db
-r--r--r-- 1 root root 2 Mar 11 05:57 format
drwxr-xr-x 2 root root 231 Mar 11 05:57 hooks
drwxr-xr-x 2 root root 41 Mar 11 05:57 locks
-rw-r--r-- 1 root root 229 Mar 11 05:57 README.txt
# csp包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立
服务svnserve.conf配置
# 修改svnserve.conf 文件
[root@node3 svn]# vim conf/svnserve.conf
# 在general 下面➕
# 禁止匿名账号访问
anon-access = none
# 开启授权用户具有读写权限
auth-access = write
# 指定用户口令文件
password-db = passwd
# 指定权限配置文件
authz-db = authz
realm=/opt/svn 表示将/opt/svn目录做为SVN服务器的工作目录
# 以上语句都必须顶格写,左侧不能留空格,等号两侧一定要空格否则会出错
用户密码passwd配置
# 修改passwd文件
[root@node3 svn]#vim conf/passwd
[users]
csp = csp
# 以上语句都必须顶格写,左侧不能留空格,等号两侧一定要空格否则会出错
权限控制authz配置
[root@node3 svn]#vim conf/authz
[aliases]
[groups]
[/]
csp = rw
# 以上语句都必须顶格写,左侧不能留空格,等号两侧一定要空格否则会出错
启动svn
[root@node3 conf]# svnserve -d -r /opt/svn
# 查看 svn进程
[root@node3 conf]# ps -ef |grep svn
root 1676 1 0 06:19 ? 00:00:00 svnserve -d -r /opt/svn
root 1678 1458 0 06:19 pts/0 00:00:00 grep --color=auto svn
# 查看 svn 服务端口
[root@node3 conf]# ss -tunlp|grep svn
tcp LISTEN 0 7 *:3690 *:* users:(("svnserve",pid=1676,fd=3))
停止重启SVN
[root@node3 csp]# ps -ef |grep svn
root 1676 1 0 06:19 ? 00:00:00 svnserve -d -r /opt/svn
root 11662 1458 0 07:24 pts/0 00:00:00 grep --color=auto svn
# kill svn 进程
[root@node3 csp]# kill -9 1676
[root@node3 csp]# ps -ef |grep svn
root 11664 1458 0 07:25 pts/0 00:00:00 grep --color=auto svn
设置svn服务开机自启
[root@node3 ~]# vi /etc/sysconfig/svnserve
# OPTIONS="-r /opt/svn"
# 将OPTIONS里的值改为当前服务器上svn 版本库的目录
# svn 服务开机自启
[root@node3 ~]# systemctl enable svnserve --now
# 重启服务 验证 svn 是否 开机自启
4.svn客户端 安装和使用
svn客户端安装
在Windows常用的客户端为TortoiseSVN,下载地址Downloads · TortoiseSVN,根据电脑情况选择相应的安装包。
svn客户端使用
在本地新建一个文件夹(假设为project)用于存放下载的文件
右键点击该文件夹,会出现如下窗口,点SVN Checkout
可以当前目录看到svntest 目录
创建test.md 文件 输入 svn test文件 然后上传 到 svn 服务上
svn://11.0.1.48:3690/csp