关闭selinux
groupadd -g 1001 www
useradd -g 1001 -u 1001 -s /sbin/nologin www
#####必须给予运行subversion的用户以家目录,否则后面的钩子过不去####
yum -y install openssl-devel gd-devel zlib-devel libxml2-devel
cd /home/tools
tar xvjf apr-1.4.2.tar.bz2
cd apr-1.4.2
./configure --prefix=/usr/local/apr
make
make install
cd /home/tools
tar xvjf apr-util-1.3.10.tar.bz2
cd apr-util-1.3.10
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
cd /home/tools
tar xvjf httpd-2.2.17.tar.bz2
cd httpd-2.2.17
./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-dav --enable-so
make
make install
cd /home/tools
tar xvzf expat-2.0.1.tar.gz
cd expat-2.0.1
./configure
make
make install
echo '/usr/local/lib' >> /etc/ld.so.conf
ldconfig -v
把/usr/local/lib目录加进动态库,否则下面会报错
cd /home/tools
tar xvjf subversion-1.6.16.tar.bz2
mkdir -p /home/tools/subversion-1.6.16/sqlite-amalgamation
cd /home/tools
tar xvzf sqlite-amalgamation-3.6.16.tar.gz
cd sqlite-3.6.16
cp sqlite3.c /home/tools/subversion-1.6.16/sqlite-amalgamation
cd /home/tools/subversion-1.6.16
./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-apxs=/usr/local/apache/bin/apxs
make
make install
sed -i 's/User daemon/User www/' /usr/local/apache/conf/httpd.conf
sed -i 's/Group daemon/Group www/' /usr/local/apache/conf/httpd.conf
echo '' >> /usr/local/apache/conf/httpd.conf
echo 'DAV svn' >> /usr/local/apache/conf/httpd.conf
echo 'SVNParentPath /app/svnroot/' >> /usr/local/apache/conf/httpd.conf
echo 'AuthzSVNAccessFile /app/svnroot/authz.conf' >> /usr/local/apache/conf/httpd.conf
echo 'AuthType Basic' >> /usr/local/apache/conf/httpd.conf
echo 'AuthName "www"' >> /usr/local/apache/conf/httpd.conf
echo 'AuthUserFile /app/svnroot/authfile' >> /usr/local/apache/conf/httpd.conf
echo 'Require valid-user' >> /usr/local/apache/conf/httpd.conf
echo '' >> /usr/local/apache/conf/httpd.conf
mkdir -p /app/svnroot/
chown -R www:www /app/svnroot/
/usr/local/subversion/bin/svnadmin create /app/svnroot/femart
/usr/local/subversion/bin/svnadmin create /app/svnroot/femart/
echo '[groups]' >> /app/svnroot/authz.conf
echo 'admin = www' >> /app/svnroot/authz.conf
echo '[/]' >> /app/svnroot/authz.conf
echo '@admin = rw' >> /app/svnroot/authz.conf
echo '[manwrx:/]' >> /app/svnroot/authz.conf
echo '@admin = rw' >> /app/svnroot/authz.conf
/usr/local/apache/bin/htpasswd -c /app/svnroot/authfile pinla
/usr/local/apache/bin/htpasswd -c /opt/svn/femart/authfile pinla
/usr/local/apache/bin/htpasswd -c /opt/svn/femart/authfile test
输入两次密码
####增加其他用户时将-c去掉,其他一样
/usr/local/apache/bin/apachectl start
###假如:发布网站根目录为/usr/local/apache/htdocs/
cd /usr/local/apache/htdocs
rm -fr *
/usr/local/subversion/bin/svn checkout file:///app/svnroot/pinla /usr/local/apache/htdocs
/usr/local/subversion/bin/svn checkout file:///app/svnroot/test /usr/local/apache/htdocs
/usr/local/subversion/bin/svn checkout file:///app/svnroot/femart /usr/local/apache/htdocs
###创建钩子,其实就是一个脚本,用户在提交的时候触发####
vi /app/svnroot/femart/hooks/post-commit
#!/bin/bash
REPOS="$1"
REV="$2"
svn=/usr/local/subversion/bin/svn
web=/data/httpd/b2c
$svn update file:///app/svnroot/femart $web --username=test --password=aaaAAA111
chown -R www:www /app/svnroot/
chown -R www:www /usr/local/apache
#####这样发布代码是方便了很多,但是svn会有一个隐藏目录为.svn。是svn为了记录版本的更新。所以为了安全必须在webserver上deny 这个目录
启动svn服务
svnserver -d -r /data/svndata
设置svn和apache服务开机自动启用
#vi /etc/rc.local
/usr/local/apache/bin/apachectl start
svnserve –d –r /data/svn
四、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.
18 10 sum index20090416.html
18 17 sum 111/fff.txt
18 17 sum 111/index2.
18 17 sum 111/index20090416.html
18 17 sum 111/index.
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
查看仓库中某一个文件内容
# 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目录