目录

一、svn简介

二、常见的版本控制软件

三、svn 的运行方式

四、SVN存储版本数据的方式

五、svn工作流程

1、SVN+Apache运行原理

六、服务搭建

七、本机使用SVN

 八、SVN客户端安装使用说明

1、svn图标代表含义

九、总结


前言:SVN 是最流行的版本管理软件之一,可以为源码或者文档记录每次的修改记录,是开发团队协作必备的工具。我们将讲解如何使用Apache来搭建SVN服务端,Linux服务器我们使用CentOS 7为例。

apache+svn实现http访问svn资源

一、svn简介

SVN 是最流行的版本管理软件之一,可以为源码或者文档记录每次的修改记录,是开发团队协作必备的工具。svn是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。如何使用Apache来搭建SVN服务端,Linux服务器我们使用CentOS 7为例.

二、常见的版本控制软件

 Cvs  由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS

 Svn  集中式版本控制器

 git  分布式版本控制器

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds (林纳斯·托瓦兹)为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

GitLab版本管理
GitLab是利用 Ruby on Rails 一个开源的版本管理系统,
实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。
可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。
团队成员可以利用内置的简单聊天程序(Wall)进行交流。
它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找

三、svn 的运行方式

模式1:svn单独运行   监听: 3690端口    访问: svn://IP

模式2: svn +  apache  监听: 80 端口  访问: http://IP       

#两种方式各有利弊,可以自行选择

四、SVN存储版本数据的方式

BDB(一种事务安全型表类型)

FSFS  (一种不需要数据库的存储系统)。

因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点

五、svn工作流程

集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的

举例:

