天天看点

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

目录

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

运行机制:

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

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

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

六、服务搭建

搭建要求: svn服务器,apache, mod_dav_svn 软件包

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

关闭防火墙
systemctl stop firewalld
setenforce 0
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

安装svn服务 apache服务 和 mod_dav_svn 模块
 yum install httpd subversion mod_dav_svn -y
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

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

浏览器测试服务正常
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

 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 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

创建svn版本库
[[email protected] www]# cd svn-repos/
svnadmin create repo1

修改用户、组权限
[[email protected] svn-repos]# chown -R apache:apache repo1/
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

查看版本库

conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件
db目录:就是所有版本控制的数据存放文件
format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端
dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、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 + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

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

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


修改svn配置文件
[[email protected] ~]# 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/就是仓库了。
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
重新启动httpd服务
[[email protected] ~]# systemctl restart httpd
(重启时如果显示 Could not reliably determine the server's fully qualified domain name,则  vim /etc/httpd/conf/httpd.conf  , 加入 ServerName  localhost:80)
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

 建立本地访问控制文件

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

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

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

[[email protected] 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 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

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


[[email protected] ~]# cd /var/www/svn-repos/repo1/
[[email protected] repo1]# ls
conf  db  format  hooks  locks  README.txt
[[email protected] repo1]# cd conf/
[[email protected] conf]# ls
authz  passwd  svnserve.conf
[[email protected] 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' ",里面的内容可以根据自己的需要自行添加。

           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

 给目录授权,并重启httpd

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
[[email protected] ~]# vim /etc/sysconfig/svnserve 	
 Linux系统配置文件/etc/sysconfig  修改指定仓库路径
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

 重启httpd服务和svn仓库服务

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

浏览器测试访问效果

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

七、本机使用SVN

现实中都是下载客户端:

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

常见的选项

import 将未版本化的文件纳入版本控制并提交
checkout 从版本库中检出
update 更新工作拷贝
add,delete,copy,move 增、删、复制、移动文件或目录
status 检查状态差异
diff 检查文件行级详细差异
revert 恢复
resolve 解决冲突
switch 切换工作拷贝对应的版本库分支
log 查看历史记录
list 显示文件目录
cat 查看某个文件内容

/创建一个本地代码目录

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
svn import /home/daima/ file:///var/www/svn-repos/repo1 -m “first ”
将代码文件提交给svn仓库
-m “注释(随意写)”
           
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

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

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

 仓库更新(同步)

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

新建代码上传

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

输入注释,OK

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结
Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

1、svn图标代表含义

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

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

Apache + svn 服务搭建一、svn简介二、常见的版本控制软件三、svn 的运行方式四、SVN存储版本数据的方式五、svn工作流程六、服务搭建七、本机使用SVN 八、SVN客户端安装使用说明九、总结

九、总结

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