SVN的首个公开版本是在2004年发布的1.0版本,由于其易于使用,强大的功能以及良好的跨平台支持,Subversion迅速被广泛使用。
SVN的主要特点包括:
文件锁定:SVN支持文件锁定,以避免多人编辑同一文件时产生的冲突。
分支和标签:支持有效地管理项目的分支和标签。
历史版本管理:可以追溯历史版本,并检出任意历史版本。
原子提交:提交操作要么全部成功,要么全部失败,保证数据的完整性。
网络透明性:SVN支持多种访问协议,包括本地文件系统、http/https、svn和file。
Subversion与CVS相比,添加了很多重要特性:
原子提交:SVN的提交是原子性的,而CVS的提交可能会被分割成多个部分,这在操作中断时可能导致不一致的仓库状态。
文件锁定:SVN有文件锁定功能,而CVS没有,这有助于避免多人同时编辑同一文件时的冲突。
效率:SVN使用更有效的数据传输和传输机制,特别是在处理大文件和大型项目时。
Subversion在某些方面可能不具备Git的分布式特性和灵活性,但是它的简单和成熟性使得很多组织仍然继续使用它。
Subversion的基本术语和工作原理:
基本术语解释:仓库、工作副本、版本号等。
仓库Repository:仓库是SVN中存储所有项目历史数据的地方。它包含了所有文件和目录的历史版本,以及他们之间变化的记录。
工作副本:工作副本是检出仓库中项目版本到本地磁盘上的副本。开发者在此副本上进行开发工作。
版本号:每个提交到仓库的更改都会被分配一个版本号。版本号是一个逐渐递增的整数,可以用来标识项目历史中的特定点。
修订集:修订集是指定范围内的多个版本号,可以用来执行操作,如查看多个版本之间的差异。
Subversion的工作原理:
Subversion使用的是集中式的工作模型。在这个模型中,所有的版本控制活动都围绕着一个集中的仓库进行。仓库包含了项目的主历史版本,而开发者在本地的工作副本中进行更改和提交。
工作流程通常如下:
1、检出Checkout: 用户从仓库respository检出文件到本地工作副本。
2、编辑Edit:在本地副本上进行文件编辑和修改。
3、 状态检查Status:用户可以检查本地副本的状态,了解哪些文件被修改了。
4、 提交Commit:修改后,用户可以将更改提交回仓库。SVN会检查是否有冲突,并且在没有冲突的情况下将更改保存为新的版本号。
5、 更新Update:在提交之前,用户可以更新他们的本地副本,以包含其他用户所做的更改。
6、解决冲突Resolve Conficts:如果两个用户同时修改了同一个文件,并且冲突无法自动解决,SVN会标识这些文件,需要用户手动解决冲突。

[root@svnserve ~]# yum install -y subversion[root@svnserve ~]# svnserve --versionsvnserve, version 1.7.14 (r1542130)compiled Sep 30 2020, 17:44:04Copyright (C) 2013 The Apache Software Foundation.This software consists of contributions made by many people; see the NOTICEfile for more information.Subversion is open source software, see http://subversion.apache.org/The following repository back-end (FS) modules are available:* fs_base : Module for working with a Berkeley DB repository.* fs_fs : Module for working with a plain file (FSFS) repository.Cyrus SASL authentication is available.
[root@svnserve ~]# yum install -y httpd -y[root@svnserve ~]# httpd -versionServer version: Apache/2.4.6 (CentOS)Server built: May 30 2023 14:01:11
[root@svnserve ~]# yum install -y mod_dav_svn[root@svnserve ~]# cd /var/svn[root@svnserve svn]# svnadmin create /var/svn/svnrepos/
[root@svnserve svn]# chown -R apache:apache /var/svn/svnrepos[root@svnserve svn]# cd svnrepos[root@svnserve svnrepos]# lltotal 8drwxr-xr-x. 2 apache apache 54 Mar 12 14:47 confdrwxr-sr-x. 6 apache apache 233 Mar 12 14:47 db-r--r--r--. 1 apache apache 2 Mar 12 14:47 formatdrwxr-xr-x. 2 apache apache 231 Mar 12 14:47 hooksdrwxr-xr-x. 2 apache apache 41 Mar 12 14:47 locks-rw-r--r--. 1 apache apache 229 Mar 12 14:47 README.txt
[root@svnserve svnrepos]# htpasswd -c /var/svn/svnrepos/conf/passwd user1New password:Re-type new password:Adding password for user user1
[root@svnserve svnrepos]# htpasswd /var/svn/svnrepos/conf/passwd user2New password:Re-type new password:Adding password for user user2
[root@svnserve svnrepos]# lltotal 8drwxr-xr-x. 2 apache apache 54 Mar 12 14:47 confdrwxr-sr-x. 6 apache apache 233 Mar 12 14:47 db-r--r--r--. 1 apache apache 2 Mar 12 14:47 formatdrwxr-xr-x. 2 apache apache 231 Mar 12 14:47 hooksdrwxr-xr-x. 2 apache apache 41 Mar 12 14:47 locks-rw-r--r--. 1 apache apache 229 Mar 12 14:47 README.txt[root@svnserve svnrepos]# cd conf
vim authz[/]user1 = rw

vim svnserve.conf
[root@svnserve conf]# svnserve -d -r /var/svn/svnrepos/svnserve: E000098: Can't bind server socket: Address already in use[root@svnserve conf]# ps aux |grep svnserve
[root@svnserve ~]# vim /etc/httpd/conf.d/subversion.conf<Location /svn>DAV svnSVNPath /var/svn/svnreposAuthType BasicAuthName "Authorization SVN"AuthzSVNAccessFile /var/svn/svnrepos/conf/authzAuthUserFile /var/svn/svnrepos/conf/passwdRequire valid-user</Location>
[root@svnserve ~]# systemctl start httpd.service[root@svnserve ~]# systemctl enable httpd.serviceCreated symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.



















