在三宝殿项目的开发中,一直使用SVN进行版本控制,但线上代码的更新方式,仍一直使用传统的FTP更新方式,由于经常更改了大量散布的代码,发布更新时却又不能很好的一一上传,因此一般在发布更新时,都是将整个项目代码全部提交,费时费力。而且由于发布更新的繁琐,很早就搭建的测试环境一直没有利用。
最近把服务器的目录结构做了一下整理,也萌发了将测试环境重新利用上的想法,但传统的FTP更新方式势必要淘汰。在和蓝色的讨论中了解了SVN的Hooks,简单说Hooks就是在进行SVN相关操作时,可以自定义一些前置或后置操作,可以实现代码提交时发送邮件,自定义目录权限验证等等。
经过两天的部署,最终实现方案如下:

当开发人员提交代码到SVN,利用SVN的hooks,自动将代码更新到测试环境,这样可以实现测试环境永远是最近的代码版本,便于及时发现问题。
生产环境不使用hooks更新,因为提交到SVN的代码仍然存在大量Bug,目前采用的方式是通过登陆SSH手工update。计划今后通过PHP脚本diff代码仓库和工作副本的区别,通过Web页面进行选择性更新。
通过这种方式,完全抛弃了原来FTP的更新方式,不但节省了发布更新的时间,也最大限度的保证了代码的完整性。

我采用的做法是测试环境用svn update(测试环境连的是正式数据库),然后通过自己写的一个同步脚本(调用rsync命令)同步到线上的web server,可以指定只同步单个文件/目录。
@Yimin
测试环境也连的正式数据库?那岂不是只能做读操作?这样能保证测试到位么?
其实这两个方式差别不大,我更倾向于测试环境自动update,线上环境手工update