IT技术博客大学习 共学习 共进步

让虚拟主机也用上SVN:适用于个人的开发部署方式

周帆的web实验室 2009-11-03 16:29:28 浏览 4,704 次

    注:本文仅针对没有条件在主机上安装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并传参),然后然后进行文件的同步处理。

    大致流程如下:

开发人员提交代码到SVN服务器提交完成后,自动调用post-commit钩子钩子调用php脚本并传递三个参数:代码仓库路径,当前版本号,配置文件名php脚本通过传递过来的参数取得并分析当前版本的更新日志根据不同的情况(新增、修改、删除、重名民)来同步文件

    post-commit.bat代码如下:

以下是代码片段:
set PATH=D:\Program Files\WebServer\PHP5.2.6;%PATH%
php "F:\wwwroot\site\raychou\labs\php-svn-hooks\post-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

建议继续学习

  1. 最近总结的一些技巧(vim,python,svn,fiddler等) (阅读 8,103)
  2. SVN Hook造成SVN提交速度慢的问题 (阅读 6,165)
  3. GIT和SVN之间的五个基本区别 (阅读 5,742)
  4. 利用tortoiseSVN在两个版本库间merge code (阅读 4,861)
  5. 为何改用Git (阅读 4,862)
  6. 分享一个固定时间自动更新svn的简单shell脚本 (阅读 4,144)
  7. 有关 SVN、Cygwin 和 Notepad++ (阅读 3,942)
  8. 本地搭建SVN服务 (阅读 3,401)
  9. 如何在Myeclipse下安装和使用svn客户端插件 (阅读 3,381)
  10. SVN小记 (阅读 3,262)