Apache + svn 服务搭建

目录

前言:

一、svn简介

二、常见的版本控制软件

三、svn 的运行方式

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

五、svn工作流程

1、SVN+Apache运行原理

六、服务搭建

七、本机使用SVN

八、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这个模块。

运行机制:

Apache + svn 服务搭建_第1张图片

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

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

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

六、服务搭建

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

关闭防火墙
systemctl stop firewalld
setenforce 0

Apache + svn 服务搭建_第2张图片

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

Apache + svn 服务搭建_第3张图片

前往  /etc/httpd/modules/  下,检查是否包含mod_dav_svn.so和mod_authz_svn.so,
如果有,mod_dav_svn安装成功。
 
开机自启httpd服务
systemctl start httpd
systemctl enable httpd
 
浏览器测试服务正常 

Apache + svn 服务搭建_第4张图片Apache + svn 服务搭建_第5张图片

 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

Apache + svn 服务搭建_第6张图片

创建svn版本库
cd svn-repos/
svnadmin create repo1
 
修改用户、组权限
chown -R apache:apache repo1/

Apache + svn 服务搭建_第7张图片

查看版本库

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

Apache + svn 服务搭建_第8张图片

修改当前仓库的配置文件

禁用匿名用户并开启验证用户权限。  
vim  /var/www/svn-repos/repo1/conf/svnserve.conf  
anon-access = none    #关闭匿名访问
auth-access = write     #验证用户可写
password-db = passwd  #指向验证用户名密码的数据文件 passwd
auth-db=authz         #指向验证用户的权限配置文件 authz
 
注意:此配置文件的所有内容必须顶格,否则会报错

Apache + svn 服务搭建_第9张图片Apache + svn 服务搭建_第10张图片

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

httpd: 肯定是要安装的
Mod_dav_svn : 是一个模块 首先让SVN与apache 之间互联
 
SVN+Apache
SVN+Apache的需要subversion的两个动态库支持,同时我们需要密码的验证支持!
查看apache对svn模块的支持

vim /etc/httpd/conf.modules.d/10-subversion.conf
#有下面svn相关库,就证明安装成功
 
 
修改svn配置文件
vim /etc/httpd/conf.d/subversion.conf

      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/auth
        Require valid-user

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

 
注:配置文件中

SVNPath和SVNParentPath 的区别
SVNParentPath是在仓库目录的上一级。
SVNPath就是在仓库的目录下
两个不同的参数
SVNParentPath /var/www/svn-repos
或者
SVNPath /var/www/svn-repos/repo1
两种访问的模式不一样,SVNParentPath就是访问地址/svn/后面要加仓库名称,而另外一个不用加,直接/svn/就是仓库了。

Apache + svn 服务搭建_第11张图片Apache + svn 服务搭建_第12张图片

重新启动httpd服务
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@kgc ~]# cd /var/www/svn-repos/repo1/
[root@kgc repo1]# ls
conf  db  format  hooks  locks  README.txt
[root@kgc repo1]# cd conf/
[root@kgc conf]# ls
authz  passwd  svnserve.conf
 
(  执行添加用户命令必须在passwd文件所在的目录下执行,
否则会另外创建一个passwd文件,之前的passwd文件和配置会失效)
 
[root@kgc 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

Apache + svn 服务搭建_第13张图片

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

达到以下目标:
用户                    仓库                  权限
zhangsan           repo1                  rw
.....         ......                 ......
 
 
[root@kgc ~]# cd /var/www/svn-repos/repo1/
[root@kgc repo1]# ls
conf  db  format  hooks  locks  README.txt
[root@kgc repo1]# cd conf/
[root@kgc conf]# ls
authz  passwd  svnserve.conf
[root@kgc conf]# vim authz
 
[/]
zhangsan = rw
解释:
[/]              #  表示在所有仓库的根目录下
zhangsan = 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' ",里面的内容可以根据自己的需要自行添加。

Apache + svn 服务搭建_第14张图片Apache + svn 服务搭建_第15张图片

 给目录授权,并重启httpd

 Apache + svn 服务搭建_第16张图片Apache + svn 服务搭建_第17张图片

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

Apache + svn 服务搭建_第18张图片

 重启httpd服务和svn仓库服务

浏览器测试访问效果

Apache + svn 服务搭建_第19张图片Apache + svn 服务搭建_第20张图片

七、本机使用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 “注释(随意写)”

Apache + svn 服务搭建_第21张图片

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

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

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

Apache + svn 服务搭建_第22张图片

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

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

Apache + svn 服务搭建_第23张图片

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

Apache + svn 服务搭建_第24张图片

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

Apache + svn 服务搭建_第25张图片

仓库更新(同步)

Apache + svn 服务搭建_第26张图片

新建代码上传

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

Apache + svn 服务搭建_第27张图片

Apache + svn 服务搭建_第28张图片

输入注释,OK

Apache + svn 服务搭建_第29张图片Apache + svn 服务搭建_第30张图片

Apache + svn 服务搭建_第31张图片

Apache + svn 服务搭建_第32张图片

九、总结

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

你可能感兴趣的:(apache,svn,服务器)