目录
前言: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-httpd,apache提供了mod_dav_svn组件,该组件可以让svn和apache关联,简单来说SVN就是用于多个人共同开发同一个项目,共用资源的目的。SVN 版本控制系统, 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目。