SVN使用手册apache整合了

http://hzcsky.blog.51cto.com/1560073/475604

一、SVN介绍

SVN是一个版本控制工具,Subversion 的版本库(repository),就是位于服务器端,统一管理和储存数据的地方。

 

要创建一个版本库,首先要确定采用哪种数据存储方式。在 Subversion 中,版本库的数据存储有两种方式,一种是在 Berkeley DB 数据库中存放数据;另一种是使用普通文件,采用自定义的格式来储存,称为 FSFS。

二、SVN的搭建

1、所需软件包

httpd-2.2.4

apr-1.3.8.tar.gz、apr-util-1.3.9.tar.gz

sqlite-amalgamation-3.6.17.tar.gz

subversion-1.6.5.tar.bz2

expat-1.95.7-4、expat-devel-1.95.7-4

客户端:TortoiseSVN-1.6.5.16974-win32-svn-1.6.5.msi、

2、安装SVN

安装apache

# ./configure –prefix=/usr/local/apache2

–enable-dav

–enable-so

–enable-modules=most

//注:编译apache时要加上–enable-dav选项

# make

# make install

 

安装apr、apr-util

# tar -zxvf apr-1.3.8.tar.gz -C /usr/src

# cd /usr/src/apr-1.3.8

# ./buildconf             //验证系统是否有python、autoconf、libtool

# ./configure –prefix=/usr/local/apr

# make

# make install

 

# tar -zxvf apr-util-1.3.9.tar.gz -C /usr/src

# cd /usr/src/apr-util

# ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr

# make

# make install

 

安装sqlite

#./configure –prefix=/usr/local/sqlite

# make

# make install

 

安装svn

# tar -jxvf subversion-1.6.5.tar.bz2 -C /usr/src

# cd /usr/src/subversion-1.6.5/

# ./configure –prefix=/usr/local/svn   –with-apxs2=/usr/local/apache2/bin/apxs

–with-apr=/usr/local/apr

–with-apr-util=/usr/local/apr-util

–with-sqlite=/usr/local/sqlite/   –with-ssl   –with-zlib打开zlib库支持

–enable-maintainer-mode    打开调试和编译时警告,仅供开发人员使用

# make

# make install

 

3、apache的整合

 

 

修改APache配置文件

 

#vi /usr/local/apache/conf/httpd.conf

User www           修改apache默认启用用户为www

Group www

找到DocumentRoot “/usr/loca/apache/htdocs” 和</Directory “/usr/local/apache/htdocs”>   修改apache的主页到/WWW下

DocumentRoot “/www”

<Directory “/www”>

配置apache中svn认证

<Location /svn>                 //设置url,代表要访问的仓库的父目录

DAV svn

SVNParentPath /data/svn       //svn根目录

AuthType Basic

AuthName “SVN Test”

AuthzSVNAccessFile /data/svn/authz.conf //svn认证文件,创建一个authz.conf文件

AuthUserFile /data/svn/authfile   //apache认证文件

Require valid-user

</Location>

启动apache

/usr/local/apache/bin/apachectl start

绑定域名

#cat /usr/local/apache/conf/extra/httpd-vhosts.conf

测试域名绑定成功

 

4、SVN使用

创建svn项目仓库

# mkdir /data/svn                创建svn根目录

# svnadmin create /data/svn/drug  //创建项目仓库drug

# /usr/local/svn/bin/svn import /www/drug file:///data/svn/drug -m “import “

将/www/drug导入到svn库下

注:在导入仓库后,原来的目录树并没有转化成一个工作副本,需要使用checkout手动导出一个工作副本。

#chown �R www:www /data/svn/drug

#svn checkout file:///data/svn/drug /www/drug_new

修改目录的属主为www

#chown �R www:www /www/drug_new

#chmod �R 700 /data/svn/

编写svn与apache同步脚本

#vi /data/svn/drug/hooks/post_commit

#!/bin/sh

export LC_CTYPE=zh_CN.GB18030  语言支持

SVN=/usr/local/svn/bin/svn          指定svn路径

WEB=/www/drug                  指定apache虚拟主机路径

$SVN update $WEB �username www �password xywyxywy

赋予脚本执行权限

#chmod 700 post-commit

#chown www:www post-commit

创建apache认证用户

# /usr/local/apache2/bin/htpasswd -(c)m /data/svn/authfile sum

输入密码:sum123

# /usr/local/apache/bin/htpasswd /data/svn/authfile wyj

//再添加一个用户

 

Svn权限配置文件

# vi /data/svndata/authz.conf

[drug:/]            //表示仓库drug根目录

sum = rw           //用户sum对drug库有读写权限

hou = r             //用户wyj对drug库有读写权限

[/]

* = r                //这个表示对所有的用户都具有读权限

[groups]           //这个表示群组设置

developers = sum, hou  //developers组中的用户

[pro1:/]

@svn1-developers = rw  //对这个组有读写权限

 

启动svn服务

svnserver -d -r /data/svndata

设置svn和apache服务开机自动启用

#vi /etc/rc.local

/usr/local/apache/bin/apachectl start

svnserve �d �r /data/svn

 

 

