SVN迁移并做同步库操作步骤:
1.备份SVN,按项目仓库备份出各仓库。 参考
svnadmin dump E:RepositoriesSoftware >e:svnbakSoftware.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