IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

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

周帆的web实验室 2009-11-03 16:29:28 累计浏览 4,786 次
本机暂存

    注:本文仅针对没有条件在主机上安装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. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. 利用find和sed批量替换文件内容 (累计阅读 11,460)
  2. 最近总结的一些技巧(vim,python,svn,fiddler等) (累计阅读 8,202)
  3. ZooKeeper管理员指南——部署与管理ZooKeeper (累计阅读 6,588)
  4. SVN Hook造成SVN提交速度慢的问题 (累计阅读 6,280)
  5. GIT和SVN之间的五个基本区别 (累计阅读 5,872)
  6. wget 的使用 (累计阅读 5,764)
  7. 关于不得不在python中使用代理访问网络的方法 (累计阅读 5,086)
  8. 利用tortoiseSVN在两个版本库间merge code (累计阅读 4,952)
  9. 五款最好的免费同步软件 (累计阅读 4,808)
  10. 在dotcloud上部署Django全程记录 (累计阅读 4,402)