我们都知道,SVN服务器端搭建好之后,要先创建版本库。而版本库中的文件都是以加密的方式存在,并不是提交上来的代码直接存放的。
因此,就有这样一个问题,我们希望我们测试好的代码提交到SVN服务器之后,可以不再经过其他的手动操作,而直接看到代码在服务器上的效果,比如web代码可以通过url直接看到。
解决方案的原理是这样,客户端commit到SVN的代码,在服务器端自动update到web服务器的代码目录。而Linux下的SVN服务端是提供这样的机制的,我们每创建一个版本库的时候注意到,在版本库目录下有hook这样一个文件夹,里面默认的都是.tmpl这样的临时文件。我们需要做的就是将post-commit.tmpl重命名为post-commit。这样,在客户端出现commit操作的时候,就会触发这个文件里的操作。接下来,我们只需要在post-commit这个文件中,写入相应的命令,update到web服务器代码目录即可。
这样一来,就实现了,客户端测试好的代码提交到服务器之后,可以直接通过web服务器看到效果。
示例:
1、创建svn服务器版本库
mkdir /usr/local/svn
svnadmin create /usr/local/svn/testsvn
2、配置好conf下的三个文件,这里不做赘述,可以参考我另一篇博客《Linux下svn服务器端安装及配置教程》
3、将版本库下hook目录下的post-commit.tmpl重命名为post-commit,并给post-commit文件可执行权限
chmod a+x post-commit
post-commit文件中写入如下命令:
#!/bin/sh
export LANG=zh_CN.UTF-8
svn update /var/www/html/test
如果没有保存缓存密码,则update的时候需要指定svn用户名及密码,也可以强制不保存密码--no-auth-cache
4、启动该版本库
svnserve -d -r /usr/local/svn/testsvn
5、给web服务器目标代码目录checkout一份代码
svn checkout svn://127.0.0.1/ /var/www/html/test
6、搞定。这个时候客户端svn提交代码的时候,就会自动update到代码目录啦