『SVN-hooks』win下同步更新本地wp主题到虚拟主机(二 实践篇)

上篇文章已经提供了5种软体的准备(你可以很顺利的通过那些链接分别下载下他们来)。

好吧,开始教程:

1、我们先从VisualSVN开始,默认情况下,它是被安装在C:\Program Files\VisualSVN Server目录下,进入之后你在此目录下会看到一个bin目录,我们暂且记下这个目录:C:\Program Files\VisualSVN Server\bin

2、我喜欢在D盘下安装一些SDK和XAMPP等数据或程序,所以我的SVN版本库安装在了D盘根目录下D:\Repositories,在这个目录下,就是我用SVN控制的一些程序,因为我是想给我的faceblog这款主题添加hook进行本地与虚拟主机的同步更新,所以进入我的wp-themes版本库即D:\Repositories\wp-themes,在这个目录下你将会看到有个名为hooks的目录(文件夹),打开它之后你将会看见很多以tmpl为后缀的文件,这是一些模板文件,我们复制一份post-commit.tmpl到post-commit.bat,并清空里面的文本内容。

3、在D盘根目录下,新建一个名为svn_sync_blog的文件夹,简单的意思就是:SVN同步博客。我们将之前下载的php-ftp-client、php-svn-client、php-svn-hooks解压之后放在这个目录(文件夹)下面,解压之后应该都是同命的文件夹,至于VisualSVN和tortoisesvn安装,下载下来之后双击鼠标就可以一路next下去就ok了,就不罗嗦了。

4、前面三步已基本部署完成,现在需要做的,就是做一些配置工作,用记事本编辑器打开第2步新建的post-commit.bat文件,粘贴下面的代码进去:

set PATH=D:\Xampp\php;%PATH%
php "D:\svn_syn_blog\php-svn-hooks\post-commit.php" %1 %2 "config.php"

注意蓝色标注部分,为本地的php 目录,我装的是集成包xampp所以就是这个目录,红色部分为要执行的php文件,此文件会引入php-svn-client类通过它来读取svn更新日志,并且引入php-ftp-client类通过它来上传或删除(svn的基本操作都有了)svn更新日志中变更的文件,感觉这个文件比较重要,后面紧跟了三个参数,前两个%1 %2是svn传入的参数,第三个是配置文件的地址,因为config.php和post-commit.php在同一个文件下,所以只需填写文件名就可以了。

5、用文本编辑器打开D:\svn_syn_blog\php-svn-hooks目录下的config.php文件,这是个配置文件,如下所示:

return array(

	'svn'	=> array(
		// 工作目录
		'workspace'	='D:\Xampp\htdocs\wordpress\wp-content\themes\faceblog',

		// svn bin文件夹绝对路径,若此文件夹已包含在环境变量中,可以不设置
		'bin'		='C:\Program Files\VisualSVN Server\bin'
	),

	'ftp'	=> array(
		// 服务器
		'server'	= '空间IP地址',

		// 用户名
		'username'	= 'ftp用户名',

		// 密码
		'password'	= 'ftp密码',

		// 同步的目录,
		'sync_root'	= '/domains/crossyou.cn/public_html/wp-content/themes/faceblog/'
	),

);

上面蓝色标注部分,我的本地工作目录,即faceblog主题目录(svn 地址其实是:https://…./svn/wp-themes/trunk/faceblog)。

红色标注部分,即在第1步中我记下的那个目录。

绿色标注部分,为我的要上传的ftp地址。

6,理论上来讲,我们按照上面的5个步骤,从部署到配置就完成了,但本人这样做完之后,却发现存在很多的问题,遇到的问题及要注意的如下:

感觉php-ftp-client类库里的isDir($path)函数 原作者 写的貌似有点问题,即判断传入的参数是否是目录上 不太靠谱,后来我改了一下才凑合用了。

刚开始调试的时候,每调试一次,我都得提交一次faceblog的版本库,比较麻烦,并且还是些不必要的提交纯粹是测试提交,后来在知道可以在cmd中以命令行的形式调试,其实就是模拟执行了D:\Repositories\wp-themes\hooks\post-commit.bat文件的执行,在cmd中打入:

php "D:\svn_syn_blog\php-svn-hooks\post-commit.php" D:\Repositories\wp-themes 121 "config.php"

上面标注的部分,即 传入的三个参数,分别代表:本地版本库地址、版本号、配置文件,传入后在post-commit.php通过$_SERVER['argv'][1]、$_SERVER['argv'][2]、$_SERVER['argv'][3]来获取,至于$_SERVER['argv'][0]是默认传入的参数也就是”D:\svn_syn_blog\php-svn-hooks\post-commit.php”要执行的php文件本身。

作者在写post-commit.php文件里的程序时,估计是没有考虑版本库下创建了 branches、trunk等情况,因为我的faceblog在版本库中实际的目录是 wp-themes/trunk/faceblog,这样的话,如果你按照上面的配置的话,实际 ftp上传的是,D:\Xampp\htdocs\wordpress\wp-content\themes\faceblog\wp-themes\trunk\aceblog当然这是不存在的,所以就不会成功,所以如果是这种形式的话,还要自己动手修改一下post-commit.php里面的程序,在此不赘述,通过②相信自己调试的过程中你会发现的。

偶也,写完了。

其实,回头想想,这个方法也不算太麻烦,麻烦就是麻烦在原作者写的程序还不够好(希望原作者能够及时的更新),方法太零散,但是其实你只要明白了这个原理了,就会明白许多了。

我想估计用的真正使用的人不会很多,也或许是他们有更好的同步方法。

《全文完》

这篇文章目前有6条评论

  1. 搓板 2010-11-23 10:03

    这个我收了. 不错不错[我需要.]. 哈哈哈. 竟然还是沙发.

    沙发王 !
    • admin 2010-11-23 11:16

      传说中的沙发党??

  2. Dio 2010-11-23 10:54

    哥的新一轮YD攻略正式开始,快去看看我新发的文章吧

    板凳党 !
  3. xiao.z 2010-11-23 11:35

    研究一下,看上去还挺复杂。厚厚!~

    地板砖 !
  4. 爱惜 2010-11-23 19:30

    学习了。一般不本地的。

    5 #
Leave a Reply

(必填项)

(必填项)

(可选)