5.客户端使用

 

在客户机上安装TortoiseSVN-1.6.5.16974-win32-svn-1.6.5.msi

在客户机上从服务器上checkout工作副本

在URL of repository一栏中输入svn服务器的checkout地址

 

在新的项目里面添加一个文件然后提交,查看/www/drug/ 里面有没有添加的文件,来证实svn库能够同步更新到linux下面那个虚拟主机的没。

三、SVN管理命令

1、svn命令

导入数据到版本库

# svnadmin create /data/svndata/pro1

# svn import /www/shop file:///data/svndata/pro1 -m “import”

查看版本库下的内容

# svn list file:///data/svndata/pro1

注:在导入仓库后,原来的目录树并没有转化成一个工作副本,需要使用checkout手动导出一个工作副本。

从版本库导出数据

# svn checkout file:///data/svndata/pro1

取出任意深度的数据

# svn checkout file:///data/svndata/pro1/ad/html

将数据放到新目录

# svn checkout file:///data/svndata/pro1 testweb

//将pro1工作副本放到testweb中,而不是默认生成的pro1目录

# svn co file:///data/svn/my_xywy_com/ /www/other/my.xywy.com

// 导出my_xywy_com全部文件,到/www/other/my.xywy.com下

它可以显示工作副本中的所有项目

# svn status -u -v

18       16 sum          fff.txt

18        1 root          index2.php

18       10 sum          index20090416.html

18       17 sum          111/fff.txt

18       17 sum          111/index2.php

18       17 sum          111/index20090416.html

18       17 sum          111/index.jsp

2、svnlook命令

查看当前的版本仓库内容

# svnlook info 版本仓库

Sum //作者

2009-09-10 11:51:17 +0800 (Thu, 10 Sep 2009) //提交时间

0 //最后一次提交参数信息

查看最近一次更新的修订号

# svnlook youngest 版本仓库

显示一个版本仓库中文件和目录的树形结构图

# svnlook tree /data/svndata/pro2/ –show-ids

jytk.html <0-1.0.r1/232049>

gallery.php <3-1.0.r1/232223>

gywm.html <5-1.0.r1/232402>

database.php <7-1.0.r1/232579>

lxyp.html <b-1.0.r1/232979>

查看仓库中某一个文件内容

# svnlook cat /data/svndata/pro2/ index.html   //查看pro2项目的index.html文件中的内容

显示被修改的文件

# svnlook diff /data/svndata/pro2/

Added: 11.txt //显示增加了11.txt文件

3、导出svn版本库中的文件夹

若要彻底删除SVN版本库某文件夹,可以使用下面的方法。

查看项目sumitest中的列表

# svn list file:///data/svn/sumitest

fxywy/

fxywy/src

jxywy/

jxywy/src

src/

要把fxywy/src文件夹删除,重新导入到新的项目sumitest2中,方法如下:

# svnadmin dump /data/svn/sumitest > sumi1.dump

// 导出sumitest整个项目到sumi1.dump

# cat sumi1.dump | /usr/local/svn/bin/svndumpfilter exclude /fxywy/src > sumi2.dump

// 从sumi1.dump过滤出/fxywy/src目录。Windows中cat换成type

# svnadmin create /data/svn/sumitest2

// 创建新的项目库

# svnadmin load /data/svn/sumitest2 < sumi2.dump

//导出/fxywy/src 到sumitest2库

4、删除svn版本库中的文件夹

svn delete 可以从工作拷贝或版本库删除一个项目。

# svn delete -m “Deleting file”file:///data/svn/sumitest2/fxywy/

// 删除sumitest2下的/fxywy目录

 

 

 

 

四、SVN错误

1、CentOS5 安装svn时,make时出现下面的错误

 

/usr/bin/ld: cannot find -lexpat

collect2: ld returned 1 exit status

make: *** [subversion/svn/svn] Error 1

解决方法

缺少-lexpat 库文件,找安装盘中的

# rpm -ivh expat-x.x.x.x.rpm

# rpm -ivh expat-devel-x.x.x.x.rpm

 

3、在MyEclipse进行Java开发,用SVN进行版本控制。Update时提示如下错误

 

update -r HEAD D:/xywyworkspace/fxywy

Working copy not locked; this is probably a bug, please report

svn: Directory ‘D:xywyworkspacefxywyWebRootWEB-INFclassescom.svn’ containing working copy admin area is missing

原因是eclipse把src文件夹中的.svn文件夹也“编译”到WEB-INF/classes中去了,而复制过来的.svn中存储的是src文件夹中的版本信息,从而导致在更新时出错。

解决方法:

打开Eclipse中的 Project->Properties->Java Build Path 菜单,在右侧面板中的“Source”选项卡,在Excluded中加入“**/.svn/**”。也就是把.svn文件夹从编译路径中排除,这样就不会出现上面的问题了。

4、当提交时显示如下错误:

 

attempt to write a readonly database

则是因为/data/svn/yishengquan/db 目录中,权限不是apache可写的权限。修改db目录权限为apache可写即可。

# chmod www:www /data/svn/yishengquan/db

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>