注:本文仅针对没有条件在主机上安装SVN服务器的情况,例如使用虚拟主机的开发人员。如果满足以下几个情况,本文可能非常适合你:

  • 开发人员只有一个人

  • 服务器是虚拟主机只有ftp没有svn,并且也无法自己安装程序

  • 厌烦了每次部署修改都要整理更新文件列表并逐个提交

前言:我为什么要做这样的一个东西?近一个月来,在Raychou.com上花了不少时间,新开了实验室小技巧两个栏目,尤其是实验室,以后可能会经常要更新代码,而以往每次更新代码都是先在Eclipse里写好,然后打开FtpRush,切换到要更新的文件夹,将整个目录提交到服务器,繁琐又费时。更是因为这个原因,weather也有段时间没有更新了,我是懒人,但仅仅是懒于做繁琐而机械的工作,我需要改变这个现状,于是有了下面的内容。

相信很多开发人员和我一样,在工作之余还会管理个人网站,和网友们分享自己的经验和代码。应该大部分人都是租用的虚拟主机,这样平时在公司那一套使用SVN提交代码的方式就不管用了,每次更新程序,都要先整理一份修改记录,然后依次用FTP上传,麻烦耗时不说,还会经常遗漏文件,造成不必要的麻烦。

想要让线上代码和本地开发环境保持同步,方法也很多,最简单的可以利用CuteFtp,WinScp的文件夹监视功能,当被监视的文件夹内有修改动作,就会自动触发程序提交代码到服务器。但这样也有个弊端,在本地调试的修改也会带上线,虽然是方便了,但可能造成更大的问题。

之前我写过《利用SVN Hooks实现快速方便的代码管理/发布方式》一文,是利用SVN Hooks实现在提交代码到SVN时,自动部署更新的文件到测试服务器。同样的,利用Hooks,我们也可以把代码同步到FTP服务器,不同的是,这次的SVN服务器是架设在开发环境中,也就是说,不需要额外的服务器,任何人都可以通过SVN实现开发环境与线上的代码同步。

php-svn-hooks.gif

如图所示,当开发人员在本地开发并调试后,提交代码到本机SVN服务器,触发post-commit钩子,调用post-commit.bat,(由于对bat的语法不熟悉,在这个架构中,我用php代替bat,post-commit.bat仅做了在命令行下调用post-commit.php并传参),然后然后进行文件的同步处理。

大致流程如下:

  1. 开发人员提交代码到SVN服务器

  2. 提交完成后,自动调用post-commit钩子

  3. 钩子调用php脚本并传递三个参数:代码仓库路径,当前版本号,配置文件名

  4. php脚本通过传递过来的参数取得并分析当前版本的更新日志

  5. 根据不同的情况(新增、修改、删除、重名民)来同步文件

post-commit.bat代码如下:

set PATH=D:Program FilesWebServerPHP5.2.6;%PATH% php "F:wwwrootsiteraychoulabsphp-svn-hookspost-commit.php" "%1" %2 "config/raychou.php" 1>&2

除post-commit默认的%1和%2两个参数外,这里我还传了第三个参数”config/raychou.php”,这个参数是传递给PHP脚本,让其去读取指定的配置文件,这个配置文件是在同步过程中需要用到的一些设置,例如SVN工作目录,FTP帐号等设置。

php在接收到hooks传递过来的参数后,读取配置文件,连接本地SVN版本库,取得并分析本地更新日志,连接FTP服务器,开始同步文件。

关于SVN Hooks以及post-commit的参数传递,请参考这里http://www.subversion.org.cn/svnbook/1.4/svnbook.html#svn.ref.reposhooks

代码下载,代码部署结构请参考http://www.raychou.com/labs/

php-svn-hooks php-ftp-client php-svn-client


最新发布
linux下svn提交忽略某些文件... (168)
使用批处理来批量更新、提交SVN... (132)
linux查看目录文件大小命令 (140)
linux tar打包压缩排除某个... (130)
Linux tar压缩和解压 (188)
SVN子命令add用法浅析 (126)
热门博文
网友FBI探案:马蓉iPad惊人发现... (43340)
霍金携手俄罗斯富豪耗资1亿美元寻找外... (4743)
如何才能查看PHP内置函数源代码... (1205)
微信支付开发当前URL未注册的解决方... (571)
《谁为爱情买单》中的经典面试 ... (437)
让虚拟主机也用上SVN:适用于个人的... (391)
精华博文
[推荐]Centos7 安装配置 SVN (153)
easyswoole框架安装 (170)
php开启pecl的支持(推荐) (153)
1-10个恋爱表现:男朋友爱你程度到... (160)
女生喜欢你的10个程度,到第六个就可... (136)
Eclipse 没有Server选项... (206)
友情链接
我来忙 (110)