Mac Pro 利用PHP导出SVN新增或修改过的文件

先前在 Windows 操作系统下,习惯用 TortoiseSVN 导出新增或修改过的文件(【相当实用】如何让TortoiseSVN导出新增或修改过的文件 ),最近换成了 Mac Pro 笔记本电脑,一时没找到类似 TortoiseSVN 好用的客户端工具。好吧,利用PHP写个导出小工具:

1、工具文件名:svn.php,其内容如下:

<?php
/**
 * 导出指定版本之间的差异文件,如 100 和 200 之间的差异则导出 100(不包括) - 200(包括) 的所有修改
 * 【SVN命令行】
 * 1、查看版本间差异
 * svn diff -r 2359:2360 --summarize --username simon --password simonfit svn://112.73.80.56/SJF/source
 * 2、导出某个版本文件到本地
 * svn export -r 2360 svn://112.73.80.56/SJF/source/common/controller/WechatBaseController.class.php /root/2/files_2359_2360/common/controller/WechatBaseController.class.php --username wenjianbao --password wjb888
 *
 * @example svn.php 100 200
 * @author 52php.cnblogs.com
 */

// 根目录
define(‘SITE_PATH‘, dirname(__FILE__));

// SVN 账号信息
$svn_url = ‘svn://112.73.80.56/SJF/source‘;
$svn_username = ‘wenjianbao‘;
$svn_password = ‘5c95e61387c478c85ccf45e6a8ae6de3‘;

$error_msg = ‘You must useage like ‘ . $_SERVER[‘argv‘][0] . ‘ old_version(不包括) new_version(包括)‘;
if ($_SERVER[‘argc‘] != 3)
{
	echo $error_msg;
	exit(1);
}

if ($_SERVER[‘argv‘][1] > $_SERVER[‘argv‘][2])
{
	echo $error_msg;
	exit(1);
}

$old_version = $_SERVER[‘argv‘][1];
$new_version = $_SERVER[‘argv‘][2];

$work_path = SITE_PATH . "/file_${old_version}_${new_version}";

echo "开始分析版本差异...\n";
$diff_cmd = "svn diff -r ${old_version}:${new_version} --summarize --username ${svn_username} --password ${svn_password} ${svn_url}";
exec($diff_cmd, $diff_list, $return);
$diff_list = (array)$diff_list;
foreach ($diff_list as $diff_info)
{
	echo $diff_info . "\n";
}

# 清空旧数据
@system(‘rm -rf ‘ . SITE_PATH . ‘/file_*‘);
@system(‘rm -rf ‘ . SITE_PATH . ‘/diff_*‘);

# 新建文件夹
dir_mkdir($work_path);

$diff_count = count($diff_list);
if ($diff_count < 1)
{
	echo "版本间没有差异";
	exit(1);
}

$diff_count = 0;
$diff_file_path = SITE_PATH . "/diff_${old_version}_${new_version}.txt";

# 导出版本文件
echo "开始导出...\n";
foreach ($diff_list as $diff_info)
{
	if (preg_match(‘/([\w]+)\s+(svn:.+)/‘, $diff_info, $matches))
	{
		$svn_file_mode = $matches[1];
		$svn_file_name = $matches[2];

		// A、M、D、AM即增加且修改
		// 文件被删除
		if ($svn_file_mode == ‘D‘)
		{
			continue;
		}
		$diff_count++;

		// 写日志
		file_write($diff_file_path, $matches[0] . "\n", ‘a‘);

		// 下载到本地
		$local_file_path = $work_path . str_replace($svn_url, ‘‘, $svn_file_name);
		$local_file_dir = dirname($local_file_path);
		dir_mkdir($local_file_dir);

		$export_cmd = "svn export -r ${new_version} ${svn_file_name} ${local_file_path} --username ${svn_username} --password ${svn_password}";
		system($export_cmd);
	}
}

echo "共导出${diff_count}个差异文件";
exit(0);

/**
 * 创建文件夹
 *
 * @param string $path      文件夹路径
 * @param int    $mode      访问权限
 * @param bool   $recursive 是否递归创建
 * @return bool
 */
function dir_mkdir($path = ‘‘, $mode = 0777, $recursive = true)
{
	clearstatcache();
	if (!is_dir($path))
	{
		mkdir($path, $mode, $recursive);
		return chmod($path, $mode);
	}

	return true;
}

/**
 * 写文件
 *
 * @param string $filename 文件名
 * @param string $text     要写入的文本字符串
 * @param string $openmod  文本写入模式(‘w‘:覆盖重写,‘a‘:文本追加)
 * @return bool
 */
function file_write($filename = ‘‘, $text = ‘‘, $openmod = ‘w‘)
{
	if (@$fp = fopen($filename, $openmod))
	{
		flock($fp, 2);
		fwrite($fp, $text);
		fclose($fp);
		return true;
	}
	else
	{
		return false;
	}
}

2、使用方法

在 svn.php 文件中修改下自己的 SVN服务器的地址和账号,以命令行模式运行下即可,如 导出版本号 100 到 200 之间的差异文件,

php svn.php 100 200
时间: 2024-11-13 11:06:44

