Windows 2003下配置SVN自动备份、发布网站
May 31st, 2008
环境:
服务端:
操作系统:windows2003
SVN:VisualSVN Server 1.01
客户端:
TortoiseSVN 1.4.7
目的:
网站服务器和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事件,也就是说需要在文件提交成功后通知网站更新数据。
步骤:
- 安装VisualSVN Server 1.01,整个安装过程非常简单,安装完就可以在windows的管理页面看到了,设置也比较简单。但是安装完默认使用SYSTEM用户来执行,对目录没有写的权限,会导致执行第4步Hook脚本失败,所以还需要修改一下VisualSVN Server服务的登录用户,我这里将其设置为了Administrator 。
如图:
- 设置网站根目录(如:e:\web) 为SVN工作目录,从版本库下载所有文件
- 在hook目录中创建一个文件post-commit.bat (注意:windows下有效的脚本类型可以是,.bat .com .exe 或其他有效的Python脚本,perl脚本),因为不需要太复杂的功能,所以使用bat是最简单的。
- 编辑 post-commit.bat 内容为:
"E:\Program Files\VisualSVN Server\bin\svn.exe" update "e:\web\"
这段代码意思是使用SVN从版本库更新网站根目录
Ok,就这么几步,我在设置的时候,由于还不知道VisualSVN Server的执行权限问题,导致每次 commit 后客户端都停止响应,但自己执行 post-commit.bat 又没有什么问题,最后反复查找才发现了问题所在,记录下来,希望能给遇到相同问题的朋友一点帮助。