SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上不少版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多我的共同开发同一个项目,共用资源的目的。html
SVN官网git
SVN(subversion)是版本管理工具,是CVS的接班人。目前,绝大多数开源软件都使用svn做为代码版本管理软件。做为一个运维人员安装和配置SVN服务器和客户端是必需要掌握的内容。数据库
svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户能够自行选择。apache
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不须要数据库的存储系统)。由于BDB方式在服务器中断时,有可能锁住数据,因此仍是FSFS方式更安全一点。vim
1 存储类型格式windows
CVS是个基于RCS文件的版本控制系统。每一个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。所以,没必要担忧有什么数据损失,若是必要的话能够手工修改RCS文件。浏览器
SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另外一方面,数据存储由此变得不透明。安全
2 速度bash
CVS比较慢。服务器
总体而言,因为架构实现的不一样, SVN的确比CVS快不少。在网络上它只传输不多的信息并支持更多的离线模式的功能。但这也是有代价的。速度的代价就是巨大的存储(彻底备份全部的工做文件)。
3 标志&分支
SVN采用标志和分支而抛弃了其余三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。这样一来,不管标志建立仍是分支建立都只是仓库内部的文件复制了。对分支而言:分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。对标志而言:已经不能对代码加标志了。在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。
4 元数据
CVS只容许存储文件。
SVN容许一个文件有任意多的可命名属性,功能十分彻底。
5 文件类型
CVS最初是为文本文件存储而设计的。所以其余文件类型(二进制,统一码)文件的支持几乎没有,如须要的话则要有其余信息,而且客户端服务器端都要调整。
SVN会关心全部的文件类型,不须要你来手工操做。
Cvs 因为以前CVS编码的问题,如今大多数软件开发公司都使用SVN替代了CVS
Svn
git 分布式版本控制器
SVN 服务器运行模式:
模式1: svn服务器 监听: 3690端口 访问: svn://IP
模式2: svn 服务器+ apache : 80 端口 访问: http://IP 今天要讲的
安装: svn服务器,apache, mod_dav_svn 软件包
svn服务器使用流程
实战:CentOS 6 上安装配置 svn server+apache
# yum install subversion httpd mod_dav_svn -y
mod_dav_svn模块 : apache http 服务器的插件,可让版本库经过http协议,在网站上展示。
建立版本库目录,并修改相应权限。
[root@localhsot ~]# mkdir /var/repos
建立两个项目仓库。 xuegod.cn和svn2
[root@localhsot ~]# svnadmin create /var/repos/xuegod.cn
[root@localhsot ~]# svnadmin create /var/repos/svn2
[root@localhsot ~]# ls /var/repos/xuegod.cn
conf db format hooks locks README.txt
[root@localhost conf]#ls /var/repos/xuegod.cn/conf
authz passwd svnserve.conf
#注:用户权限配置咱们使用apache的,这里暂时不用svn自带
启动:SVN服务器
[svn@localhsot conf]# svnserve -d -r /var/repos/
-d表示以daemon方式(后台运行)运行
-r /var/repos指定svn根目录是/var/repos
[svn@localhsot conf]# ps -axu | grep svn
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 6982 0.0 0.0 161476 1924 pts/2 S 18:09 0:00 su - svn
svn 6983 0.0 0.0 108392 1864 pts/2 S 18:09 0:00 -bash
svn 7262 0.0 0.0 182760 1056 ? Ss 18:26 0:00 svnserve -d -r /var/repos/
[svn@localhsot conf]# netstat -antup | grep 3690
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 7262/svnserve
svn服务器搭建流程:
1、安装: yum install subversion httpd mod_dav_svn
2、建立仓库存储代码: svnadmin create /var/repos/xuegod.cn
3、启动svn服务器:svnserve -d -r /var/repos/
APACHE
第一步,查看apache支持subversion两个动态库有没有安装成功。
查看:
[root@localhost conf]# vim /etc/httpd/conf.d/subversion.conf #看到下面配置文件中两个模块相关信息,说明安装成功。
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
配置apache经过mod_dav_svn模块访问SVN服务器
[root@localhost ~]# vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
DAV svn
SVNParentPath /var/repos
AuthType Basic
AuthName " SVN server of xuegod!"
AuthUserFile /home/svn/passwd
AuthzSVNAccessFile /home/svn/auth
Require valid-user
</Location>
注释:
<Location /svn> #apache的虚拟目录。后期经过连接:http://192.168.1.63/svn 来访问两个仓库:xuegod和svn2
DAV svn
SVNParentPath /var/repos #存放两个仓库:xuegod和svn2的真实目录
AuthType Basic
AuthName " SVN server of xuegod!" #apache认证时弹出的消息
AuthUserFile /home/svn/passwd # passwd存储用户名和密码
AuthzSVNAccessFile /home/svn/auth #存放用户的权限
Require valid-user
</Location>
创建本地访问控制文件/home/svn/passwd,#后期经过httpd服务器访问svn时,会使用这个文件中的用户信息验证用户和密码
[root@localhsot ~]# mkdir /home/svn
[root@localhsot ~]# htpasswd -c /home/svn/passwd tube
# -c create, 建立/home/svn/passwd文件。会提示你输入密码,默认是MD5加密
New password: 123456
Re-type new password:
Adding password for user tube
[root@localhost ~]# htpasswd /home/svn/passwd cd #后期再建立时,就不须要加-c参数,不然,会把以前添加到/home/svn/passwd中信息,所有覆盖。
New password: 123456
Re-type new password:123456
Adding password for user tree
查看用户名和密码:
[root@localhost ~]# cat /home/svn/passwd
cd:sjplr6rMtpN3E
tube:gZEcmDnMwFsMc
注:tube和cd两个用户的明文密码都同样,可是加完密码之后是不同。
加密时: (密码+用户名 ) md5 -》 ll7IH3i5G0JfU
第四步,创建本地项目版本库,权限控制文件。
达到如下目标:
用户 仓库 权限
tube xuegod.cn,svn2 rw
cd xuegod.cn rw
[root@localhost ~]# vim /home/svn/auth #写入如下内容
[/]
tube = rw
[xuegod.cn:/]
cd = rw
解释:
[/] # 这个表示在全部仓库的根目录下
tube = rw # 表示tube用户对全部仓库根目录下的软件版本库有rm权限
[xuegod.cn:/] #这表示,仓库xuegod.cn的根目录下的访问权限
cd= rw # cd用户对xuegod.cn仓库具备读和写权限
给目录权限
[root@localhost conf.d]# chmod 777 /var/repos/ -R
[root@localhost ~]# service httpd restart
svn的访问地址是: http://192.168.10.64/svn/xuegod.cn
而后在浏览器上面,输入:192.168.168.140/svn
总结:配置apache+svn
1、修改配置文件:vim /etc/httpd/conf.d/subversion.conf 让apache能够支持svn
2、建立SVN用户和密码文件: /home/svn/passwd htpasswd
3、建立SVN权限管理文件:/home/svn/auth
SVN客户端使用说明
subversion windows客户端TortoiseSVN配置:
http://tortoisesvn.net/about.zh.html
新一个文件夹:localhost
取出版本为0的数据:
上传代码:
随意保存一个网页,把网页源代码复制到目录localhost中,而后提交第一个网站代码:
在浏览器里输入:192.168.168.140/svn/localhost
在Linux下测试客户端:
[root@localhost ~]# svn checkout http://192.168.10.63/svn/xuegod.cn xuegod.cn
认证领域: <http://192.168.10.63:80> SVN server of xuegod!
“root”的密码:
认证领域: <http://192.168.10.63:80> SVN server of xuegod!
用户名: tube
“tube”的密码:
经过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告
保存未加密的密码(yes/no)?no
A localhost .cn/salt主机地址密码.txt
A localhost .cn/新建虚机需知.txt
取出版本 1。
[root@localhost ~]# cd localhost/
[root@localhost localhost ]# ls
index.html TortoiseSVN - About_files TortoiseSVN - About.htm