本节简单向大家描述一下SVN自动同步方面的内容,因为它是我们在学习SVN过程中难免会遇到的问题,所以和大家一起来学习一下,希望通过本文大家能够对SVN自动同步问题有新的看法。
 SVN自动同步需求分析:
 1、用户提交文件时将其同步到Web服务器对应目录
 2、用户提交文件时将其同步到另一个SVN版本库
 3、日志记录整个操作过程

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都网站设计、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的浚县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
SVN自动同步程序执行流程:
 1、用户提交文件到SVN服务器,提交操作成功后触发post-commit脚本
 2、在post-commit版本文件中使用phpphp_script.php执行PHP脚本
 3、在PHP脚本中通过exec系统调用更新服务器上的版本库工作副本
 4、根据更新操作结果日志,对另一个SVN版本库进行对应的操作处理
日志文件说明:
 svn-post-commit-log.txt意外操作错误日志
 svn_log_master_2010-03-01.txt2010-3-1主SVN操作日志
 svn_log_slave_2010-03-01.txt2010-3-1副SVN操作日志
程序源码说明:
 post-commit:svnhookscript
 #!/bin/sh
 #设置语言为UTF8字符集exportLANG=en_US.UTF-8
 #执行SVN同步操作的脚本,并把意外错误信息保存到日志文件
 php/var/www/svn/svn004/hooks/post-commit-sync.php>>/var/www/log/svn-post-commit-log.txt2>&1
 post-commit-sync.php:PHP自动同步脚本
 #!/usr/bin/php
  /**
 *SVN自动同步
 *自动根据用户的提交操作,同步文件到Web服务器及另一个SVN版本库
 */
 $svnhost='http://192.168.1.40/svn004';//子SVN版本库地址
 $svnout='/var/www/html/svnout';//子版本库检出目录
 $svnlog='/var/www/log';//操作日志文件目录
 $svnmast='/var/www/html/svnmast';//主版本库检出目录
 /**
 *保存操作日志到文件中
 *@paramstring$logname日志名称
 *@paramstring$content日志内容
 *@returnbooleam操作状态
 */
 functionsave_log_to_file($type,$content){
 global$svnlog;
 if(empty($type)||empty($content)){
 returnfalse;
 }
 //生成日志文件名称
 $str_log_file=$svnlog.'/svn_log_'.$type.'_'.date('Y-m-d',time()).'.txt';
 //组合日志内容
 $content=is_array($content)?implode("\n",$content):(string)$content;
 $content='svnbotoperatordate:'.date('Y-m-dH:i:s',time())."\n".$content."\n\n";
 returnfile_put_contents($str_log_file,$content,FILE_APPEND);
 }下面看一下SVN自动同步过程中组合日志内容时可能出现的一些问题。
 //如果SVN输出文件夹不存在就创建一个,登陆失败就退出
 if(!is_dir($svnout)){
 if(!@mkdir($svnout)){
 save_log_to_file('slave','error:createslavesvnoutputdirectoryfaile!');
 exit();}
 }
 //如果文件夹中没有文件则执行一次checkout操作
 $filelist=scandir($svnout);
 if(count($filelist)<=2){
 exec('svncheckout'.$svnhost.''.$svnout);
 }
 //如果 checkout失败则退出程序
 if(!is_dir($svnout.'/.svn')){
 save_log_to_file('slave','error:slavesvnisnotavaildateworkcopy!');
 exit();
 }
 //用于保存系统调用的操作结果。本节关于SVN自动同步问题介绍完毕,请关注本节其他相关报道。
【编辑推荐】