Svn工做原理和服务搭建

 

                                     Svn工做原理和服务搭建
 
简介
subversion(如下简称svn)版本管理工具,是cvs的接班人。
svn服务器有2种运行方式:独立服务器和借助apache,2种方式各有利弊。
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不须要数据库的存储系统)。由于BDB方式在服务器中断时,有可能锁住数据,因此仍是FSFS方式更安全一点。
一下安装为借助apache的运行方式
 
1、安装所需软件包
一、安装httpd
[root@localhost ~]# tar xvf httpd-2.2.15.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/httpd-2.2.15/
[root@localhost httpd-2.2.15]# 
[root@localhost httpd-2.2.15]# ./configure --prefix=/usr/local/apache-2.2.15 --enable-dav --enable-so --enable-rewrite --enable-modules=most
[root@localhost httpd-2.2.15]# make
[root@localhost httpd-2.2.15]# make install
 
二、安装apr、apr-util
[root@localhost ~]# tar xvf apr-1.3.8.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/apr-1.3.8/
[root@localhost apr-1.3.8]# ./configure --prefix=/usr/local/apr-1.3.8
[root@localhost apr-1.3.8]# make
[root@localhost apr-1.3.8]# make install
[root@localhost ~]# tar xvf apr-util-1.3.9.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/apr-util-1.3.9/
[root@localhost apr-util-1.3.9]# ./configure --prefix=/usr/local/apr-util-1.3.9 --with-apr=/usr/local/apr-1.3.8/
[root@localhost apr-util-1.3.9]# make
[root@localhost apr-util-1.3.9]# make install
 
三、安装sqlite
[root@localhost ~]# tar xvf sqlite-amalgamation-3.6.13.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/sqlite-3.6.13/
[root@localhost sqlite-3.6.13]# ./configure --prefix=/usr/local/sqlite-3.6.13
[root@localhost sqlite-3.6.13]# make
[root@localhost sqlite-3.6.13]# make install
 
四、安装 none
[root@localhost ~]# tar xvf neon-0.29.6.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/neon-0.29.6/
[root@localhost neon-0.29.6]# ./configure --prefix=/usr/local/neon-0.29.6 --enable-shared
[root@localhost neon-0.29.6]# make
[root@localhost neon-0.29.6]# make install
 
五、安装libtool、expat  (expat  expat-devel)
yum -y install expt*
yum -y install libtool*
 
2、安装svn
确认全部所需的软件包所有安装
[root@localhost local]# ls
apache-2.2.15  apr-1.3.8  apr-util-1.3.9  bin  etc  games  include  lib  lib64  libexec  neon-0.29.6  sbin  share  sqlite-3.6.13  src
[root@localhost local]# 
 
一、编译安装svn
[root@localhost ~]# tar xvf subversion-1.6.6.tar.bz2 -C /usr/local/src/
[root@localhost ~]# tar xvf subversion-deps-1.6.6.tar.bz2 -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/subversion-1.6.6/zlib/
[root@localhost zlib]# ./configure --shared
[root@localhost zlib]# make
[root@localhost zlib]# make install
[root@localhost zlib]# cd ..
[root@localhost subversion-1.6.6]# ./configure --prefix=/usr/local/svn-1.6.6  --with-apxs=/usr/local/apache-2.2.15/bin/apxs --with-apr=/usr/local/apr-1.3.8/ --with-apr-util=/usr/local/apr-util-1.3.9/ --with-sqlite=/usr/local/sqlite-3.6.13/ --with-neon=/usr/local/neon-0.29.6/ --with-ssl --with-zlib=/usr/local/src/subversion-1.6.6/zlib/
注:若是最后出现下面WARNING,咱们直接忽略便可。由于不使用BDB存储。
[root@localhost subversion-1.6.6]# make
[root@localhost subversion-1.6.6]# make install
确认是否安装成功
[root@localhost ~]# cd /usr/local/apache-2.2.15/conf/
[root@localhost conf]# vim httpd.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
 
