Svn版本管理-学习篇
svn 服务端搭建部署
svn介绍
Subversion(SVN)是一个开源的,跨平台的版本控制系统,由CollabNet公司成立于2000年;Subversion作为新一代的版本管理系统,以其目录版本化、原子提交、版本化的元数据、更加有效的分支和标签等特性,至今已被众多的互联网企业使用来管理网站、论坛的代码文件;Subversion最独特的地方,便是可以通过Apache的扩展模块与Apache的HTTP服务相结合,实现更安全的特性与管理,其次用户还可以通过HTTP协议去访问版本库,还可以通过SSL协议传输加密,保证数据的安全性;Subversion是Apache软件基金会的发展的一个项目,并且也是一个丰富的开发人员和用户社区的一部分。
常见的版本控制软件
1,CVS,逐渐被SVN取代,是CVX重写版和改写版
2,SVN,Subversion
3,Git,Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
svn的服务器常见有3种运行访问方式
1、独立服务器(例如:svn:``//IP/sadoc``);
2、借助apache(例如:http:``//IP/sadoc``);
3、本地直接访问(例如:``file``:``//IP/sadoc``)
客户端访问方式
Subversion可以通过多种方式访问–本地磁盘访问,或各种各样不同的网络协议,但一个版本库的地址永远都是一个URL,URL方案反映了访问方法
file://直接版本访问(本地磁盘或者网络磁盘) http://通过WebDAV协议访问支持Subversion的Apache服务器 https://与http://相似,但是用的SSL加密 svn://通过未认证的TCP/IP自定义协议访问svnserver服务器 svn+ssh://通过认证并加密的TCP/IP自定义协议访问svnserver服务器
SVN数据格式
Subversion存储版本数据方式2种:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点;那么在创建Subversion版本控制仓库的时候,可以指定存储版本数据为FSFS方式;
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说
明:开始新一天的工作
1、从服务器下载项目组最新代码
2、进入自己的分支,进行工作,每隔一小时向服务器上自己的分支持提交一次代码(很多人都有这个习惯。因为有时候自己对自己代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器的主分支上,一天的工作完成,并反映给服务器
这就是经典的svn工作流程,从流程上看,有缺点,也有优点
缺点:
1、服务器压太大,svn数据库容量暴增
2、如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等
3、不适合开源开发(开发人数非常非常多,但是Google app engine就是用SVN的)。但一般集中式管理的有非常明确权限管理机制(例如分支访问限制),可以实现分层管理,从而很好解决开发人数众多问题
优点:
1、管理方便,逻辑明确,符合一般人思维习惯
2、易于管理,集中式服务器更能保证安全性
3、代码一致性非常高
4、适合开发人数不多的项目开发
5、大部分软件配置的大学教材都是使用svn和vss
1,yum安装subversion
[root@localhost ~]# yum -y install subversion
2,检测是否安装成功
[root@localhost ~]# rpm -qa subversion subversion-1.6.11-15.el6_7.x86_64
3,创建svn版本根目录已经密码权限目录
[root@localhost ~]# mkdir -pv /web/svndata /web/svnpasswd mkdir: 已创建目录 “/web” mkdir: 已创建目录 “/web/svndata” mkdir: 已创建目录 “/web/svnpasswd” [root@localhost ~]# ll /web/ 总用量 8 drwxr-xr-x. 2 root root 4096 2月 23 22:16 svndata drwxr-xr-x. 2 root root 4096 2月 23 22:16 svnpasswd
4,启动服务,并检测服务和端口是否开启
[root@localhost ~]# svnserve -d -r /web/svndata [root@localhost ~]# ps -ef | grep svn | grep -v grep root 1745 1 0 22:18 ? 00:00:00 svnserve -d -r /web/svndata [root@localhost ~]# netstat -lntup | grep 3690 tcp 0 0 0.0.0.0:3690 0.0.0.0: LISTEN 1745/svnserve
5,创建一个新的subversion项目www.baidu.com,项目可以创建很多个
[root@localhost ~]# svnadmin create /web/svndata/www.baidu.com [root@localhost ~]# ls -ld /web/svndata/www.baidu.com/ drwxr-xr-x. 6 root root 4096 2月 23 22:20 /web/svndata/www.baidu.com/
6,关于帮助,可以查看帮助
[root@localhost ~]# svnadmin help create create: 用法: svnadmin create REPOS_PATH 在 REPOS_PATH 创建一个新的空版本库。 有效选项: –bdb-txn-nosync : 在提交事务时禁用fsync [BDB] –bdb-log-keep : 禁用自动删除日志文件 [BDB] –config-dir ARG : 从目录 ARG 读取用户配置文件 –fs-type ARG : 版本库类型: “fsfs”(默认)或“bdb” –pre-1.4-compatible : 使用与1.4之前版本兼容的格式 –pre-1.5-compatible : 使用 Subversion 1.5 之前版本的格式 –pre-1.6-compatible : 使用与 1.6 之前版本兼容的格式
7,修改配置文件
[root@localhost ~]# cd /web/svndata/www.baidu.com/ [root@localhost www.baidu.com]# ls conf db format hooks locks README.txt ** dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有 db目录:就是所有版本控制的数据存放文件 hooks目录:放置hook脚本文件的目录 locks目录:用来放置subversion常见锁定数据的目录,用来追踪存取文件库的客户端 format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号 conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件 [root@localhost www.baidu.com]# cd conf/ [root@localhost conf]# ls authz passwd svnserve.conf ** authz #认证权限相关 passwd #用户名和密码 svnserve.conf #服务器配置文件 [root@localhost conf]# cp svnserve.conf svnserve.conf.2016-3-3bak [root@localhost conf]# vi svnserve.conf [root@localhost conf]# egrep “-access|-db = “ svnserve.conf anon-access = read #原先注释掉了,匿名用户可以读,使用none的话就是匿名用户不可以访问 auth-access = write #这几行都要取消注释,认证用户可以写,可以是read,write,none password-db = /app/svnpasswd/passwd #密码库文件,默认使用的是同一目录下的passwd文件作为用户密码库 authz-db = /app/svnpasswd/authz #认证权限文件 realm = www.baidu.com #登陆提示信息 注意:此配置文件的所有内容必须顶格,否则会报错
8,定义用户名密码,权限配置
[root@localhost conf]# cp authz passwd /web/svnpasswd/ [root@localhost conf]# cd /web/svnpasswd/ [root@localhost svnpasswd]# ls authz passwd [root@localhost svnpasswd]# vi passwd [users] # harry = harryssecret # sally = sallyssecret user1 = 123456 user2 = 123456 user3 = 123456 ** #末尾添加上面三行 #对于部分版本,前面的[users]是有#号的,如果有#号,一定要取消,否则只能使用匿名用户登录,客户端登录不会 出现登录窗口或密码提示,除非在配置文件将anon设置为none,否则将返回一个错误 #这里的密码都是明文,没有加密
8.1,配置权限
[root@localhost svnpasswd]# vi authz [groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe # [/foo/bar] # harry = rw # &joe = r # = # [repository:/baz/fuz] # @harry_and_sally = rw # = r admin = user1,user2 #定义组,在[groups]下面添加 #用户组格式 用户组名 = 用户1,用户2 #一个组可以包含多个用户,英文逗号间隔,用户名必须是在passwd中存在的 [www.baidu.com:/] #/表示我当前所在版本库目录 @admin = rw #@admin表示这个组的权限,就是上面定义的组的成员 user3 = r #用户 = #除了上面的有赋予权限成员之外,其他的成员都没有权限 ** authz配置 用户组格式,其中1个用户组可以包含1个或多个用户,用户间用,隔开 [groups] =, [<项目库>:/项目/目录] @<用户组名> = <权限> <用户名> = <权限> [/]表示根目录 及以下,根目录是svnserve启动时指定的, 我们指定为/app/svndata,[/]就是表示全部版库设置权限 [repos:/]表示版本库repos设置权限 [repos:/webtest]表示版本库repos中的webtest项目设置权限 [repos:/webtest/zhanghe]表示版本库对repos中的webtest项目的zhanghe目录设置权限 权限主体可以是用户组,用户或,用户组在前面加@,表示全部用户 权限可以是w,r,wr和空,空表示没有任何权限 authz中每个参数都要顶格写,开头不能空格 对于组,要以@开头,用户不需要@开头
9,重新启动svn服务
[root@localhost svnpasswd]# pkill svnserve [root@localhost svnpasswd]# ps -ef | grep svn root 1881 1679 0 23:30 pts/0 00:00:00 grep svn [root@localhost svnpasswd]# svnserve -d -r /web/svndata/ [root@localhost svnpasswd]# netstat -tlunp | grep svn tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1883/svnserve
10,防火墙
[root@localhost ~]# iptables -I INPUT -p tcp –dport 3690 -j ACCEPT [root@localhost ~]# service iptables save iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
11,Windows客户端工具
http://jaist.dl.sourceforge.net/project/tortoisesvn/1.9.4/Application/TortoiseSVN-1.9.4.27285-x64-svn-1.9.4.msi #客户端工具 http://tenet.dl.sourceforge.net/project/tortoisesvn/1.9.4/Language%20Packs/LanguagePack_1.9.4.27285-x64-zh_CN.msi #汉化包
安装好客户端工具,再安装汉化包,鼠标右键设置语言即可!