1 Subversion简介
1. 背景
当一个项目由多个开发人员共同开发,而这些开发人员处在不同的地方或者无法在本地交流时,如何保证开发过程中项目版本的同步、更新、管理等是一个很重要的问题。版本控制软件是一个非常好的解决方案,能够保证项目开发的安全、同步和高效管理。Subversion是一款优秀的版本管理软件,做为cvs的接班人,是目前大多数开源软件都使用的代码版本管理软件。
2. 工作原理
Subversion是Apache软件基金会开发和维护的一个开源/自由的版本控制系统,在Subversion管理下,文件和目录可以超越时空,也就是Subversion的回滚机制允许你将数据恢复到早期版本(rollback),
或者是检查数据修改的历史,就像是一台时光机。
Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不再是单线进行,开发速度会更快。
Subversion的基本工作流程是:
在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码库管理员统一管理这些源程序;
每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后开发人员可以在本地修改,之后用svn命令进行提交,由源代码库统一管理修改。
Subversion的版本控制机制解决了以下问题:
代码管理混乱
代码冲突问题
在代码整合期间引发的bug
无法对代码的拥有者进行权限控制
项目不同版本的发布困难
SVN工作原理示意图:
2 SVN服务搭建
Subversion有两种运行方式:
一种是基于Apache Http Server,另外一种是Subversion Standalone Server。
以下是基于httpd的安装过程:
1. 环境部署
系统环境:CentOS 6.5 32位
安装方式:yun在线安装机制
软件版本:Apache Subversion 1.6.11
2. 安装前准备
检查是否安装了旧版本的SVN:
#rpm -qa | grep subversion
若有,卸载旧版本:
#yum remove subversion
3. 安装所需软件包
yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql mysql-server
说明:
subversion:SVN服务器
mysql-server,mod-auth-mysql:用于codestriker
httpd,httpd-devel,mod_dav_svn:用于支持Web方式管理SVN服务器
4. 确认已经安装svn模块
#ls /etc/httpd/modules | grep svn
mod_authz_svn.so
mod_dav_svn.so
检查SVN版本信息:
#svnserve --version
svnserve, version 1.6.11 (r934486)
compiled Mar 6 2014, 10:33:29
Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
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.
5. 创建Subversion初始代码库
#mkdir -p /opt/svn/repositories
#svnadmin create --fs-type fsfs /opt/svn/repositories/
执行上面的命令后,自动建立repositories库,查看/opt/svn/repositories 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。
Subversion目录说明:
dav 目录: 是提供 apache 与 mod_dav_svn 使用的目录,让他们存储内部数据
db 目录: 是所有版本控制的数据存放文件
hooks 目录: 放置 hook 脚本文件的目录
locks 目录: 用来放置 subversion 建库锁定数据的目录,用来追踪存取文件库的客户端
format 文件: 是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
conf 目录: 是这个仓库的配置文件(仓库的用户访问账号、权限等)
6. Subversion导入初始项目
#svn import /path/to/your/project file:///opt/svn/repositories --message "init"
通过svnlook查看项目库信息:
svnlook info /opt/svn/repositories/
7. 配置代码库
添加用户:vim /opt/svn/repositories/conf/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
rango = password
注解:添加对应的条目可增加多个用户
修改用户访问策略:vim /opt/svn/repositories/conf/authz
[groups]
admin = rango
[admin:/]
@admin = rw
[/]
* = r
[$name:/]
test = rw">>/opt/svn/puppet/conf/authz
注解:此处设置了只有用户rango拥有根目录的读写权(rw),其他用户只有读权限。
修改svnserve.conf,使用户和策略配置生效:
[general]
#定义非授权用户的访问权限,有三种方式:none-限制访问,read-只读,write-读写,默认为read
anon-access = none
#定义授权用户的访问权限,有三种方式:none-限制访问,read-只读,write-读写,默认为write
auth-access = write
#定义保存用户名和密码的文件路径
password-db = /opt/svn/project/conf/passwd
#定义保存授权信息的路径
authz-db = /opt/svn/project/conf/authz
#定义客户端连接的认证命名空间,SVN会在认证提示里显示,并且作为凭证缓存的关键字
realm = My Repository
8. 配置防火墙
Subversion利用tcp 3690端口:
#vim /etc/sysconfig/iptables
#add following entry
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
保存后重启iptables:
#service iptables restart
9. 启动SVN服务
#svnserve -d -r /opt/svn/repositories
注解:-d表示以daemon,即后台方式启动
-r指定代码根目录
查看SVN服务:
#ps aux | grep svn | grep -v grep
root 11248 0.0 0.0 13200 896 ? Ss 11:22 0:00 svnserve -d -r /opt/svn/repositories
检测SVN端口:
#netstat -ln | grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
停止、重启SVN服务:
#killall svnserve #停止
#svnserve -d -r /opt/svn/repositories // 启动
10. 配置Apache模块通过Web来访问Subversion版本库
编辑/etc/httpd/conf.d/subversion.conf,添加以下信息:
<VirtualHost *:8146>
<Location /svn>
DAV svn
SVNParentPath /opt/svn
AuthType Basic
AuthName "Subversion Realm"
SVNListParentPath on
AuthUserFile /opt/svn/puppet/conf/authfile
# AuthzSVNAccessFile /opt/svn/puppet/conf/svn-acl-conf
Require valid-user
SVNAutoversioning on
ModMimeUsePathInfo on
</Location>
</VirtualHost>
创建/etc/httpd/conf.d/svn_user_list 和/etc/httpd/conf.d/project.access 权限文件:
#htpasswd -c /etc/httpd/conf.d/svn_user_list rango #创建用户列表
#vim /etc/httpd/conf.d/project.access:
[repositories:/]
rango = rw
[repositories:/test]
rango = r
重启apache,通过http://server_ip:8146/svn/repositories/ 访问,如果页面出现,说明配置成功
注解:/opt/svn/repositories目录要能被apache运行用户(apache)读写:
chown -R apache.apache /opt/svn/repositories/
11. 删除一个版本库
svn delete 只会删除版本库中的文件,svnadmin 也没有提供删除版本库的子命令。只能在 SVN 服务器端强制删除文件:
#rm -rf /path/to/your/repositories/
12. SVN代码库的访问方式
(1) 直接访问本地硬盘文件仓库(file://):
svn co file:///path/to/your/project 或者
svn cofile://localhost/path/to/your/project/
ps:checkout (co): 从版本库签出工作副本。
(2) 通过WebDAV 协议访问(http://)
(3) 通过具有安全套接字(SSL)的WebDAV 协议访问(https://)
(4) 通过自带协议访问svnserve服务器(svn://)
svn co svn://hostname/repositoriesrepositories --username user_name
(5) 通过具被SSH隧道保护的自带协议访问(svn+ssh://)
svn cosvn+ssh://hostname/opt/svn/repositories repositories --usernameuser_name
注意:在这种方式下,您必须使用完整的路径(/opt/svn/repositories)来访问SVN 文件仓库
——游响云停
转载于:https://blog.51cto.com/rangochen/1394045