二、建立版本库
一、建立版本库
[root@localhost ~]# /usr/local/svn-1.6.6/bin/svnadmin create /svn/www/
[root@localhost ~]# ls /svn/www/
conf  db  format  hooks  locks  README.txt
 
二、修改库配置文件
[root@localhost ~]# cd /svn/www/conf/
[root@localhost conf]# vim svnserve.conf
anon-access = none    #使非受权用户没法访问
auth-access = write    ##使受权用户有写权限
password-db = /svn/www/conf/passwd # 指明密码文件路径
authz-db = /svn/www/conf/authz # 访问控制文件
realm = www Repository # 认证命名空间,subversion会在认证提示里显示,而且做为凭证缓存的关键字。
 
三、添加apache认证用户
[root@localhost conf]# /usr/local/apache-2.2.15/bin/htpasswd -c /svn/www/conf/passwd test
New password: 
Re-type new password: 
Adding password for user test
 
四、修改svn认证文件
[root@localhost ~]# cd /svn/www/conf/
[root@localhost conf]# vim authz 
[groups]
groupA=www
[www:/]
@groupA = rw  或者   www = rw(能够对单个用户定义权限)
 
五、配置apache中svn认证
最后面添加
[root@localhost ~]# cd /usr/local/apache-2.2.15/conf/
[root@localhost conf]# vim httpd.conf
<Location /www>
DAV svn
SVNPath /svn/www                              #库文件路径
AuthType Basic                                #基本认证
AuthName "Welcome To www Repository"
AuthUserFile /svn/www/conf/passwd             #apache认证文件
AuthzSVNAccessFile /svn/www/conf/authz        #svn认证文件
Require valid-user                            #告诉apache在authfile中全部的用户均可以访问。若是没有它,则只能第一个用户能够访问新建库。
 
</Location>
 
六、修改权限
root@localhost ~]# chown -R daemon:daemon /svn/www/
能够修改环境变量方便执行命令
[root@localhost ~]# vim .bash_profile
PATH=$PATH:/usr/local/svn-1.6.6/bin/
[root@localhost ~]# source .bash_profile   #使之马上生效
 
七、启动apache 和svn
[root@localhost conf]# /usr/local/apache-2.2.15/bin/apachectl start
[root@localhost conf]# /usr/local/svn-1.6.6/bin/svnserve -d -r /svn/
   此指令用于启动svn服务,-d指明以守护模式运行,svn自动在3690端口监听,-r选项用来指定svn服务的根目录,这样用户就可使用相对路径访问,而不用提供完整路径。
 
八、测试
一、在浏览器中输入
http://svn服务器IP/www
输入用户名密码访问
二、用客户端
 
三、svn平常管理命令
一、建立版本库
[root@localhost ~]# svnadmin create /svn/www/
www 为建立的版本库
 
二、导入数据到版本库
[root@localhost ~]# ll test/
总用量 0
-rw-r--r--. 1 root root 0  3月 27 01:23 a
-rw-r--r--. 1 root root 0  3月 27 01:23 b
-rw-r--r--. 1 root root 0  3月 27 01:23 c
[root@localhost ~]# svn import /root/test/ file:///svn/www/ -m "import"
增长           /root/test/a
增长           /root/test/b
增长           /root/test/c
提交后的版本为 1。
 
三、查看版本库内容
查看版本库最新版本
[root@localhost ~]# svnlook youngest /svn/www
5
查看版本库中的内容
[root@localhost ~]# svn list file:///svn/www/
a
b
c
[root@localhost ~]# 
显示一个版本仓库中文件和目录的树形结构图
[root@localhost ~]# svnlook tree /svn/www/ --show-ids
/ <0.0.r1/626>
 a <0-1.0.r1/51>
 b <3-1.0.r1/207>
 c <5-1.0.r1/365>
[root@localhost ~]# 
显示被修改的文件
[root@localhost ~]# svnlook diff /svn/www/
已修改: a
===================================================================
--- a 2012-03-26 17:24:56 UTC (rev 1)
+++ a 2012-03-26 17:32:21 UTC (rev 2)
@@ -0,0 +1 @@
+test
\ No newline at end of file
[root@localhost ~]#
 
