1、SVN介绍
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。也是就是CVS的接班人!
CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS。
官方网站:Windows客户端 TortoiseSVN
2、常见的版本控制软件
CVS,逐渐被SVN取代,是CVX重写版和改写版
SVN,Subversion
Git,Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds (林纳斯·托瓦兹)为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
3、SVN存储数据的方式
BDB,Berkeley DB,一种事务安全型表类型
FSFS,"FSFS" 采用文件系统的方式, 替代原来的基于Berkeley DB的实现
注:因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点
4、SVN的运行方式及端口
独立服务器 3690端口 访问方式SVN:// C/S模式
借助apache运行 80端口 访问方式 http://
5、工作流程
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:开始新一天的工作:
1、从服务器下载项目组最新代码。
2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码。
(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
6、搭建svn服务
6.1软件安装
代码语言:javascript复制 [root@localhost ~]# yum install subversion
6.2创建版本库目录
代码语言:javascript复制 [root@localhost ~]# mkdir /svn ##存放版本库的主目录
[root@localhost ~]# svnadmin create /svn/yunweimao ##创建一个版本库
注
svnadmin命令是由subversion这个软件包提供的
代码语言:javascript复制 [root@localhost ~]# ls /svn/yunweimao/
conf db format hooks locks README.txt
dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有
db目录:就是所有版本控制的数据存放文件
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端
format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件
[root@localhost ~]# ls /svn/yunweimao/conf/
authz passwd svnserve.conf
authz #认证权限相关
passwd ##用户名和密码
svnserve.conf ##服务器配置文件
6.3修改配置文件
代码语言:javascript复制 [root@localhost ~]# vim /svn/yunweimao/conf/svnserve.conf
[general]
12anon-access =read #原先注释掉了,匿名用户可以读,使用none的话就是匿名用户不可以访问
13auth-access =write #这几行都要取消注释,认证用户可以写,可以是read,write,none
20password-db =passwd #密码库文件,默认使用的是同一目录下的passwd文件作为用户密码库
27authz-db =authz #认证权限文件
32realm =My First Repository #登陆提示信息
##注意:此配置文件的所有内容必须顶格,否则会报错
代码语言:javascript复制 [root@localhost ~]# vim /svn/yunweimao/conf/passwd
[users]
7Make =123456
8MAN =123456
9top=123456
##注意:对于部分版本,前面的[users]是有#号的,如果有#号,一定要取消,否则只能使用匿名用户登录,客户端登录不会出现登录窗口或密码提示,除非在配置文件将anon设置为none,否则将返回一个错误
##这里的密码都是明文,没有加密
代码语言:javascript复制 [root@localhost ~]# vim /svn/yunweimao/conf/authz
21[groups]
22# harry_and_sally = harry,sally
23# harry_sally_and_joe = harry,sally,&joe
24Check = Make,MAN
25[/]
26top = rw
27@Check = r
28*=
##SVN目录格式:
## [/目录名]
## @用户组名 =权限
## 用户名 =权限
## *=
6.4服务SVN启动及创建测试代码
代码语言:javascript复制 [root@localhost ~]# svnserve -d -r /svn/ ##启动了所有版本库, 再 –r。如果只需要某一个版本库,后面添加/webdept/www.xuegod.cn/的版本库即可 -d=daemon -r=root of directory of save指定根目录
[root@localhost ~]# ps -aux | grep svn ##查询到下面这行内容就可以了
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 3768 0.0 0.0 152412 732? Ss 13:35 0:00 svnserve -d-r/svn/
root 3770 0.0 0.0 103336 868pts/0 D 13:37 0:00 grepsvn
[root@localhost ~]# netstat -antup | grep svn ##查看端口正常
tcp 0 00.0.0.0:3690 0.0.0.0:* LISTEN 3768/svnserve
7、使用svn导入测试代码
导入测试代码格式: svn [选项] 源码 svn://server ip/项目名
代码语言:javascript复制 [root@localhost ~]# mkdir localsvn
[root@localhost ~]# cd localsvn/
[root@localhost localsvn]# touch 1.html 2.html 4.php
[root@localhost localsvn]# cd
[root@localhost ~]# svn import /root/localsvn/ file:///svn/yunweimao/ -m "first edit"
增加 /root/localsvn/1.html
增加 /root/localsvn/2.html
增加 /root/localsvn/4.php
提交后的版本为 1。
8、代码取出
代码语言:javascript复制 [root@localhost ~]# svn checkout svn://localhost/yunweimao/ downsource ###代码取出到downsource,会在当前目录新建这个目录
9、代码添加
代码语言:javascript复制 [root@localhost ~]# cd downsource/
[root@localhost downsource]# touch 5.html
[root@localhost downsource]# svn add 5.html
[root@localhost downsource]# svn commit -m "second edit"
10、扩展
checkout:check out导出获得文件后,导出的文件仍处于SVN版本控制中,与版本库保持关联,比如你可以进行Svn Update或者Svn Commit操作,checkout是第一次用,后面的用法就是更新。
add 功能:向文件拷贝所在的文件夹中添加新的文件,并作出标识,是新添加的,下一步提交时将一并提交到Subversion版本库中去。简单的说就是将一个新文件加入svn,你添加再提交后该文件就进入subversion版本中去了。
commit,SVN的提交是将在工作空间做的修改进行提交,包括文件内容的修改,文件或目录的添加,删除,命名,移动等操作。开发项目时,你会在工作拷贝中修改项目的代码,你总要把修改之后做过的改动又存回到项目仓库中去。这个过程称为“提交”。提交是将你对工作拷贝所作的所有改动发送并存储到中央项目仓库中。