SVN迁移并做定时增量同步库操作

SVN迁移并做同步库操作步骤:

1.备份SVN,按项目仓库备份出各仓库。 参考 

svnadmin dump E:\Repositories\Software >e:\svnbak\Software.dump

2.将SVN上传到服务器。 参考 

windows :
   pscp -P 22 D:/SVNbak/Software.dump root@IP:/svn/svnbak
linux : 
  sshpass -p Password scp /u01/svn/bak/Software.dump root@IP:/svn/svnbak/Software.dump

  

3.linux环境搭建SVN,安装Apache的 httpd功能模组,将SVN协议转为http供客户端访问,权限走http权限。参考《linux-svn-http.txt》

#创建仓库 ,更改文件权限
svnadmin create /data/svn/repository/Software
chown -R apache.  Software 

#chown -R apache. /svn/repository
#chmod 777 -R /svn/repository/


#启动仓库,httpd映射后不需要启动SVN仓库
#svnserve -d -r /svn/repository
#关闭
#kill all svnserve

#安装apache服务
#查看httpd是否已经安装的svn模块
ls /etc/httpd/modules/ | grep svn

#安装httpd映射
yum --disableexcludes=all install -y httpd
#添加模块
yum install mod_dav_svn -y


2、安装完成,对svn版本库下的项目ProjectName进行位置映射
在/etc/httpd/conf.d/文件下创建subversion.conf文件并编辑
# vi subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
<Location /repos>
   DAV svn
   SVNParentPath /u01/svn/repository/

   ##<LimitExcept GET PROPFIND OPTIONS REPORT>
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /u01/svn/repository/svnusers.conf # 用户文件
      AuthzSVNAccessFile /u01/svn/repository/accesspolicy.conf  #权限文件
      Require valid-user
   ##</LimitExcept>
</Location>
#添加用户
 
htpasswd -mb /svn/repository/svnusers.conf username password#
 

#修改端口
cd /etc/httpd/conf/
cp httpd.conf httpd.conf.bak
vim httpd.conf
Listen 80这一行,修改为 8000

#添加用户组
groupadd apache 
useradd -g apache apache 

service httpd restart

 

  

4.重复3操作创建同步库。

5.将各项目备份导入到对应的仓库。参考 

svnadmin create /svn/repository/Software
svnadmin load /svn/repository/Software< /svn/svnbak/Software.dump

  

6.每天定时导出当天最新更新的代码备份,并将此备份导入到同步库。参考《增量备份-同步.txt》《Software_bak.sh》《Software_load.sh》

增量备份-同步.txt 

#查询两个svn仓库最新版本 
svnlook youngest  /svn/repository/Software
9434
svnlook youngest  /u01/svn/repository/Software
9482

#svnadmin dump命令做版本区间 -r 9435:9482 的备份

svnadmin dump /svn/repository/Software -r 9435:9482 --incremental  > /svn/svnbak/Software_20200908.dump

# 将备份文件传到服务器
sshpass -p **** scp /u01/svn/bak/Software_20200908.dump root@47.104.103.86:/svn/svnbak/Software_20200908.dump
 

#导入备份到svn仓库
svnadmin load /svn/repository/Software< /svn/svnbak/Software_20200908.dump



#搭建完以后发现可以update但不能提交的一个问题:

#Error: could not begin a transaction  

chcon -R -t httpd_sys_rw_content_t /u01/svn/repository/Software/



#添加定时任务 
crontab -e

30 23 * * * root /u01/svn/bak/Software_bak.sh

30 1 * * * root /svn/svnbak/Software_load.sh > /dev/null

  

Software_bak.sh

#!/bin/bash
#set -x
#function:SVN增量备份

#Author: heshan
svn_repos="/u01/svn/repository/Software"  #版本库
backup_dir="/u01/svn/bak" #nfs挂载从服务器192.168.1.x的目录
next_backup_file="Software_backup".`date +%Y%m%d`  #增量备份文件
log="$backup_dir/Software_backed_up.log"   #日志文件
repo="$backup_dir/svn.txt"   #记录版本库最新版本
sshpass -p Guideir@2020 scp root@47.104.103.86:/svn/svnbak/slave.txt $backup_dir/slave.txt
echo "********************"`date`"***************">> $log
if [ -f $repo ];then
   echo " $repo 文件存在!" >> $log