四、svn备份
备份
svnadmin -h 显示svnadmin命令的子命令
svnadmin dump -h 显示dump命令的子参数命令
一、彻底备份版本库,并保存为www_full_bak
[root@localhost ~]# svnadmin dump /svn/www > /root/www_full_bak
二、以增量把版本库版本5的信心并转存到www_bak_1
[root@localhost ~]# svnadmin dump /svn/www/ -r 5 --incremental > /root/www_bak_5
对于一些较大的版本库能够分解备份
[root@localhost ~]# svnadmin dump /svn/www/ -r 10:20 --incremental > /root/www_bak_10-20
参数介绍:
  -r [--revision] ARG      : 指定版本 ARG (或 X:Y 范围)
  --incremental            : 以增量方式进行转存
  --deltas                 : 在转存输出中使用差别
  -q [--quiet]             : 在标准错误输出不显示进度 (仅错误)
三、热拷贝www这个版本库,能够直接拿来用,但要确保权限
[root@localhost ~]# svnadmin hotcopy /svn/www/ /root/www_hotcopy
 
五、SVN还原
[root@localhost ~]# svnadmin load /svn/www/ < /root/www_full_bak 
还原彻底备份
[root@localhost ~]# svnadmin dump /svn/www/ -r 5 --incremental > /root/www_bak_1
再还原增量备份
[root@localhost ~]# svnadmin dump /svn/www/ -r 10:20 --incremental > /root/www_bak_1
[root@localhost ~]# svnadmin dump /svn/www/ -r 21:40 --incremental > /root/www_bak_1
 
六、SVN合并
一、建立版本库crazy
svnadmin create /svn/crazy
二、备份/svn/www 和 /svn/redhat 版本库
[root@localhost ~]# svnadmin dump /svn/www > /root/www_full_bak
[root@localhost ~]# svnadmin dump /svn/redhat/ > /root/redhat_full_bak
三、合并版本库
[root@localhost ~]# svnadmin load /svn/crazy/ --parent-dir test  < /root/www_full_bak 
[root@localhost ~]# svnadmin load /svn/crazy/ --parent-dir test1 < /root/redhat_full_bak 
 
七、备注
[root@localhost ~]# svn -h
[root@localhost ~]# svnlook -h
[root@localhost ~]# svnadmin -h
[root@localhost ~]# svnadmin dump -h
查看帮助信息
 

3、Svn结合Apachesql

一、添加同步脚本 数据库

须要同步的版本库(www)apache

[root@localhost svn]# ls /svn/vim

www浏览器

添加同步脚本 缓存

[root@localhost hooks]# pwd 安全

/svn/www/hooks
[root@localhost hooks]# cat post-commit
#!/bin/bash
export LANG=en_US.UTF-8                           字符集
SVN=/usr/local/svn-1.6.6/bin/svn                  SVN命令
WEB=/usr/local/apache-2.2.15/htdocs/              WEB目录
$SVN update $WEB --username test --password test  同步更新bash

改权限 服务器

[root@localhost hooks]# pwd ide

/svn/www/hooks

[root@localhost hooks]# chown daemon:daemon post-commit

[root@localhost hooks]# chomd 700 post-commit

[root@localhost htdocs]# pwd

/usr/local/apache-2.2.15/htdocs

[root@localhost htdocs]# chown -R daemon.daemon htdocs/

二、报错解决

post-commit hook failed (exit code 255) with no output.

[root@localhost hooks]# chomd 700 post-commit

[root@localhost hooks]# chown daemon:daemon post-commit

svn: Can't open file '/usr/local/apache-2.2.15docs/.svn/lock': Permission denied

[root@localhost htdocs]# pwd

/usr/local/apache-2.2.15/htdocs
[root@localhost htdocs]# chown -R daemon.daemon htdocs/

相关文章
相关标签/搜索