SVN自动同步方法

该方法仅适用于同步服务器和SVN服务器在同一台机器下,否则无法实现

原理通过在post-commit中运行php代码实现自动update


新建一个php文件

<?php
/**

 * SVN 自动同步

 *
在svn目录中hooks下新建post-commit文件,并赋予777权限
在文件中调用php命令执行该文件
内容为
/home/tools/tools/php/5.2.17/64/bin/php /home/tuan/jp/svn/hooks/post-commit-sync.php
也可以把输出指向一个文件,不过这样提交时就不会出现出错信息
/home/tools/tools/php/5.2.17/64/bin/php /home/tuan/jp/svn/hooks/post-commit-sync.php>>/????/svn-post-commit-log.txt 2>&1

其中php和svn命令必须用全目录,否则
 * 自动根据用户的提交操作,同步文件到Web服务器及另一个SVN版本库

*/
$svnhost = 'svn://localhost:8081/ODPSvn/app'; // 子 SVN 版本库地址
$svnout = '/home/tuan/odp/app'; // 子版本库检出目录
$svnlog = '/home/tuan/jp/svn/log'; // 操作日志文件目录
$svnmast = '/home/tuan/odp/app'; // 主版本库检出目录
/**
 *
 *
 *
 * 保存操作日志到文件中
 *
 *
 *
 * @param string $logname
 *        	日志名称
 *        	
 * @param string $content
 *        	日志内容
 *        	
 * @return booleam 操作状态
 *        
 *        
 */
function save_log_to_file($type, $content)
{
	global $svnlog;
	
	if (empty ( $type ) || empty ( $content ))
	{
		return false;
	}
	
	// 生成日志文件名称
	
	$str_log_file = $svnlog . '/svn_log_' . $type . '_' . date ( 'Y-m-d', time () ) . '.txt';
	// 组合日志内容
	$content = is_array ( $content ) ? implode ( "\n", $content ) : ( string ) $content;
	$content = 'svn bot operator date:' . date ( 'Y-m-d H:i:s', time () ) . "\n" . $content . "\n\n";
	return file_put_contents ( $str_log_file, $content, FILE_APPEND );
}

// 如果 SVN 输出文件夹不存在就创建一个,登陆失败就退出
if (! is_dir ( $svnout ))
{
	if (! @mkdir ( $svnout ))
	{
		save_log_to_file ( 'slave', 'error:create slave svn output directory faile!' );
		exit ();
	}
}

// 如果文件夹中没有文件则执行一次 checkout 操作

$filelist = scandir ( $svnout );

if (count ( $filelist ) <= 2)
{
	exec ( 'svn checkout ' . $svnhost . ' ' . $svnout );
}

// 如果 checkout 失败则退出程序

if (! is_dir ( $svnout . '/.svn' ))
{
	save_log_to_file ( 'slave', 'error:slave svn is not a vaildate work copy!' );
	exit ();
}

// 用于保存系统调用的操作结果
$output = array ();
// 开始更新主 SVN 版本库, 避免没有必要的版本冲突
exec ( 'svn update ' . $svnmast, $output );
save_log_to_file ( 'master', $output );

?>
详细内容在注释中都有

至于如何找到所有命令的全目录使用

which +命令

例如

which php

which svn



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值