svn安装之http访问方式
一、SVN安装与apache配置
创建以下脚本svn_http_install.sh,用来安装svn以及httpd配置
##!/bin/bash
#安装svn以及依赖包
yum -y install apr apr-util sqlite neon subversion
#创建http支持svn配置文件
cat > /root/svn_http.conf <<Eof
<location /repos/>
DAV svn
SVNListParentPath On
SVNParentPath /var/svn/repos
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /var/svn/user
AuthzSVNAccessFile /var/svn/acl
Require valid-user
</Location>
Eof
#将http支持svn配置文件写入到httpd的配置文件中
cat /root/svn_http.conf >> /etc/httpd/conf.d/subversion.conf
#创建文件控制
cat > /var/svn/acl << Eof
[groups]
admin = admin
[/]
* =
Eof
touch /var/svn/user
touch /var/svn/log
echo "这个脚本默认创建svn管理员组,管理员用户:admin = admin"
二、svn库创建
创建以下脚本svn_create.sh,用来创建svn库
首先将附件中的两个文件复制到/var/svn/路径下
#!/bin/bash
#定义库名称
echo "Enter the repo: "
read repo
real_path="file:///var/svn/repos/${repo}"
echo "Repo path: ${real_path}"
echo "Proceed (y/n)"
read proceed
#创建svn库
svnadmin create /var/svn/repos/${repo}
if [ ${proceed} = n ] || [ ${proceed} = Y ]
then
echo "Terminating ..."
exit 0
elif [ ${proceed} = y ] || [ ${proceed} = Y ]
then
echo "Initializing basic repository structure"
svn mkdir ${real_path}/{trunk,tags,branches} -m -F
#将附件中的两个文件复制到/var/svn/路径下,这两个文件用来定义svn策略,我修改这两个文件在svn提交的时候必须要有备注,而且备注信息必须要大于5个字符
cp /var/svn/pre-* "/var/svn/repos/${repo}/hooks/"
echo "Finished."
else
echo "Unknown Input. Terminating..."
exit 0
fi
chown apache:apache /var/svn/repos/${repo} -R
三、创建svn用户
以下命令用来创建svn用户
# htpasswd -mdps /var/svn/user 用户名
New password:
Re-type new password:
#创建好svn库跟svn用户之后,手动重启一下httpd服务
然后就可以在浏览器(或者svn客户端)输入http://ip/repos/库名称
四、svn备份
创建一个脚本用来实现svn库备份
##!/bin/bash
echo "此脚本是svn库数据的备份,不是增量备份"
date=`date +%Y%m%d`
mkdir -p /home/backup/svn/$date/{dump,repos,tar,newfile,revision}
echo "你是想备份整个库请输入(1),备份指定库请输入(0)"
read y
#通过一个if语句来判断是全部备份库,还是备份指定库
if [ $y -eq 1 ];then
#备份整个库,将所有的库文件信息保存到相应位置
ls /var/svn/repos/ > /home/backup/svn/$date/repos/$date.repos
fi
if [ $y -eq 0 ];then
echo "请输入svn需要备份的库的大体名称:"
echo "比如:输入tms,表示备份tms*开头的svn库"
read backup
#备份自己所需的库
ls /var/svn/repos/ | grep $backup > /home/backup/svn/$date/repos/$date.repos
fi
#通过一个for循环语句来备份所需库
for i in `cat /home/backup/svn/$date/repos/$date.repos`
do
mkdir -p /home/backup/svn/$date/dump/$i
#备份svn库,并保存到相应位置
svnadmin dump /var/svn/repos/$i > /home/backup/svn/$date/dump/$i/$i.dump
echo "$i dump finish!"
svnlook youngest /var/svn/repos/$i
#创建svn最新版本信息文件
svnlook youngest /var/svn/repos/$i > /home/backup/svn/$date/revision/$i.repos
done
#找出刚才备份的dump文件信息,保存到一个新文件
find /home/backup/svn/$date/dump/ -type f -ctime -1 > /home/backup/svn/$date/newfile/$date.newfile
#压缩dum文件为.tar.gz文件,通过dump的信息文件
tar -czvpf /home/backup/svn/$date/$date.tar.gz -T /home/backup/svn/$date/newfile/$date.newfile > /home/backup/svn/$date/tar/$date.newfile
#删除dump文件,通过上一步操作已经将dump文件压缩成一个压缩包了,所以可以删除dump文件了
rm -rf /home/backup/svn/$date/{dump,tar}
五、增量备份
创建一个脚本用来实现增量备份svn_add_backup.sh,首先要有第四步操作
##!/bin/bash
date=`date +%Y%m%d`
mkdir -p /home/backup/svn/$date-add-backup/{dump,repos,revision}
echo "增量备份整个库请输入(1),增量备份指定库请输入(0)"
read y
echo "请输入以前的版本信息文件路径"
echo "比如/home/backup/svn/20151021,那么你就输入20151021"
read time
#用来判断是否全增量备份还是部分增量备份
if [ $y -eq 1 ];then
ls /var/svn/repos/ > /home/backup/svn/$date-add-backup/repos/$date.repos
fi
if [ $y -eq 0 ];then
echo "请输入svn需要备份的库的大体名称:"
echo "比如:输入tms,表示备份tms*开头的svn库"
read backup
ls /var/svn/repos/ | grep $backup > /home/backup/svn/$date-add-backup/repos/$date.repos
fi
for i in `cat /home/backup/svn/$date-add-backup/repos/$date.repos`
do
#定义一个变量old,之前全备份时留下的库版本信息
old=`cat /home/backup/svn/$time/revision/$i.repos`
#定义一个新变量new,用来留下当前最新版本信息
new=`svnlook youngest /var/svn/repos/$i`
#通过一个if语句来判断库版本是否改变,有改变才执行一下语句,即是old < new
if [ "$old" -lt "$new" ];then
mkdir -p /home/backup/svn/$date-add-backup/dump/$i
svnlook youngest /var/svn/repos/$i > /home/backup/svn/$date-add-backup/revision/$i.repos
#备份old版本到new版本
svnadmin dump /var/svn/repos/$i --revision $old:$new --incremental > /home/backup/svn/$date-add-backup/dump/$i/$i.dump
echo "$i add_backup finish!"
fi
done
六、svn恢复
创建一个脚本用来实现svn库的恢复,前提是要先把dump文件复制到/home/backup/svn/dump/${repos}/${repos}.dump位置
##!/bin/bash
echo "请输入svn还原的库名称(先把原来的库文件删掉):"
read repos
rm -rf /var/svn/repos/${repos}
svnadmin create /var/svn/repos/${repos}
cp /var/svn/pre-* "/var/svn/repos/${repos}/hooks/"
chown apache:apache /var/svn/repos/* -R
svnadmin load /var/svn/repos/${repos} < /home/backup/svn/dump/${repos}/${repos}.dump