本文实例讲述了PHP封装的svn类使用内置svn函数实现根据svn版本号导出相关文件。分享给大家供大家参考,具体如下:
<?php $revision_array = array(3099, 3339, 2573,3351); /* svn的版本号 */ $svnPeer = new svnPeer(); $filelist = $svnPeer->_get_file_list($revision_array); if (!empty($filelist)) { $lbv_export = $svnPeer->_svn_export_list($filelist, 'trunk889'); if (true === $lbv_export) { echo '导出成功'; } else { echo '导出失败'; } } else { echo '获取文件列表失败'; } /** * php操作svn类,全部利用php内置的svn函数 * * @author wengxianhu * @date 2013-08-05 */ class svnPeer { /* svn用户名 */ public $svn_user = 'wengxianhu'; /* svn密码 */ public $svn_password = 'wxh025'; /* 来源路径 */ public $source_path = '/var/www/trunk/'; /* 目标路径 */ public $dest_path = '/var/www/'; /** * 构造函数 * * @author wengxianhu * @date 2013-08-05 * @return void */ public function __construct () { $this->_svn_connect(); } /** * 配置SVN使用默认的用户名和密码 * * @author wengxianhu * @date 2013-08-05 * @return void */ public function _svn_connect () { svn_auth_set_parameter(SVN_AUTH_PARAM_DEFAULT_USERNAME, $this->svn_user); svn_auth_set_parameter(SVN_AUTH_PARAM_DEFAULT_PASSWORD, $this->svn_password); } /** * 根据svn版本号获取所有的文件路径 * * @author wengxianhu * @date 2013-08-05 * @param array $revision_array 版本号列表 * @return array */ public function _get_file_list ($revision_array = array()) { if (!empty($revision_array)) { $filelist = array(); $log_list = array(); rsort($revision_array, SORT_NUMERIC); foreach ($revision_array as $_k=>$_v) { $log_list = @svn_log($this->source_path, $_v, $_v); if (false === $log_list) { return false; } else { $log_list = current($log_list); foreach ($log_list['paths'] as $s_k=>$s_v) { $s_v['path'] = preg_replace('/^\/[^\/]+\/(.*)$/i', '$1', $s_v['path']); $filetmp = $s_v['path']; if (is_file($this->source_path . $s_v['path'])) { if (false === $this->multidimensional_search($filelist, array('filepath'=>$s_v['path']))) { $filelist[] = array( 'revision_no' => $log_list['rev'], 'filepath' => $s_v['path'] ); } } } } } return $filelist; } } /** * 对多维数组进行搜索 * * @author wengxianhu * @date 2013-08-05 * @param array $parents 被搜索数组 * @param array $searched 搜索数组 * @return boolean */ public function multidimensional_search ($parents = array(), $searched = array()) { if (empty($searched) || empty($parents)) { return false; } foreach ($parents as $key => $value) { $exists = true; foreach ($searched as $skey => $svalue) { $exists = ($exists && IsSet($parents[$key][$skey]) && $parents[$key][$skey] == $svalue); } if ($exists) { return $key; } } return false; } /** * 根据svn版本号导出相应的文件 * * @author wengxianhu * @date 2013-08-05 * @param array $file_array 文件路径名 * @param string $package_name 包名 * @return boolean 成功为true,失败为false */ public function _svn_export_list ($file_array = array(), $package_name = '') { $info = true; $this->dest_path = $this->dest_path . $package_name; if (file_exists($this->dest_path)) { $this->delDirAndFile($this->dest_path); } foreach ($file_array as $_k=>$_v) { $source_files = $this->source_path . $_v['filepath']; $dest_files = $this->dest_path . '/' . $_v['filepath']; $revision_no = (int)$_v['revision_no']; $this->_mkdirm(dirname($dest_files)); $lbv_export = @svn_export($source_files, $dest_files, false, $revision_no); if (false === $lbv_export) { $info = false; break; } } return $info; } /** * 创建文件夹 * * @author wengxianhu * @date 2013-08-05 * string $path 文件路径(不包括文件名) * return void */ public function _mkdirm ($path) { if (!file_exists($path)) { $this->_mkdirm(dirname($path)); mkdir($path, 0755); } } /** * 循环删除目录和文件函数 * * @author wengxianhu * @date 2013-08-15 * @param string $dirName 目录路径 * return array */ public function delDirAndFile($dirName) { if ( $handle = opendir( "$dirName" ) ) { while ( false !== ( $item = readdir( $handle ) ) ) { if ( $item != "." && $item != ".." ) { if ( is_dir( "$dirName/$item" ) ) { $this->delDirAndFile( "$dirName/$item" ); } else { unlink( "$dirName/$item" ); } } } closedir( $handle ); rmdir( $dirName ); } } }
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP目录操作技巧汇总》、《php文件操作总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
本文向大家介绍svn 导出版本化数据(普通下载),包括了svn 导出版本化数据(普通下载)的使用技巧和注意事项,需要的朋友参考一下 示例 如果要获取版本化项目的数据,但是不需要Subversion提供的任何版本控制功能,则可以运行svn export <URL>command。这是一个例子: 结果,您将获得项目的数据导出,但是与工作副本不同,您将无法在其上运行svn命令。导出只是数据的简单下载。
RPM 安装(推荐) wandisco 整理的 RPM 文件官网:http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/x86_64/ 下载下面几个 RPM 文件: 创建目录来保存下载的 RPM:sudo mkdir -p /opt/setups/subversion/ ; cd /opt/setups/subversion/ wget http
update to revision:更新到指定版本。
Subversion (SVN)是一个版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。 开源中国的码云 gitee.com 支持 Git 和 SVN 同步,可用来托管 SVN 项目。 优于CVS之处 原子提交。一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数
主要内容:一、下载Subversion的eclipse插件 ,二、安装插件步骤一、下载Subversion的eclipse插件 http://pan.baidu.com/s/1eSxVNWm 下载 site-1.10.11.zip,本教程将此zip放在D盘。 二、安装插件步骤 STS(Eclipse)上安装svn插件步骤: 1、进入STS软件安装界面 2、安装svn插件 点击下一步。 接受协议,完成: 出现提示,选择继续安装: 安装完成,查看STS视图有SVN选项说明安装
问题内容: 我在SVN下有一个python项目,我想在运行时显示版本号。有什么方法可以做到这一点(例如在提交时自动运行一个简短的脚本,该脚本可能会更新版本文件,或者在Python中查询SVN存储库?) 问题答案: 我不确定Python的具体细节,但是如果将字符串$ Revision $放入文件中的某个位置,并且您在SVN配置中具有enable-auto-props = true,它将被重写为类似$