svn搭建

mac2022-06-30  100

  第 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]\bin\TortoisePlink.exe -pw [Your Password] -l svn 比如我这里是: "D:\Program Files\TortoiseSVN\bin\TortoisePlink.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

最新回复(0)