svn搭建

 
第 20篇 SVN版本控制
20.1  SVN简介
Subversion(SVN)是一个开源的版本控制系統,  Subversion可以管理文件、文件夹以
及记录它们的修改状况。Subversion常用来帮助我们管理软件开发的源代码或是公司手册
文档。Subversion通过将文档导入到版本库中进行管理,版本库类似文件服务器,但比文
件服务器跟强大的是,它会记住每一次文件或者目录的变动情况,并提供还原数据至老版
本的功能。
版本控制对于公司开发而言至关重要,现在的公司开发一般会有多人参与,那么每个人
手中都有自己的一份修改备份,那谁的版本是最新的,或者最终使用保留谁的那一份?如此
多的代码如何管理?SVN可以很好的去帮我们管理这些不同版本的代码。
20.2  SVN主要功能
(1)目录版本控制
CVS只能跟踪单个文件的历史,不过   Subversion实作了一个“虚拟”的版本控
管文件系统,能够依时间跟踪整个目录的变动。目录和文件都能进行版本控制。
(2)真实的版本历史
自从 CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响
所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是
没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在
Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),
无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。
(3)自动提交
一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以
逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。
(4)纳入版本控管的元数据
每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建,并儲存
任何你想要的Key/Value对。属性是随着时间来作版本控管的,就像文件內容一样。
(5)选择不同的网络层
Subversion有抽象的档案库存取概念  ,可以让人很容易地实作新的网络机制。
Subversion可以作为一个扩展模块嵌入到  Apache HTTP服务器中。这个为 Subversion提
供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能:举例来说,有身
份认证,授权,在线压缩,以及文件库浏览等等。还有一个轻量级的独立Subversion服务
器,使用的是自定义的通信协议,可以很容易地通过   ssh以  tunnel方式使用。
(6)一致的数据处理方式
Subversion使用二进制差异算法来异表示文件的差异,它对文字(人类可理解的)
与二进制文件(人类无法理解的)两类的文件都一视同仁。这两类的文件都同样地以压缩形
式储存在档案库中,而且文件差异是以两个方向在网络上传输的。
(7)有效的分支(branch)与标签(tag)
在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion建立分支与
标签的方法,就只是复制该项目,使用的方法就类似于硬连接(hard-link )。所以这些操
作只会花费很小,而且是固定的时间。
 

 
(8)Hackability
Subversion没有任何的历史包袱;它主要是一群共用的   C程序库,具有定义完善
的API。这使得 Subversion便于维护,并且可被其它应用程序与程序语言使用。
20.3安装  SVN服务器
Subversion软件在  redhat/centos系统光盘中有自带的  rpm安装包,可以直接使用
rpm/yum命令来安装。如果你想使用源码安装,可以去官网http://subversion.tigris.org/
下载(我这里采用rpm包安装)。
# yum -y install subversion
安装完软件以后,我们需要先创建一个版本库,svnadmin工具是subversion软件提供
的版本管理工具,可以用该工具来创建库、备份库、修订版本等操作。
创建完版本库以后我们还需要为版本库建立一套有效的认证机制以增强版本数据库的
安全性。
最后,当服务器端所有设置完成后,启动服务器端相应的服务进程,客户端尝试访问。
20.3  SVN配置实例
背景:公司近期刚接到一个网站项目,由于项目开发是多人进行的,所以公司希望使用版本
控制系统高效的管理项目代码,项目代码保存在/var/webcode目录下。
SVN服务器:
系统:RHEL6.4   IP:192.168.17.129
软件:subversion
1安装  SVN软件
[root@ex01 ~]# yum -y install subversion
2创建服务器版本库
安装完软件以后,我们需要先创建一个版本库,svnadmin工具是subversion软件提供
的版本管理工具,可以用该工具来创建库、备份库、修订版本等操作。
svnadmin用法:svnadmin命令  /版本库路径[选项]
常用命令:
create
创建一个新的版本库
hotcopy版本库热备
lslocks打印所有的锁描述
[root@ex01 ~]# mkdir /var/svn
[root@ex01 ~]# svnadmin create /var/svn/web_project
3初始化版本仓库中的目录
通过svnadmin命令已经建立了一个名为web_project的空版本库,下面我们使用svn
命令将项目代码导入到版本库中。import代表导入操作,将服务器/var/webcode目录下的
资料导入到刚刚建立的空版本库 web_project中,-m后面跟的是说明性文字,可以任意指
定。
[root@ex01~]#svnimport/var/webcode/file:///var/svn/web_project/-m"InitData"
[root@ex01 ~]# svn list file:///var/svn/web_project/
#列出版本库中的资料
4添加认证与授权
 

 
创建版本库后,会在web_project目录里面生成一些目录,其中conf目录下会生成3个配
置文件:
(1)svnserve.conf  svn服务配置文件下;
(2)passwd
(3)authz
用户名口令文件;
权限配置文件。
接下来分别配置这三个文件:
<1>配置svnserve.conf
使用svn内置的认证机制可以有效的增强客户端访问版本库的安全性,当客户端访问版
本库服务器时,服务器会根据版本库目录下的conf/svnserve.conf文件中定义的认证与授
权策略实现权限控制。
[root@ex01 ~]# vi /var/svn/web_project/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = My First Repository
参数解释:
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
设置拒绝匿名用户访问;
设置认证的帐号权限为可写;
指定用户名口令文件名;
指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制;
realm = My First Repository指定版本库的认证域,即在登录时提示的认证域名称。若两
个版本库的认证域相同,建议使用相同的用户名口令数据文件。
<2>配置passwd
[root@ex01 ~]# vi /var/svn/web_project/conf/passwd
[users]
uadmin = changemeadmin
ucool = changemecool
参数解释:
uadmin = changemeadmin用户名uadmin,密码为changemeadmin
ucool = changemecool
用户名ucool,密码为changemecool
<3>配置authz
[root@ex01 ~]# vi /var/svn/web_project/conf/authz
[groups]
admins = uadmin
users = ucool
[/]
@admins = rw
@users = r
参数解释:
admins = uadmin定义组,组成员有uadmin,如果有其他可以用逗号隔开来添加;
 

 
[/]
对版本库根路径设置权限(即/var/svn/);
@admins = rw
@users = r
另外 * = r
admins组中的用户可读可写;
users组中用户只能读;
其他所有人只能读。
5启动  svnserve服务
svnserve命令用法:svnserve [参数]
参数:  -d
以守护进程方式运行
--listen-port=port
指定监听端口,默认端口是3690
-r root
为版本库指定一个虚拟路径,默认客户端要指定绝对路径访问库
[root@ex01 ~]# svnserve -d
20.4客户端访问
当服务器端创建完成后,我们可以多种方式来访问SVN服务器的版本库,可以使用命令
行和图形化工具,一额可以使用本地磁盘和网络协议。当不管使用哪种方式,都需要提供一
个URL地址来定位版本库的位置,下表说明了每种URL的格式和含义。
URL格式
含义
file:///
http://
https://
svn://
直接访问本地地盘的版本库(客户端与服务器是同一机器)
配置apache的WebDAV协议,通过网页访问版本库
与http://类似,但使用了SSL进行数据加密
通过svnserve定义的协议访问版本库
svn+ssh://
与svn://相似,但使用了SSH封装加密数据
在这里我们给大家介绍两种方式,一种是命令行方式,用它来管理服务器端版本库非常高效;
另一种是通过windows客户端工具。
第一种:命令行方式管理版本库
(1)svn命令
用法:  svn命令  [选项]
--password
--username
密码
用户名
-revision(-r)
指定要检查的特定版本
命令:  add添加文件、目录或符号链接
cat输出特定文件的内容
checkout URL[@REV] [PATH]
从服务器版本库中复制一份副本到本地,URL定位版本库,通过REV可以下载特定版本的数
据,PATH为本地副本路径。
commit
将本地工作副本修改后的内容发布到版本中,简写ci
copy SRC DST
delete PATH
delete URL
diff
将工作副本中的一个文件或目录复制到版本库
从本地工作副本中删除一个项目
从版本库中删除一个项目
对比两个版本之间的差别
import
提交一个路径的副本至版本库
显示本地或远程版本信息
imfo
 

 
例子:
1提取版本库web_project里面的文件到/20140510目录
[root@ex01 mine]# svn checkout file:///var/svn/web_project/ /20140510
或者
[root@ex01 mine]# svn co file:///var/svn/web_project/ /20140510
2将副本中的文件index.php发布(提交)到版本中
[root@ex01 ~]# svn commit -m "index.php" /20140510/index.php
或者
[root@ex01 ~]# svn ci -m "index.php" /20140510/index.php
(2)svnlook命令
除了 svn命令外,svn软件包还提供了一个用于版本数据信息进行简单查询的工具,
svnlook命令可以帮助用户完成查询工作。
用法:svnlook命令  /版本库路径 [选项]
命令:  author
显示作者
cat
date
显示版本库中的文件内容
显示时间标记
log
显示日志消息
tree
显示版本库资料树
例子:
[root@ex01 ~]# svnlook author /var/svn/web_project/
查看版本2的作者信息
[root@ex01 ~]# svnlook author -r 2 /var/svn/web_project/
查看版本库中index.php的文件内容
[root@ex01 ~]# svnlook cat -r 2 /var/svn/web_project/ index.php
第二种:windows图形化工具
我们建议使用TortoiseSVN工具。它是基于GPL协议开发的开源自由软件,是一款非常优秀
的客户端程序,可以高效的帮助我们管理文件和目录。另外该软件提供多语言软件包,所以
安装完软件后,还可以在官网下载到中文简体的语言包安装。
下载地址:http://tortoisesvn.net/downloads.html
1下载安装完成后,测试提取文件,桌面右键选择“SVN检出”
 

 
2导入新文件设置,尝试把我本地电脑E:svn_src目录里面的1.txt提交到版本库
 

 
首先打开windows资源管理器进入E:svn_src
然后在该目录空白处右键选择TortoiseSVN --“导入”
 

 
最后可以去服务器端验证1.txt是否已经删除上去
[root@ex01 ~]# svnlook tree /var/svn/web_project/
另外,要删除版本库里面的某个文件可以在TortoiseSVN--“版本库浏览器”中去删除,这
里就不再做演示了。
20.5  ssh+svn服务器搭建配置
由于svnserve并不支持加密,所以对公司的数据安装危害比较大,基于SSH的svnserve
使得客户端可以通过SSH服务调用SVN服务器程序。客户端需要使用SSH程序远程连接服务
器的sshd服务,通过SSH认证机制验证账户身份后,再自动启动svnserve服务。所以服务
器端不需要提前启动svn服务。
在这种模式下,svnserve.conf配置文件依然可以进行权限控制,服务器部署流程是启
动SSH服务,其后的步骤跟上面一样。
1服务器  SSHD服务启动(一般都是开启的)
[root@ex01 ~]# chkconfig --list sshd
sshd
0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
[root@ex01 ~]# service sshd status
openssh-daemon (pid  1436)正在运行...
2添加  ssh登录的账户
[root@ex01 ~]# useradd svn
[root@ex01 ~]# passwd svn
3 svn安装配置
安装配置跟上面一样,这里我就不再累述了,只把几个不同配置文件列出来。
[root@ex01 ~]# vi /var/svn/web_project/conf/passwd
[users]
svn = changeme
#changeme是我给svn账户设置的ssh登录的密码
[root@ex01 ~]# vi /var/svn/web_project/conf/authz
[/]
svn = rw
 

 
4客户端访问
当使用svn+ssh协议连接svn服务器时,ssh会提示请求认证,由于不是svn客户端程
序来完成ssh的认证,所以不会缓存密码。而svn客户端通常会建立多个版本库的连接,
当密码没有缓存的时候,就会重复不断的提示输入密码   [三次输入密码 ]。所以可以让
TortoiseSVN去自动输入密码,一样可以避免频繁输入密码的麻烦。
(1)在桌面右键菜单中选择“TortoiseSVN”——“设置”.
(2)在弹出对话框的左侧面板中选择“网络”,在右边界面下方的“SSH客户端”中填
写:[TortoiseSVN Install Path]inTortoisePlink.exe -pw [Your Password] -l svn
比如我这里是:
"D:Program FilesTortoiseSVNinTortoisePlink.exe" -pw changeme -l svn
接下来,windows客户端使用跟上面一样,只是在地址栏URL输入的时候有些区别
20.6  apache+svn服务器搭建
前面两种服务器类型已经可以满足大多数人的需求,但当客户端没有任何工具使用时,
我们还可以创建基于apache的svn服务器,这样客户端只要有浏览器,就可以访问版本库
服务器。首先我们需要部署apache软件,其中mod_dav和mod_dav_svn两个重要模块一定
要部署加载到apache,这样apache才可以管理subversion版本库。
1安装基础依赖包
[root@ex01 /]# yum -y install gcc gcc-c++ make automake ncurses-devel zlib-devel
openssl-devel
2安装  apr和apr-until
[root@ex01 src]# wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.1.tar.gz
[root@ex01
src]#
wget
 

 
http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.3.tar.gz
[root@ex01 src]# tar zxvf apr-1.5.1.tar.gz
[root@ex01 src]# cd apr-1.5.1
[root@ex01 apr-1.5.1]# ./configure --prefix=/usr/local/apr
[root@ex01 apr-1.5.1]# make && make install
[root@ex01 src]# tar zxvf apr-util-1.5.3.tar.gz
[root@ex01 src]# cd apr-util-1.5.3
[root@ex01
apr-util-1.5.3]#
./configure
--prefix=/usr/local/apr-util
--with-apr=/usr/local/apr/
[root@ex01 apr-util-1.5.3]# make && make install
3安装   apache
[root@ex01
/]#wget
-P
/usr/local/src/
http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.27.tar.gz
[root@ex01 src]# tar zxvf httpd-2.2.27.tar.gz
[root@ex01 src]# cd /usr/local/src/httpd-2.2.27
[root@ex01 src]# tar zxvf httpd-2.2.27.tar.gz
[root@ex01
httpd-2.2.27]#
./configure
--prefix=/usr/local/apache
--with-included-apr
--enable-so
--enable-dav
--enable-ssl
--with-apr=/usr/local/apr/bin/apr-1-config
--with-apr-util=/usr/local/apr-util/bin/apu-1-config
[root@ex01 httpd-2.2.27]# make && make install
[root@ex01 httpd-2.2.27]# cp build/rpm/httpd.init /etc/init.d/httpd
[root@ex01 httpd-2.2.27]# chmod 755 /etc/init.d/httpd
[root@ex01 httpd-2.2.27]# chkconfig --add httpd
[root@ex01 httpd-2.2.27]# chkconfig --level 35 httpd on
[root@ex01 httpd-2.2.27]# ln -fs /usr/local/apache/ /etc/httpd
[root@ex01 httpd-2.2.27]# ln -fs /usr/local/apache/bin/httpd /usr/sbin/httpd
[root@ex01
httpd-2.2.27]#
ln
-fs
/usr/local/apache/bin/apachectl
/usr/sbin/apachectl
[root@ex01 httpd-2.2.27]# ln -fs /usr/local/apache/logs /var/log/httpd
注意:configure配置的时候--enable-dav是不能缺少的。
4
安装  SVN
下载地址:http://subversion.tigris.org/
[root@ex01
src]#
wget
http://mirror.bit.edu.cn/apache/subversion/subversion-1.8.9.tar.gz
[root@ex01 src]# tar zxvf subversion-1.8.9.tar.gz
[root@ex01 src]# wget  http://www.sqlite.org/sqlite-amalgamation-3071501.zip
[root@ex01 src]# unzip sqlite-amalgamation-3071501.zip
[root@ex01
src]#
mv
sqlite-amalgamation-3071501
/usr/local/src/subversion-1.8.9/sqlite-amalgamation
[root@ex01 src]# cd subversion-1.8.9
[root@ex01   subversion-1.8.9]#    ./configure   --prefix=/usr/local/subversion
 

 
--with-apxs=/usr/local/apache/bin/apxs
--with-apr=/usr/local/apr
--with-apr-util=/usr/local/apr-util --with-openssl --enable-maintainer-mode
[root@ex01 subversion-1.8.9]# make && make install
[root@ex01 subversion-1.8.9]# ln -s /usr/local/subversion/bin/svn /usr/bin/
[root@ex01 subversion-1.8.9]# ln -s /usr/local/subversion/bin/svnadmin /usr/bin/
[root@ex01 ~]# ln -s /usr/local/subversion/bin/svnserve /usr/bin/
5创建版本库
[root@ex01 ~]# mkdir /var/webcode2
[root@ex01 ~]# echo "111">>/var/webcode2/index.html
[root@ex01 ~]# mkdir -p /var/svn
[root@ex01 ~]# svnadmin create /var/svn/web_project2
[root@ex01 ~]# svn import /var/webcode2/ file:///var/svn/web_project2/ -m "web3"
6配置   apache
[root@ex01
~]#
cp
/usr/local/subversion/libexec/mod_dav_svn.so
/usr/local/subversion/libexec/mod_authz_svn.so
/usr/local/apache/modules/
[root@ex01
~]#
cp
/usr/local/apache/modules/
[root@ex01 ~]# vi /etc/httpd/conf/httpd.conf
LoadModule dav_svn_module
modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNListParentPath On
SVNParentPath /var/svn
AuthzSVNAccessFile /var/svn/authz
AuthType Basic
AuthName "Please input username and password"
AuthUserFile /var/svn/.password
Require valid-user
</Location>
[root@ex01 ~]# /usr/local/apache/bin/htpasswd -mc /var/svn/.password svnadmin
(如果还需要添加其他用户用-m即可)
[root@ex01 ~]# chown -R daemon:daemon /var/svn/
[root@ex01 ~]# service httpd start
[root@ex01 ~]# chkconfig --add httpd
[root@ex01 ~]# chkconfig httpd on
7配置   svn
[root@ex01 conf]# cp authz /var/svn/web_project2/conf/authz /var/svn/auth
[root@ex01 ~]# vi /var/svn/authz
[/]
svnadmin = rw
 

 
* = r
8启动   svn
[root@ex01 ~]# svnserve -d
9浏览器输入地址尝试访问
 

原文地址:https://www.cnblogs.com/fanren224/p/8457320.html