else
  echo " $repo 文件不存在!" >> $log
  touch  $repo
  echo "0">$repo #从0开始备份
fi
echo "SVN ADD DUMP start!">> $log
first_rev="`cat $repo`" #备份起点
echo "$first_rev 备份起点">> $log
last_rev="`svnlook youngest $svn_repos`" #注服务器版本库最新版本
echo "$last_rev  本机服务最新版本">> $log
backup_repo="$backup_dir/slave.txt"
echo "$backup_repo  目标下移个开始版本">> $log
if [ -f $backup_repo ];then
   echo " $backup_repo 文件存在!" >> $log
else
  echo " $backup_repo 文件不存在!" >> $log
  touch $backup_repo
  exit 0
  #echo "0">$backup_repo #第一次 从0开始
fi
slave_rev="`cat  $backup_repo`" #从服务器提供的校验版本
echo "$slave_rev 从服务器提供的校验版本">> $log
if [ "$first_rev" -ne "$slave_rev" ];then
  #echo"SVN Slaves is error, please check. " | mail -s "SVN slave is ERROR! first_rev !== slave_rev"      #主服务器备份起点版本和从>数据最后版本不一致,则邮件报警
  echo  "SVN 主从服务脚本中版本号不一致, 请检查备份开始版本号!">> $log
  exit 0
else
     if [ "$first_rev" -le "$last_rev" ];then
      svnadmin dump --incremental --revision $first_rev:$last_rev $svn_repos > $backup_dir/$next_backup_file  #上一次记录的版本,到>最新版本的增量备份
     else
          echo " no update record!" >> $log
          #rm -rf $backup_dir/access.conf
          #rm -rf $backup_dir/auth.conf
          #cp $svn_repos/access.conf  $backup_dir/
          #cp $svn_repos/auth.conf  $backup_dir/
          exit 0
     fi
fi
echo "Fist:$first_rev">> $log
echo "Last:$last_rev">> $log #写入日志文件
#dump_rev=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"` #下一次备份起点,重点 +1版本,否则报错
dump_rev="`/usr/bin/expr $last_rev + 1 `"
echo "$dump_rev  "
echo $dump_rev>$repo  #覆盖上一次备份起点
#删除之前的增量备份文件
rm -rf $backup_dir/Software_backup.$(date +%Y%m%d --date='1 days ago')
sshpass -p Guideir@2020 scp $backup_dir/$next_backup_file root@47.104.103.86:/svn/svnbak/$next_backup_file

  

Software_load.sh

#!/bin/bash
#set -x
#function

#Author  heshan

svn_repos="/svn/repository/Software"
backup_dir="/svn/svnbak"
backup_file="Software_backup".$(date +%Y%m%d --date='1 days ago')
log="$backup_dir/logs/last_load.log".`date +%Y%m%d`
echo "********************"`date`"***************">> $log
echo "SVN load start!">> $log
first_rev="`svnlook youngest $svn_repos`"
echo "First:$first_rev">> $log
if [ -f $backup_dir/$backup_file ];then
   svnadmin load $svn_repos < $backup_dir/$backup_file 2>&1 >>$log #¦Ì¨¨¡À¡¤Y?t
else
  echo " $backup_dir/$backup_file ??t2?¡ä no dump to load!" >> $log
  exit 0
fi
last_rev="`svnlook youngest $svn_repos`"
echo "Last:$last_rev">> $log
repo_slave=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`
echo "Next:$repo_slave">> $log
echo "$repo_slave">$backup_dir/slave.txt
echo "********************"`date`"***************">>$log
rm -rf "Software_backup".$(date +%Y%m%d --date='2 days ago')
echo "SVN load Eed!">> $log

  

posted @ 2020-10-09 17:08  higsan  阅读(502)  评论(0编辑  收藏  举报