开发开始新一天的工作
1、从服务器下载项目组最新代码。
2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码
(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

这就是经典的svn工作流程

1、SVN+Apache运行原理

SVN搭配Apache的时候,Apache需要使用mod_dav_svn这个模块

运行机制:

在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。有源代码库管理员统一管理这些源程序。

每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后开发人员可以在本地修改,然后用svn命令进行提交,由源代码库统一管理修改。

mod_dav_svn 可以让版本库通过http协议实现网站展现。

六、服务搭建

搭建要求: svn服务器,apache, mod_dav_svn 软件包
# mod_dav_svn模块 : apache http 服务器的插件,可以让版本库通过http协议,在网站上展现。

关闭防火墙
systemctl stop firewalld
setenforce 0

安装svn服务 apache服务 和 mod_dav_svn 模块
 yum install httpd subversion mod_dav_svn -y

前往  /etc/httpd/modules/  下,检查是否包含mod_dav_svn.so和mod_authz_svn.so,
如果有,mod_dav_svn安装成功。

开机自启httpd服务
systemctl start httpd
systemctl enable httpd

浏览器测试服务正常

 hpptd:目录结构

配置文件:/etc/httpd/conf/httpd.conf

其他配置:/etc/httpd/conf.d  --其他程序的配置文件,例如Subversion.conf

程序目录:/var/www/html

日志目录:/var/log/httpd

创建svn仓库

创建仓库目录
mkdir -p /var/www/svn-repos

创建svn版本库
[root@ly www]# cd svn-repos/
svnadmin create repo1

修改用户、组权限
[root@ly svn-repos]# chown -R apache:apache repo1/

查看版本库

conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件
db目录:就是所有版本控制的数据存放文件
format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端
dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有

 修改当前仓库的配置文件

禁用匿名用户并开启验证用户权限。  
vim  /var/www/svn-repos/repo1/conf/svnserve.conf  
anon-access = none    #关闭匿名访问
auth-access = write     #验证用户可写
password-db = passwd  #指向验证用户名密码的数据文件 passwd
auth-db=authz         #指向验证用户的权限配置文件 authz

注意:此配置文件的所有内容必须顶格,否则会报错

 配置apache通过mod_dav_svn 模块来访问SVN服务器

httpd: 肯定是要安装的
Mod_dav_svn : 是一个模块 首先让SVN与apache 之间互联

SVN+Apache
SVN+Apache的需要subversion的两个动态库支持,同时我们需要密码的验证支持!
查看apache对svn模块的支持
[root@ly ~]# vim /etc/httpd/conf.modules.d/10-subversion.conf
#有下面svn相关库,就证明安装成功


修改svn配置文件
[root@ly ~]# vim /etc/httpd/conf.d/subversion.conf
<Location /svn-repos>
      DAV svn
       SVNParentPath /var/www/svn-repos
        AuthType Basic
        AuthName " hello SVN user liyong! "
        AuthUserFile /var/www/svn-repos/repo1/conf/passwd
        AuthzSVNAccessFile /var/www/svn-repos/repo1/conf/authz
        Require valid-user
</Location>

解释:
<Location /svn-repos>	
  DAV svn			
  SVNParentPath /var/www/svn-repos/repo1		#svn仓库路径
  AuthType Basic
  AuthName " hello SVN user liyong! "		 #apache认证时弹出的消息
  AuthUserFile /var/www/svn-repos/repo1/conf/passwd  # passwd存储用户名和密码的路径
  AuthzSVNAccessFile /var/www/svn-repos/repo1/conf/authz		 #存放用户的权限路径
  Require valid-user
</Location>


注:配置文件中

SVNPath和SVNParentPath 的区别

SVNParentPath是在仓库目录的上一级。

SVNPath就是在仓库的目录下

两个不同的参数

SVNParentPath /var/www/svn-repos

或者

SVNPath /var/www/svn-repos/repo1

两种访问的模式不一样,SVNParentPath就是访问地址/svn/后面要加仓库名称,而另外一个不用加,直接/svn/就是仓库了。

重新启动httpd服务
[root@ly ~]# systemctl restart httpd
(重启时如果显示 Could not reliably determine the server's fully qualified domain name,则  vim /etc/httpd/conf/httpd.conf  , 加入 ServerName  localhost:80)

 建立本地访问控制文件

使用htpasswd创建用户,首次创建用户。位置和subversion.conf里的一样,给第一个用户添加密码时要加c,意思是创建这个文件,以后就不用加了  。
 #后期通过httpd服务器访问svn时,会使用这个文件中的用户信息验证用户和密码。

[root@ly ~]# cd /var/www/svn-repos/repo1/
[root@ly repo1]# ls
conf  db  format  hooks  locks  README.txt
[root@ly repo1]# cd conf/
[root@ly conf]# ls
authz  passwd  svnserve.conf

(  执行添加用户命令必须在passwd文件所在的目录下执行,
否则会另外创建一个passwd文件,之前的passwd文件和配置会失效)

[root@ly conf]# htpasswd -cb passwd liy 123456
在命令行直接创建,改指令会 自动添加svn账号和加密的密码)

-c :  创建passwd文件,默认为MD5加密		
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码

注意:#后期再创建时,就不需要加-c参数,否则,会把之前添加到/var/www/svn-repos/repo1/conf/passwd中信息,全部覆盖。

  	    #添加用户  
         htpasswd -b passwd 设置用户名 设置密码 
         #删除用户  
         htpasswd -D passwd user  
         #修改用户密码  
         htpasswd passwd user

 建立本地项目版本库,权限控制文件

达到以下目标: 
用户       仓库                  权限
liy		   repo1			      rw
.....		 ......			     ......


[root@ly ~]# cd /var/www/svn-repos/repo1/
[root@ly repo1]# ls
conf  db  format  hooks  locks  README.txt
[root@ly repo1]# cd conf/
[root@ly conf]# ls
authz  passwd  svnserve.conf
[root@ly conf]# vim authz 

[/]
liy = rw

解释:
[/]			  #  表示在所有仓库的根目录下
liy = rw			 #  表示 liy 用户对所有仓库根目录下的软件版本库有rw权限

例:权限分配
 [groups]   			这个表示群组设置
 Admin=usr1,user2 		这个表示admin群组里的成员 user1,user2
Develop=u1, u2 		这个表示Develop群组里的成员 u1,u2
 [repo1:/] 				这表示,仓库repo1的根目录下的访问权限
 user1 = rw 			repo1仓库user1用户具有读和写权限
 user2 = r 			repo1仓库userl用户具只有读权限
 @develop=rw 		这表示 群 develop的成员都具有读写权限
  [/] 					这个表示在所有仓库的根目录下
  * = r 				这个表示对所有的用户都具有读权限
 注意:在编辑authz.conf文件时,所有行都必须要顶头写,不能有缩行出现,否则会报错:"Access denied: 'user1' ",里面的内容可以根据自己的需要自行添加。

 给目录授权,并重启httpd

[root@ly ~]# vim /etc/sysconfig/svnserve 	
 Linux系统配置文件/etc/sysconfig  修改指定仓库路径

 重启httpd服务和svn仓库服务

浏览器测试访问效果

七、本机使用SVN

现实中都是下载客户端

日常工作中我们使用SVN都是在图形化操作系统下使用,实际上图形化的操作在软件内部都是对应的命令。

常见的选项

import

将未版本化的文件纳入版本控制并提交

checkout

从版本库中检出

update

更新工作拷贝

add,delete,copy,move

增、删、复制、移动文件或目录

status

检查状态差异

diff

检查文件行级详细差异

revert

恢复

resolve

解决冲突

switch

切换工作拷贝对应的版本库分支

log

查看历史记录

list

显示文件目录

cat

查看某个文件内容

/创建一个本地代码目录

svn import /home/daima/ file:///var/www/svn-repos/repo1 -m “first ”
将代码文件提交给svn仓库
-m “注释(随意写)”

 八、SVN客户端安装使用说明

http://tortoisesvn.net/about.zh.html         #客户端下载地址 

下载完成后,直接就是双击运行,然后一直是下一步的进行安装就好了

 # 注: 下载 32 或者是 64 根据自己的操作系统来决定,我这里是安装的 64

此时你安装的是英文版,如果你需要汉化,则在下载页面继续往下滚动,找到如下图下载中文语言包

 安装完成客户端后,鼠标右击 

点击ok会提示你输入用户名和密码

 仓库更新(同步)

新建代码上传

在SVN目录右键这个源码文件

 

输入注释,OK

1、svn图标代表含义

常规图标:当客户端文件和服务端文件完全同步时,显示以上图标

 冲突图标:当客户端提交的文件和服务器端数据有冲突

 删除图标:当服务端数据已删除,客户端该文件显示以上图标

 

 增加图标:当我们编写的文件添加到提交队列,系统自动显示

无版本控制图标:当我们编写的文件没有添加到上传队列时 

 

修改图标:当有文件有修改但未提交

 

 只读图标:当客户端文件以只读形式存在时

 锁定图标:当服务端数据已锁定,客户端自动显示

忽略图标:客户端文件已忽略,不需要进行提交上传

九、总结

svn默认通过svn://访问,如果想要其通过http访问则需要依赖apache-httpdapache提供了mod_dav_svn组件,该组件可以让svn和apache关联简单来说SVN就是用于多个人共同开发同一个项目,共用资源的目的。SVN 版本控制系统, 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目。

原文链接:https://blog.csdn.net/weixin_56270746/article/details/125241186

最后修改:2023 年 10 月 26 日
如果觉得我的文章对你有用,请随意赞赏