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 < DAV svn SVNListParentPath On SVNParentPath /var/svn/repos AuthType Basic AuthName "Subversion Repository" AuthUserFile /var/svn/user AuthzSVNAccessFile /var/svn/acl Require valid-user 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} mkdir -p /home/backup/svn/$date-add-backup/revison cp /home/backup/svn/$date/revision/* /home/backup/svn/$date-add-backup/revison 五、增量备份 创建一个脚本用来实现增量备份svn_add_backup.sh,首先要有第四步操作 ##!/bin/bash date=`date +%Y%m%d` echo "之前备份的版本信息文件路径文件夹(*-add-backup)" read addback 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/$addback/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