您现在的位置:首页 > 资源 > 技术文档

Windows 2003下配置SVN自动备份、发布网站

文章来源: 2012-04-23 点击次数:

 环境:

 
服务端:
操作系统:windows2003
SVN:VisualSVN Server 2.0.7
 
客户端:
TortoiseSVN 1.6.2
 
目的:
 
网站服务器和SVN服务器在同一台机器上,希望实现在自己的的机器上修改完代码后,直接用TortoiseSVN 提交上去,同时更新网站服务器上的相应文件。
 
原理:
 
Subversion是一个强大的版本控制系统,不仅能轻松实现版本库管理的各种功能。更为强大的是提供了一系列的Hook,可以由事件触发来插入自己的执行代码。
 
如果你有一个SVN库存放在/repos/test下,那么你的hook将被存放在/repos/test/hooks目录下。
 
在这个hook目录下存放着大量的临时文件。分别对应不同的事件:
 
    * start-commit – 提交开始时触发,可以用来做权限检查
    * pre-commit – 提交事务之后正式提交之前触发,经常用来检查日志信息。
    * post-commit – 提交成功之后触发.可以用来发送邮件通知,备份版本库等。
    * pre-revprop-change – 版本库中的某个属性发生改变前,可以用来做权限检查
    * post-revprop-change – 版本库中的某个属性发生改变后,可以用来发送邮件通知或记录改变的属性.
    * pre-lock – 锁定文件前发生,可以用来做权限检查
    * post-lock – 锁定文件后发生,可以用来发送邮件通知或记录锁定的文件
    * pre-unlock – 解除锁定文件前发生,可以用来做权限检查
    * post-unlock – 解除锁定文件后发生,可以用来发送邮件通知或记录解除锁定的文件
 
在这里,我们需要处理的是post-commit事件,也就是说需要在文件提交成功后通知网站更新数据。
 
步骤:
 
   1. 安装VisualSVN Server 2.0.7,整个安装过程非常简单,安装完就可以在windows的管理页面看到了,设置也比较简单。但是安装完默认使用SYSTEM用户来执行,对目录没有写的权限,会导致执行第4步Hook脚本失败,所以还需要修改一下VisualSVN Server服务的登录用户,我这里将其设置为了Administrator 。
 
      如图:
   2. 设置网站根目录(如:e:/web) 为SVN工作目录,从版本库下载所有文件
   3. 在hook目录中创建一个文件post-commit.bat (注意:windows下有效的脚本类型可以是,.bat .com .exe 或其他有效的Python脚本,perl脚本),因为不需要太复杂的功能,所以使用bat是最简单的。
   4. 编辑 post-commit.bat 内容为:
 
       "E:/Program Files/VisualSVN Server/bin/svn.exe" update "e:/web/" 
 
      这段代码意思是使用SVN从版本库更新网站根目录
 
Ok,就这么几步,我在设置的时候,由于还不知道VisualSVN Server的执行权限问题,导致每次 commit 后客户端都停止响应,但自己执行 post-commit.bat 又没有什么问题,最后反复查找才发现了问题所在,记录下来,希望能给遇到相同问题的朋友一点帮助。