Mac Pro 利用PHP导出SVN新增或修改过的文件的相关文章

从SVN导出指定版本号之间修改的文件

当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他 没有修改过的文件就没有必要上载到服务器.但一个稍微上规模的网站项目,文件是很多的,而且对于团队协作开发更难知道每次修改到哪些文件,这时候SVN的 作用发挥出来了. 利用Windows系统下的TortoiseSVN客户端,可以导出指定版本之间修改过的文件,并保留完整的文件夹结构.下面我就来说说操作的步骤: 1. 在网站项目的根目录下邮件选择TortoiseSV

Mac Pro 下使用svn

Mac 默认都会安装有svn 1.在项目下使用命令启动svn服务---svnserve -d -r 输入下列指令:svnserve -d -r /Users/apple/svn 或者输入:svnserve -d -r /Users/apple/svn/mycode 没有任何提示就说明启动成功了 2.输入 svn help add blame (praise, annotate, ann) cat changelist (cl) checkout (co) cleanup commit (ci)

Mac 學習系列之SVN环境配置及常用命令大全

Windows里面用SVN是比較方便和Easy的,mac下面的其實也一樣. mac下带有SVN因此只需要激活它–环境配置: svnadmin create $Path 用来下载一个svn程序即可 下载后就可以下载代码了. 以下是svn 常用命令大全: ??1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout http://xxxxxxxxxxxx 简写:svn co 2.往版本库中添加新的文件 svn add fil

Mac Pro更换SSD后,在Win7下启用ACHI的方法AHCI

在Mac Pro下更换SSD后,如果安装Win7,要将SSD改为AHCI模式是非常麻烦的.本文介绍如何将Mac的Win7下的SSD改为AHCI方式驱动,及几种常见问题的处理. 一.当Lion与Win7双系统并存时,如何将Win7的SSD驱动模式改为AHCI 1.1.进入Win7系统,修改注册表 通知系统下一次开机,加载AHCI驱动: 开始菜单,运行,regedit,进入以下目录:              HKEY_LOCAL_MACHINE\System\CurrentControlSet\S

Mac Pro 开机自启动 PHP-FPM,Nginx,MySql 等软件

在Mac下安装好了PHP开发环境(PHP-FPM,Nginx,MySql), 想设置成开机自启动,原来以为和一般的Linux系统一样,也是在rc.d这样目录放置启动脚本.在网上查了一些资料,发现苹果应该是把它完全封闭了,只能利用Mac系统里的Launchctl来做这个事. Launchctl 其实就是写一个 *.plist 的文件,它的作用和 Linux 里的 Crontab 的作用是一样的.下面以自启动 MySql 为例 1.新建文件 com.mysql.plist,但这个文件需要放到 /Li

PHPStorm Mac如何利用MAMP配置php?

本文小编将讲述PHpstorm Mac如何利用MAMP配置php?有需要的朋友可以参考一下!同时解决phpstorm 不能接受post 表单数据的问题!PHpstorm Mac利用MAMP配置php软件教程 一 .首先是配置MAMP PRO 至此MAMPPRO 已经配置完毕 二 .配置phpstorm 1.创建一个新的工程,路径选择我们刚在mamp 中创建的 项目文件夹,/Applications/MAMP/htdocs/项目文件夹. 2.在首选 项里面搜索servers ,点击?, debug

2019款Mac Pro到底有多强

0. 背景 2013款Mac Pro 俗称"垃圾桶",是苹果公司2013年底向市场推出的一款图形工作站,体积只有2010款Mac Pro 的八分之一,在体积上秒杀了市面上所有工作站,而性能却提高了 4 倍.主款主机颠覆了传统立式机箱的结构布局,由三块主板竖着围成一个三角尺由此构成了一个高9.9寸的圆柱型结构工作站.正是由于这种紧凑型设计造成扩展性问题,对于普通用户除了内存,很难升级其他部件,而该机器所设计的接口(USB3.0和雷电2).搭配的显卡(Fire ProD500)这种配置在当

利用itextsharp导出pdf

在项目中,客户要求把一些表格导出pdf格式,在网上找了好久终于发现一个完美的解决方案,利用itextsharp可以很方便的导出pdf文件,不说太多了,直接上图,有图有真相 首先是页面图片 然后是导出的pdf图片 导出pdf代码如下: //导出Mold pdf文档 public void exportpdf_Mold(string quotenum, string fullpath) { string pdfName = quotenum + ".pdf"; string savePat

Mac Pro的HDMI接口与WI-FI可能存在冲突的解决方法

当我将Mac Pro通过HDMI->DVI转接头接上一台显示器时,正在使用的WI-FI网络立马不能使用,重新连接网络也不行,但断开HDMI连接后,WI-FI立马恢复正常. 在网上查,在apple的中国支持社区里也找了,包括问询苹果公司的技术支持,都没得到解答,后来在Apple的美国支持社区里,看到有人也遇到此问题,并给出了解决方法. 解决方法: 1. 连接登录到无线路由的管理界面,如TP-LINK的管理入口是http://192.168.1.253 2. 在其中修改无线设置的参数,将信道的默认设